예스스탁
예스스탁 답변
2022-03-10 10:12:49
안녕하세요
예스스탁입니다.
1
봉완성이 다음봉시가가 수신될때입니다.
다음봉 시가의 날짜를 리턴해주는 함수가 nextbarsdate입니다.
NextBarSdate == sDate은
현재 완성된봉의날짜(sdate)와 다음봉시가(NextBarSdate)의 날짜가 같다라는 내용으로
현재 완성된 봉이 당일 마지막봉이 아니라는 내용입니다.
진입에 사용되는 atstop,atlimit은 봉완성시 가격을 셋팅하고
셋팅된 값과 다음봉시세를 비교해해서 신호가 발생하는데
당일 마지막봉에 셋팅이 되면 다음날 첫봉의 시세와 비교하므로
이부분을 막기위해 NextBarSdate == sDate조건이 사용된것입니다.
sdate는 0시 기준으로 제공되는 달력상 날짜이고
bdate는 business date로 거래소 영업일변경기준 날짜입니다.
국내거래소도 영업일 변경기준은 9시입니다.
다만 국내거래소 종목은 야간장이 없어 sdate,bdate를 구분없이 상용하지만
야간장이 해외선물의 경우에는 2개의 날짜변경시점이 다릅니다.
2
수식상 이상한 부분은 없습니다.
일봉이평(mav)보다 저가가 위에 있는 상태에서
하락해서 mav이하의 시세가 발생하면 진입이 발생합니다.
적용해 보아도 신호가 발생하고 있습니다.
설정창에서 피라미딩이 설정되어 있는지 확인하시기 바랍니다.
시스템은 기본적으로 추가진입이 안되데 되어 있어
수식에서 추가진입식이 있어도 설정창에서 피라미딩을 설정하지 않으면
추가진입이 발생하지 않습니다.
3
작성하신 손절식은 조건이 만족하면 전량청산입니다.그리고 무포지션이 됩니다.
포지션함수에서 (0)은 진행중인 포지션을 의미합니다.
청산완료된 포지션의 값은 (1)로 리턴받습니다.
LatestExitName(0)은 포지션 진행중 일부손절할때 값일 리턴합니다.
손절되고 무포지션이면 LatestExitName(1)로 값을 리턴받아야 합니다.
4
3개의 진입명이 모우 아니어야 하므로
조건을 and로 연결하셔야 합니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 시스템식 문의 드립니다.
> 주식현물 시스템식 작성중에 궁금한게 있어 글을 남깁니다.
1. if Bdate != Bdate[1] Then
Condition1 = False;
위 식에서는 날짜가 하루 지나가게 되면 condition1 = false 로 바뀌게 되는걸로
알고 있는데
if NextBarSdate == sDate and (MarketPosition == 0 or
(MarketPosition == 1 and sDate == EntryDate)) Then
매수전에 사용되었던 조건식인데 해석이 잘 안됩니다. ㅜ.ㅜ 해석좀 부탁드립니다.
메뉴얼에는 nextbarsdate가 다음봉시작날짜라고 써 있는데
진입날짜 (ex)3/6일) 가 sdate에 저장되고 1분봉차트에서 다음봉이 나올때마다
sdate(3/6)일 날짜와 비교해서 맞으면 조건이 성립되는게 맞는건가요??
그럼 sdate와 bdate의 차이점이 몬지도 궁금합니다..
메뉴얼보니 sdate는 봉의 시작날짜이고 bdate는 영업일이라고 나오는데?
2. 3시에 매수해서 그 다음날 일봉상 3일선을 터치하면 추매하는 전략을 사용하려고
아래와 같은 시스템식을 작성하였는데 다음날 매수가 안됩니다.ㅜ.ㅜ
확인좀 부탁드리겠습니다.
왜 안되는걸까요??
매수포지션을 들고 있으면서 진입날짜로 부터 하루가 지나고, 3일선 아래로 돌파했을
때 매수해라 .. 제대로 작성한것 같은데..ㅜ.ㅜ
3. '손절' 같은 latestexitname 으로 가장 마지막 청산명으로 다시 매수가 안되게 진행하려고 하는데
시뮬레이션을 돌려보면 '손절' 이후에도 계속 매수 되도록 되어있네요
어떤부분이 안되는지 확인이 안되네요...
4. 3%, 4% 매수 청산하는 부분에서 최근진입명이 아래와같은 진입명인 경우를 빼고(제외하고) 나머지를 생각하면서 만든식인데
적용이 안되는것 같습니다.
if MarketPosition == 1 AND (LatestEntryName(0) != "S1" or LatestEntryName(0) != "S1(NEXT)" or LatestEntryName(0) != "BS1(상풀)") Then
추매했을경우 (0.3%, 1%) 해당 진입명은 아래와 같습니다.
if MarketPosition == 1 AND (LatestEntryName(0) == "S1" or LatestEntryName(0) == "S1(NEXT)" or LatestEntryName(0) == "BS1(상풀)") Then
결론적으로 추매했을경우에는 0.3, 1% 매수청산이고 추매하지 않았을경우에는 3,4% 매수청산인데
적용이 안되는것 같습니다. 도와주세요..ㅜ.ㅜ
5. 기초적인거 많이 물어봐서 죄송합니다. 그리고 항상 감사합니다.
------------------------------------------------------------------------------
input :금액1(500000),상한가(36500),손절금액(300000),N(3);
input : 익절(3),익절2(1);
var : cnt(0),sum(0),mav(0),DD(0);
var : day(0),entry(False),AP(0),TT(0);
var : LL(0),RR(0),rate(0);
sum = 0;
For cnt = 0 to N-1
{
sum = sum + DayClose(cnt);
}
mav = (sum/N)*1;
if Bdate != Bdate[1] Then
Condition1 = False;
entry = True;
if sTime > 120000 and C[0] >= DayClose(1)*1.265 Then
Condition1 = true;
if LatestExitName(0) == "손절" or (LatestEntryName(0) == "S1" or LatestEntryName(0) == "S1(NEXT)" or LatestEntryName(0) == "BS1(상풀)") Then
entry = False;
#여기서 부터 매수하기.
if NextBarSdate == sDate and entry == true and (MarketPosition == 0 or (MarketPosition == 1 and sDate == EntryDate)) Then
{
if condition1 == true OR LatestExitName(1) == "4%익절" Then
Buy("상한가매수",AtStop,상한가,Floor(금액1/min(NextBarOpen,상한가)));
if condition1 == true and IsEntryName("상한가매수") == true Then
Buy("BS1(상풀)",AtLimit,상한가*0.955,Floor(금액1/min(NextBarOpen,상한가*0.955)));
if condition1 == true Then
Buy("BS1",AtLimit,Dayclose(1)*1.235,Floor(금액1/min(NextBarOpen,Dayclose(1)*1.235)));
if condition1 == true and IsEntryName("BS1") == true and sdate >= EntryDate+1 and day <=1 Then
Buy("S1",AtLimit,Dayclose(1)*1.19,Floor(금액1/min(NextBarOpen,Dayclose(1)*1.19)));
if condition1 == true and IsEntryName("BS1") == true and sTime == 150800 Then
Buy("3시10분매수(1-1)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(1-1)") == true and sTime == 151300 Then
Buy("3시15분매수(1-2)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(1-1)") == true and sTime == 151700 Then
Buy("3시19분매수(1-3)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and MarketPosition == 0 and sTime == 150800 Then
Buy("3시10분매수(2-1)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(2-1)") == true and sTime == 151300 Then
Buy("3시15분매수(2-2)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(2-1)") == true and sTime == 151700 Then
Buy("3시19분매수(2-3)",AtMarket,floor(금액1/nextbaropen));
if MarketPosition == 1 and day >=2 and DayOpen*1.04>=DayHigh Then
Buy("S1(NEXT)",AtLimit,DayHigh*0.92,Floor(금액1/min(NextBarOpen,DayHigh*0.92)));
}
if MarketPosition == 1 and sdate >= EntryDate+1 and L > mav Then
Buy("담날추매",AtLimit,mav,Floor(금액1/min(NextBarOpen,mav)));
#여기서 부터 매도하기.
if MarketPosition == 1 AND (LatestEntryName(0) != "S1" or LatestEntryName(0) != "S1(NEXT)" or LatestEntryName(0) != "BS1(상풀)") Then
{
if LL == 0 then
LL = L;
Else
{
if L < LL then
LL = L;
}
RR = (LL-AVGEntryPrice)/AVGEntryPrice*100;
if RR >= -0.9 Then
Rate = 익절;
if RR >= -2.9 and RR < -0.9 Then
Rate = (익절+RR);
if RR < -2.9 Then
Rate = 0.3;
ExitLong("3%익절",AtLimit,AVGEntryPrice*(1+Rate/100),"",Floor(MaxContracts*0.5));
ExitLong("4%익절",AtLimit,AVGEntryPrice*(1.01+Rate/100));
}
Else
LL = 0;
#----------------------------------------------------------------------------
# 3%, 4% 매도 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 AND (LatestEntryName(0) == "S1" or LatestEntryName(0) == "S1(NEXT)" or LatestEntryName(0) == "BS1(상풀)") Then
{
ExitLong("0.3%익절",AtLimit,AVGEntryPrice*1.003,"",Floor(MaxContracts*0.5));
ExitLong("1%익절",AtLimit,AVGEntryPrice*1.1);
}
Else
LL = 0;
#----------------------------------------------------------------------------
# 0.3%, 1% 매도 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 Then
if sdate >= EntryDate+1 and sTime == 100000 Then
{
ExitLong("다음날 10시청산");
}
#----------------------------------------------------------------------------
# 다음날 10시 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 Then
ExitLong("손절",AtStop,AvgEntryPrice-손절금액/CurrentContracts);
#----------------------------------------------------------------------------
# 손절
------------------------------------------------------------------------------
항상 친절한 답변 감사합니다.
아래의 식에서
if MarketPosition == 1 AND (LatestEntryName(0) != "S1" or LatestEntryName(0) != "S1(NEXT)" or LatestEntryName(0) != "BS1(상풀)") Then
!= ==> 해당 연산자는 같지 않다. 로 알고 있는데
그렇게 되면 해당 식의 해석은
매수 포지션을 가지고 있으면서, 최근 진입명이 S1 이 아니고 , 또는 S1(NEXT) 도 아니고,
또는 BS(상풀)아닌 것에 대해서만..THEN이후를 적용해라.
이게 맞나요?
시스템식을 돌려보니. S1 으로 매수진입을 했는데 위의 식으로 청산하면 안되는데, 매수청산이 진행되는것 같아 다시 여쭤봅니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 시스템식 문의 드립니다.
> 안녕하세요
예스스탁입니다.
1
봉완성이 다음봉시가가 수신될때입니다.
다음봉 시가의 날짜를 리턴해주는 함수가 nextbarsdate입니다.
NextBarSdate == sDate은
현재 완성된봉의날짜(sdate)와 다음봉시가(NextBarSdate)의 날짜가 같다라는 내용으로
현재 완성된 봉이 당일 마지막봉이 아니라는 내용입니다.
진입에 사용되는 atstop,atlimit은 봉완성시 가격을 셋팅하고
셋팅된 값과 다음봉시세를 비교해해서 신호가 발생하는데
당일 마지막봉에 셋팅이 되면 다음날 첫봉의 시세와 비교하므로
이부분을 막기위해 NextBarSdate == sDate조건이 사용된것입니다.
sdate는 0시 기준으로 제공되는 달력상 날짜이고
bdate는 business date로 거래소 영업일변경기준 날짜입니다.
국내거래소도 영업일 변경기준은 9시입니다.
다만 국내거래소 종목은 야간장이 없어 sdate,bdate를 구분없이 상용하지만
야간장이 해외선물의 경우에는 2개의 날짜변경시점이 다릅니다.
2
수식상 이상한 부분은 없습니다.
일봉이평(mav)보다 저가가 위에 있는 상태에서
하락해서 mav이하의 시세가 발생하면 진입이 발생합니다.
적용해 보아도 신호가 발생하고 있습니다.
설정창에서 피라미딩이 설정되어 있는지 확인하시기 바랍니다.
시스템은 기본적으로 추가진입이 안되데 되어 있어
수식에서 추가진입식이 있어도 설정창에서 피라미딩을 설정하지 않으면
추가진입이 발생하지 않습니다.
3
작성하신 손절식은 조건이 만족하면 전량청산입니다.그리고 무포지션이 됩니다.
포지션함수에서 (0)은 진행중인 포지션을 의미합니다.
청산완료된 포지션의 값은 (1)로 리턴받습니다.
LatestExitName(0)은 포지션 진행중 일부손절할때 값일 리턴합니다.
손절되고 무포지션이면 LatestExitName(1)로 값을 리턴받아야 합니다.
4
3개의 진입명이 모우 아니어야 하므로
조건을 and로 연결하셔야 합니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 시스템식 문의 드립니다.
> 주식현물 시스템식 작성중에 궁금한게 있어 글을 남깁니다.
1. if Bdate != Bdate[1] Then
Condition1 = False;
위 식에서는 날짜가 하루 지나가게 되면 condition1 = false 로 바뀌게 되는걸로
알고 있는데
if NextBarSdate == sDate and (MarketPosition == 0 or
(MarketPosition == 1 and sDate == EntryDate)) Then
매수전에 사용되었던 조건식인데 해석이 잘 안됩니다. ㅜ.ㅜ 해석좀 부탁드립니다.
메뉴얼에는 nextbarsdate가 다음봉시작날짜라고 써 있는데
진입날짜 (ex)3/6일) 가 sdate에 저장되고 1분봉차트에서 다음봉이 나올때마다
sdate(3/6)일 날짜와 비교해서 맞으면 조건이 성립되는게 맞는건가요??
그럼 sdate와 bdate의 차이점이 몬지도 궁금합니다..
메뉴얼보니 sdate는 봉의 시작날짜이고 bdate는 영업일이라고 나오는데?
2. 3시에 매수해서 그 다음날 일봉상 3일선을 터치하면 추매하는 전략을 사용하려고
아래와 같은 시스템식을 작성하였는데 다음날 매수가 안됩니다.ㅜ.ㅜ
확인좀 부탁드리겠습니다.
왜 안되는걸까요??
매수포지션을 들고 있으면서 진입날짜로 부터 하루가 지나고, 3일선 아래로 돌파했을
때 매수해라 .. 제대로 작성한것 같은데..ㅜ.ㅜ
3. '손절' 같은 latestexitname 으로 가장 마지막 청산명으로 다시 매수가 안되게 진행하려고 하는데
시뮬레이션을 돌려보면 '손절' 이후에도 계속 매수 되도록 되어있네요
어떤부분이 안되는지 확인이 안되네요...
4. 3%, 4% 매수 청산하는 부분에서 최근진입명이 아래와같은 진입명인 경우를 빼고(제외하고) 나머지를 생각하면서 만든식인데
적용이 안되는것 같습니다.
if MarketPosition == 1 AND (LatestEntryName(0) != "S1" or LatestEntryName(0) != "S1(NEXT)" or LatestEntryName(0) != "BS1(상풀)") Then
추매했을경우 (0.3%, 1%) 해당 진입명은 아래와 같습니다.
if MarketPosition == 1 AND (LatestEntryName(0) == "S1" or LatestEntryName(0) == "S1(NEXT)" or LatestEntryName(0) == "BS1(상풀)") Then
결론적으로 추매했을경우에는 0.3, 1% 매수청산이고 추매하지 않았을경우에는 3,4% 매수청산인데
적용이 안되는것 같습니다. 도와주세요..ㅜ.ㅜ
5. 기초적인거 많이 물어봐서 죄송합니다. 그리고 항상 감사합니다.
------------------------------------------------------------------------------
input :금액1(500000),상한가(36500),손절금액(300000),N(3);
input : 익절(3),익절2(1);
var : cnt(0),sum(0),mav(0),DD(0);
var : day(0),entry(False),AP(0),TT(0);
var : LL(0),RR(0),rate(0);
sum = 0;
For cnt = 0 to N-1
{
sum = sum + DayClose(cnt);
}
mav = (sum/N)*1;
if Bdate != Bdate[1] Then
Condition1 = False;
entry = True;
if sTime > 120000 and C[0] >= DayClose(1)*1.265 Then
Condition1 = true;
if LatestExitName(0) == "손절" or (LatestEntryName(0) == "S1" or LatestEntryName(0) == "S1(NEXT)" or LatestEntryName(0) == "BS1(상풀)") Then
entry = False;
#여기서 부터 매수하기.
if NextBarSdate == sDate and entry == true and (MarketPosition == 0 or (MarketPosition == 1 and sDate == EntryDate)) Then
{
if condition1 == true OR LatestExitName(1) == "4%익절" Then
Buy("상한가매수",AtStop,상한가,Floor(금액1/min(NextBarOpen,상한가)));
if condition1 == true and IsEntryName("상한가매수") == true Then
Buy("BS1(상풀)",AtLimit,상한가*0.955,Floor(금액1/min(NextBarOpen,상한가*0.955)));
if condition1 == true Then
Buy("BS1",AtLimit,Dayclose(1)*1.235,Floor(금액1/min(NextBarOpen,Dayclose(1)*1.235)));
if condition1 == true and IsEntryName("BS1") == true and sdate >= EntryDate+1 and day <=1 Then
Buy("S1",AtLimit,Dayclose(1)*1.19,Floor(금액1/min(NextBarOpen,Dayclose(1)*1.19)));
if condition1 == true and IsEntryName("BS1") == true and sTime == 150800 Then
Buy("3시10분매수(1-1)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(1-1)") == true and sTime == 151300 Then
Buy("3시15분매수(1-2)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(1-1)") == true and sTime == 151700 Then
Buy("3시19분매수(1-3)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and MarketPosition == 0 and sTime == 150800 Then
Buy("3시10분매수(2-1)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(2-1)") == true and sTime == 151300 Then
Buy("3시15분매수(2-2)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(2-1)") == true and sTime == 151700 Then
Buy("3시19분매수(2-3)",AtMarket,floor(금액1/nextbaropen));
if MarketPosition == 1 and day >=2 and DayOpen*1.04>=DayHigh Then
Buy("S1(NEXT)",AtLimit,DayHigh*0.92,Floor(금액1/min(NextBarOpen,DayHigh*0.92)));
}
if MarketPosition == 1 and sdate >= EntryDate+1 and L > mav Then
Buy("담날추매",AtLimit,mav,Floor(금액1/min(NextBarOpen,mav)));
#여기서 부터 매도하기.
if MarketPosition == 1 AND (LatestEntryName(0) != "S1" or LatestEntryName(0) != "S1(NEXT)" or LatestEntryName(0) != "BS1(상풀)") Then
{
if LL == 0 then
LL = L;
Else
{
if L < LL then
LL = L;
}
RR = (LL-AVGEntryPrice)/AVGEntryPrice*100;
if RR >= -0.9 Then
Rate = 익절;
if RR >= -2.9 and RR < -0.9 Then
Rate = (익절+RR);
if RR < -2.9 Then
Rate = 0.3;
ExitLong("3%익절",AtLimit,AVGEntryPrice*(1+Rate/100),"",Floor(MaxContracts*0.5));
ExitLong("4%익절",AtLimit,AVGEntryPrice*(1.01+Rate/100));
}
Else
LL = 0;
#----------------------------------------------------------------------------
# 3%, 4% 매도 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 AND (LatestEntryName(0) == "S1" or LatestEntryName(0) == "S1(NEXT)" or LatestEntryName(0) == "BS1(상풀)") Then
{
ExitLong("0.3%익절",AtLimit,AVGEntryPrice*1.003,"",Floor(MaxContracts*0.5));
ExitLong("1%익절",AtLimit,AVGEntryPrice*1.1);
}
Else
LL = 0;
#----------------------------------------------------------------------------
# 0.3%, 1% 매도 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 Then
if sdate >= EntryDate+1 and sTime == 100000 Then
{
ExitLong("다음날 10시청산");
}
#----------------------------------------------------------------------------
# 다음날 10시 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 Then
ExitLong("손절",AtStop,AvgEntryPrice-손절금액/CurrentContracts);
#----------------------------------------------------------------------------
# 손절
------------------------------------------------------------------------------
예스스탁
예스스탁 답변
2022-03-10 11:12:38
안녕하세요
예스스탁입니다.
if MarketPosition == 1 AND (LatestEntryName(0) != "S1" and LatestEntryName(0) != "S1(NEXT)" and LatestEntryName(0) != "BS1(상풀)") Then
조건을 and로 연결해야 됩니다.
그래야 3개의 진입명이 아닐때만 조건이 성립됩니다.
or로 지정하면 LatestEntryName(0) != "S1" 조건이 만족하지 않더라도
LatestEntryName(0) != "S1(NEXT)"나
LatestEntryName(0) != "BS1(상풀)")조건이 만족하기 때문에
전체 if가 true가 됩니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : Re : Re : 시스템식 문의 드립니다.
> 항상 친절한 답변 감사합니다.
아래의 식에서
if MarketPosition == 1 AND (LatestEntryName(0) != "S1" or LatestEntryName(0) != "S1(NEXT)" or LatestEntryName(0) != "BS1(상풀)") Then
!= ==> 해당 연산자는 같지 않다. 로 알고 있는데
그렇게 되면 해당 식의 해석은
매수 포지션을 가지고 있으면서, 최근 진입명이 S1 이 아니고 , 또는 S1(NEXT) 도 아니고,
또는 BS(상풀)아닌 것에 대해서만..THEN이후를 적용해라.
이게 맞나요?
시스템식을 돌려보니. S1 으로 매수진입을 했는데 위의 식으로 청산하면 안되는데, 매수청산이 진행되는것 같아 다시 여쭤봅니다.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 시스템식 문의 드립니다.
> 안녕하세요
예스스탁입니다.
1
봉완성이 다음봉시가가 수신될때입니다.
다음봉 시가의 날짜를 리턴해주는 함수가 nextbarsdate입니다.
NextBarSdate == sDate은
현재 완성된봉의날짜(sdate)와 다음봉시가(NextBarSdate)의 날짜가 같다라는 내용으로
현재 완성된 봉이 당일 마지막봉이 아니라는 내용입니다.
진입에 사용되는 atstop,atlimit은 봉완성시 가격을 셋팅하고
셋팅된 값과 다음봉시세를 비교해해서 신호가 발생하는데
당일 마지막봉에 셋팅이 되면 다음날 첫봉의 시세와 비교하므로
이부분을 막기위해 NextBarSdate == sDate조건이 사용된것입니다.
sdate는 0시 기준으로 제공되는 달력상 날짜이고
bdate는 business date로 거래소 영업일변경기준 날짜입니다.
국내거래소도 영업일 변경기준은 9시입니다.
다만 국내거래소 종목은 야간장이 없어 sdate,bdate를 구분없이 상용하지만
야간장이 해외선물의 경우에는 2개의 날짜변경시점이 다릅니다.
2
수식상 이상한 부분은 없습니다.
일봉이평(mav)보다 저가가 위에 있는 상태에서
하락해서 mav이하의 시세가 발생하면 진입이 발생합니다.
적용해 보아도 신호가 발생하고 있습니다.
설정창에서 피라미딩이 설정되어 있는지 확인하시기 바랍니다.
시스템은 기본적으로 추가진입이 안되데 되어 있어
수식에서 추가진입식이 있어도 설정창에서 피라미딩을 설정하지 않으면
추가진입이 발생하지 않습니다.
3
작성하신 손절식은 조건이 만족하면 전량청산입니다.그리고 무포지션이 됩니다.
포지션함수에서 (0)은 진행중인 포지션을 의미합니다.
청산완료된 포지션의 값은 (1)로 리턴받습니다.
LatestExitName(0)은 포지션 진행중 일부손절할때 값일 리턴합니다.
손절되고 무포지션이면 LatestExitName(1)로 값을 리턴받아야 합니다.
4
3개의 진입명이 모우 아니어야 하므로
조건을 and로 연결하셔야 합니다.
즐거운 하루되세요
> 맴맴잉 님이 쓴 글입니다.
> 제목 : 시스템식 문의 드립니다.
> 주식현물 시스템식 작성중에 궁금한게 있어 글을 남깁니다.
1. if Bdate != Bdate[1] Then
Condition1 = False;
위 식에서는 날짜가 하루 지나가게 되면 condition1 = false 로 바뀌게 되는걸로
알고 있는데
if NextBarSdate == sDate and (MarketPosition == 0 or
(MarketPosition == 1 and sDate == EntryDate)) Then
매수전에 사용되었던 조건식인데 해석이 잘 안됩니다. ㅜ.ㅜ 해석좀 부탁드립니다.
메뉴얼에는 nextbarsdate가 다음봉시작날짜라고 써 있는데
진입날짜 (ex)3/6일) 가 sdate에 저장되고 1분봉차트에서 다음봉이 나올때마다
sdate(3/6)일 날짜와 비교해서 맞으면 조건이 성립되는게 맞는건가요??
그럼 sdate와 bdate의 차이점이 몬지도 궁금합니다..
메뉴얼보니 sdate는 봉의 시작날짜이고 bdate는 영업일이라고 나오는데?
2. 3시에 매수해서 그 다음날 일봉상 3일선을 터치하면 추매하는 전략을 사용하려고
아래와 같은 시스템식을 작성하였는데 다음날 매수가 안됩니다.ㅜ.ㅜ
확인좀 부탁드리겠습니다.
왜 안되는걸까요??
매수포지션을 들고 있으면서 진입날짜로 부터 하루가 지나고, 3일선 아래로 돌파했을
때 매수해라 .. 제대로 작성한것 같은데..ㅜ.ㅜ
3. '손절' 같은 latestexitname 으로 가장 마지막 청산명으로 다시 매수가 안되게 진행하려고 하는데
시뮬레이션을 돌려보면 '손절' 이후에도 계속 매수 되도록 되어있네요
어떤부분이 안되는지 확인이 안되네요...
4. 3%, 4% 매수 청산하는 부분에서 최근진입명이 아래와같은 진입명인 경우를 빼고(제외하고) 나머지를 생각하면서 만든식인데
적용이 안되는것 같습니다.
if MarketPosition == 1 AND (LatestEntryName(0) != "S1" or LatestEntryName(0) != "S1(NEXT)" or LatestEntryName(0) != "BS1(상풀)") Then
추매했을경우 (0.3%, 1%) 해당 진입명은 아래와 같습니다.
if MarketPosition == 1 AND (LatestEntryName(0) == "S1" or LatestEntryName(0) == "S1(NEXT)" or LatestEntryName(0) == "BS1(상풀)") Then
결론적으로 추매했을경우에는 0.3, 1% 매수청산이고 추매하지 않았을경우에는 3,4% 매수청산인데
적용이 안되는것 같습니다. 도와주세요..ㅜ.ㅜ
5. 기초적인거 많이 물어봐서 죄송합니다. 그리고 항상 감사합니다.
------------------------------------------------------------------------------
input :금액1(500000),상한가(36500),손절금액(300000),N(3);
input : 익절(3),익절2(1);
var : cnt(0),sum(0),mav(0),DD(0);
var : day(0),entry(False),AP(0),TT(0);
var : LL(0),RR(0),rate(0);
sum = 0;
For cnt = 0 to N-1
{
sum = sum + DayClose(cnt);
}
mav = (sum/N)*1;
if Bdate != Bdate[1] Then
Condition1 = False;
entry = True;
if sTime > 120000 and C[0] >= DayClose(1)*1.265 Then
Condition1 = true;
if LatestExitName(0) == "손절" or (LatestEntryName(0) == "S1" or LatestEntryName(0) == "S1(NEXT)" or LatestEntryName(0) == "BS1(상풀)") Then
entry = False;
#여기서 부터 매수하기.
if NextBarSdate == sDate and entry == true and (MarketPosition == 0 or (MarketPosition == 1 and sDate == EntryDate)) Then
{
if condition1 == true OR LatestExitName(1) == "4%익절" Then
Buy("상한가매수",AtStop,상한가,Floor(금액1/min(NextBarOpen,상한가)));
if condition1 == true and IsEntryName("상한가매수") == true Then
Buy("BS1(상풀)",AtLimit,상한가*0.955,Floor(금액1/min(NextBarOpen,상한가*0.955)));
if condition1 == true Then
Buy("BS1",AtLimit,Dayclose(1)*1.235,Floor(금액1/min(NextBarOpen,Dayclose(1)*1.235)));
if condition1 == true and IsEntryName("BS1") == true and sdate >= EntryDate+1 and day <=1 Then
Buy("S1",AtLimit,Dayclose(1)*1.19,Floor(금액1/min(NextBarOpen,Dayclose(1)*1.19)));
if condition1 == true and IsEntryName("BS1") == true and sTime == 150800 Then
Buy("3시10분매수(1-1)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(1-1)") == true and sTime == 151300 Then
Buy("3시15분매수(1-2)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(1-1)") == true and sTime == 151700 Then
Buy("3시19분매수(1-3)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and MarketPosition == 0 and sTime == 150800 Then
Buy("3시10분매수(2-1)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(2-1)") == true and sTime == 151300 Then
Buy("3시15분매수(2-2)",AtMarket,floor(금액1/nextbaropen));
if condition1 == true and IsEntryName("3시10분매수(2-1)") == true and sTime == 151700 Then
Buy("3시19분매수(2-3)",AtMarket,floor(금액1/nextbaropen));
if MarketPosition == 1 and day >=2 and DayOpen*1.04>=DayHigh Then
Buy("S1(NEXT)",AtLimit,DayHigh*0.92,Floor(금액1/min(NextBarOpen,DayHigh*0.92)));
}
if MarketPosition == 1 and sdate >= EntryDate+1 and L > mav Then
Buy("담날추매",AtLimit,mav,Floor(금액1/min(NextBarOpen,mav)));
#여기서 부터 매도하기.
if MarketPosition == 1 AND (LatestEntryName(0) != "S1" or LatestEntryName(0) != "S1(NEXT)" or LatestEntryName(0) != "BS1(상풀)") Then
{
if LL == 0 then
LL = L;
Else
{
if L < LL then
LL = L;
}
RR = (LL-AVGEntryPrice)/AVGEntryPrice*100;
if RR >= -0.9 Then
Rate = 익절;
if RR >= -2.9 and RR < -0.9 Then
Rate = (익절+RR);
if RR < -2.9 Then
Rate = 0.3;
ExitLong("3%익절",AtLimit,AVGEntryPrice*(1+Rate/100),"",Floor(MaxContracts*0.5));
ExitLong("4%익절",AtLimit,AVGEntryPrice*(1.01+Rate/100));
}
Else
LL = 0;
#----------------------------------------------------------------------------
# 3%, 4% 매도 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 AND (LatestEntryName(0) == "S1" or LatestEntryName(0) == "S1(NEXT)" or LatestEntryName(0) == "BS1(상풀)") Then
{
ExitLong("0.3%익절",AtLimit,AVGEntryPrice*1.003,"",Floor(MaxContracts*0.5));
ExitLong("1%익절",AtLimit,AVGEntryPrice*1.1);
}
Else
LL = 0;
#----------------------------------------------------------------------------
# 0.3%, 1% 매도 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 Then
if sdate >= EntryDate+1 and sTime == 100000 Then
{
ExitLong("다음날 10시청산");
}
#----------------------------------------------------------------------------
# 다음날 10시 청산
#----------------------------------------------------------------------------
if MarketPosition == 1 Then
ExitLong("손절",AtStop,AvgEntryPrice-손절금액/CurrentContracts);
#----------------------------------------------------------------------------
# 손절
------------------------------------------------------------------------------