커뮤니티
시스템식에 주석 부탁드립니다.
2015-10-19 18:21:28
113
글번호 91439
다음과 같이 제가 원하는 시스템식을 만들어 주셔서 감사드립니다.
나중에 참고하기 위해 번거로우시더라도 각 항목에 주석을 부탁드립니다.
특히 다음 시스템식에서 "1차매수" 와 "1차매수."의 차이가 무엇인가요?
if NextBarOpen > var1-value*(매수위치1차+1) Then
buy("1차매수",atlimit,var1-value*(매수위치1차+1),Floor((전략총매수금액*10000*(매수비중1차/100))/C));
Else
buy("1차매수.",AtMarket,def,Floor((전략총매수금액*10000*(매수비중1차/100))/C));
}
--------------------------------------------------------------------------------
input : 전략식시작일자(20151007), 전략식시작시간(090000), 전략총매수금액(4000);
input : 매수위치1차(2), 매수위치2차(3);
input : 매도위치1차(1), 매도위치2차(2);
input : 매수비중1차(50), 매수비중2차(50);
input : 매도비중1차(50), 매도비중2차(50);
input : 전략식진입횟수(1);
input : 최종손절위치(4);
input : Period(120);
var : CL(0),V0.5(0),V1(0),V2(0),V3(0);
var : mid(0),V4(0),V5(0),V6(0),V7(0);
var : diff(0),TF(0),cnt(0),value(0);
var : entrycond1(false),entrycond2(false),entrycond3(false);
if dayhigh(Period) > 0 Then{
var1 = dayhigh(0);
var2 = daylow(0);
var11 = dayhigh(1);
var12 = daylow(1);
for cnt = 0 to Period-1{
if DayHigh(cnt) > var1 Then
var1 = DayHigh(cnt);
if dayhigh(cnt+1) > var11 Then
var11 = dayhigh(cnt+1);
if daylow(cnt) < var2 Then
var2 = daylow(cnt);
if daylow(cnt+1) < var21 Then
var21 = daylow(cnt+1);
}
if var11 < var1 Then
CL = (var1+var2)/2;
V0.5 = var1-((var1-CL)/5)*1;
V1 = var1-((var1-CL)/5)*2; ## 1매수타점
V2 = var1-((var1-CL)/5)*3; ## 2매수타점
V3 = var1-((var1-CL)/5)*4; ## 3매수타점
mid = (var1+var2)/2;
V4 = var1-((var1-CL)/5)*5;
V5 = var1-((var1-CL)/5)*6;
V6 = var1-((var1-CL)/5)*7;
V7 = var1-((var1-CL)/5)*8;
value = abs(var1-V0.5);
if sdate >= 전략식시작일자 and
TotalTrades < 전략식진입횟수 and
MarketPosition == 0 and stime >= 전략식시작시간 and
EntryCond1 == false Then{
if NextBarOpen > var1-value*(매수위치1차+1) Then
buy("1차매수",atlimit,var1-value*(매수위치1차+1),Floor((전략총매수금액*10000*(매수비중1차/100))/C));
Else
buy("1차매수.",AtMarket,def,Floor((전략총매수금액*10000*(매수비중1차/100))/C));
}
if MarketPosition == 1 then{
diff = abs(var1[BarsSinceEntry]-V0.5[BarsSinceEntry]);
if MaxEntries == 1 and L >= var1-value*(매수위치2차+1) and EntryCond2 == false Then
buy("2차매수",atlimit,var1-value*(매수위치2차+1),Floor((전략총매수금액*10000*(매수비중2차/100))/C));
if LatestExitName(0) == "1차매도" Then
Condition1 = true;
if LatestExitName(0) == "2차매도" Then
Condition2 = true;
if Condition1 == false then
exitlong("1차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치1차,"",Floor(MaxContracts*(매도비중1차/100)),1);
if Condition2 == false then
exitlong("2차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치2차);
exitlong("최종손절",AtStop,var1-value*(최종손절위치+1));
}
Else{
Condition1 = false;
Condition2 = false;
}
}
if MarketPosition == 1 and (LatestEntryName(0) == "1차매수" or LatestEntryName(0) == "1차매수.") Then
entrycond1 = true;
if MarketPosition == 1 and LatestEntryName(0) == "2차매수" Then
entrycond2 = true;
if MarketPosition == 0 Then{
entrycond1 = false;
entrycond2 = false;
}
답변 1
예스스탁 예스스탁 답변
2015-10-20 08:59:20
안녕하세요
예스스탁입니다.
input : 전략식시작일자(20151007), 전략식시작시간(090000), 전략총매수금액(4000);
input : 매수위치1차(2), 매수위치2차(3);
input : 매도위치1차(1), 매도위치2차(2);
input : 매수비중1차(50), 매수비중2차(50);
input : 매도비중1차(50), 매도비중2차(50);
input : 전략식진입횟수(1);
input : 최종손절위치(4);
input : Period(120);
var : CL(0),V0.5(0),V1(0),V2(0),V3(0);
var : mid(0),V4(0),V5(0),V6(0),V7(0);
var : diff(0),TF(0),cnt(0),value(0);
var : entrycond1(false),entrycond2(false),entrycond3(false);
#Period기간전 최고가의 값이 있으면
if dayhigh(Period) > 0 Then{
var1 = dayhigh(0);#당일최고가(Period기간동안 최고가를 계산하기 위한 초기값)
var2 = daylow(0);#당일최저가(Period기간동안 최고가를 계산하기 위한 초기값)
var11 = dayhigh(1);#전일최고가(전일기준 Period기간동안 최고가를 계산하기 위한 초기값)
var12 = daylow(1);#전일최저가(전일기준 Period기간동안 최고가를 계산하기 위한 초기값)
#0일부터 Period전일까지 최고가와 최저가를 불러와
#Period기간동안 최고가/최저가를 계산
#전일기준은 0을 제외하고 Period기간이므로 +1
for cnt = 0 to Period-1{
if DayHigh(cnt) > var1 Then
var1 = DayHigh(cnt);
if dayhigh(cnt+1) > var11 Then
var11 = dayhigh(cnt+1);
if daylow(cnt) < var2 Then
var2 = daylow(cnt);
if daylow(cnt+1) < var21 Then
var21 = daylow(cnt+1);
}
#Period기간동알 최고가가 전일보다 상승하면
#CL에 당일 중간값 저장
if var11 < var1 Then
CL = (var1+var2)/2;
V0.5 = var1-((var1-CL)/5)*1;
V1 = var1-((var1-CL)/5)*2; ## 1매수타점
V2 = var1-((var1-CL)/5)*3; ## 2매수타점
V3 = var1-((var1-CL)/5)*4; ## 3매수타점
mid = (var1+var2)/2;
V4 = var1-((var1-CL)/5)*5;
V5 = var1-((var1-CL)/5)*6;
V6 = var1-((var1-CL)/5)*7;
V7 = var1-((var1-CL)/5)*8;
value = abs(var1-V0.5);
if sdate >= 전략식시작일자 and #지정일 이후
TotalTrades < 전략식진입횟수 and #최대 진입횟수 이전
MarketPosition == 0 and #현재 무포지션
stime >= 전략식시작시간 and #지정시간 이후
EntryCond1 == false Then{ #EntryCond1은 false일때(첫진입이 발생하면 true로 변경되어 한번만 진입하게 됨)
#(1차매수),(1차매수.)은 가격이 하락해서 1차매수가격을 터치한 것인지
#시가가 갭으로 1차매수가격 이하에서 바로 시작해서 신호가 발생한것인지
#구분하기 위해서 1차매수를 2개의 함수로 작성한 것입니다.
#시가가 지정한 가격보다 위에서 시작하면 하락해서 지정한 가격 터치시 매수(1차매수)
#시가가 지정한 가격보다 이하에서 바로 시작하면 시가에 바로 매수(1차매수.)
if NextBarOpen > var1-value*(매수위치1차+1) Then
buy("1차매수",atlimit,var1-value*(매수위치1차+1),Floor((전략총매수금액*10000*(매수비중1차/100))/C));
Else
buy("1차매수.",AtMarket,def,Floor((전략총매수금액*10000*(매수비중1차/100))/C));
}
#매수진입이후
if MarketPosition == 1 then{
#매수시점의 var1와 V0.5의 차이값을 diff에 저장
diff = abs(var1[BarsSinceEntry]-V0.5[BarsSinceEntry]);
if MaxEntries == 1 and #최대진입횟수가1이고(첫진입 한번만 발생한 상황)
L >= var1-value*(매수위치2차+1) and #저가가 2차매수가격 이상이고
EntryCond2 == false Then #EntryCond2은 false일때(2차매수가 발생하면 true로 변경되어 한번만 진입하게 됨)
#다음봉에서 2차매수가격을 터치하면 신호발생(즉 가격이 하락해서 첫 터치가 발생하면 매수)
buy("2차매수",atlimit,var1-value*(매수위치2차+1),Floor((전략총매수금액*10000*(매수비중2차/100))/C));
#Condition1과 Condition2는 각 매도의 횟수를 1번으로 제한하게 위한 변수
#포지션 진행 중 1차매도란 이름의 청산이 발생하면 Condition1은 true
if LatestExitName(0) == "1차매도" Then
Condition1 = true;
#포지션 진행 중 2차매도란 이름의 청산이 발생하면 Condition2는 true
if LatestExitName(0) == "2차매도" Then
Condition2 = true;
#Condition1이 false일때(첫진입후 아직 1차매도는 발생하지 않은 상태)
#당일 최저가에서 diff*매도위치1차만큼 상승하면 매도1차비중만큰 청상
if Condition1 == false then
exitlong("1차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치1차,"",Floor(MaxContracts*(매도비중1차/100)),1);
#Condition2는 false일때(첫진입후 아직 2차매도는 발생하지 않은 상태)
#당일 최저가에서 diff*매도위치2차만큼 상승하면 매도2차비중만큰 청상
if Condition2 == false then
exitlong("2차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치2차);
#당일최고가에서 value*(최종손절위치+1)만큰 하락하면 전량청산
exitlong("최종손절",AtStop,var1-value*(최종손절위치+1));
}
Else{#매수포지션이 아니면 모두 false로 초기화
Condition1 = false;
Condition2 = false;
}
}
#매수진입 후 1차매수나 1차매수.진입신호가 발생하면 true
if MarketPosition == 1 and (LatestEntryName(0) == "1차매수" or LatestEntryName(0) == "1차매수.") Then
entrycond1 = true;
#매수진입 후 2차매수가 발생하면 true
if MarketPosition == 1 and LatestEntryName(0) == "2차매수" Then
entrycond2 = true;
#무포지션이면 flase로 초기화
if MarketPosition == 0 Then{
entrycond1 = false;
entrycond2 = false;
}
즐거운 하루되세요
> 종풍화성 님이 쓴 글입니다.
> 제목 : 시스템식에 주석 부탁드립니다.
> 다음과 같이 제가 원하는 시스템식을 만들어 주셔서 감사드립니다.
나중에 참고하기 위해 번거로우시더라도 각 항목에 주석을 부탁드립니다.
특히 다음 시스템식에서 "1차매수" 와 "1차매수."의 차이가 무엇인가요?
if NextBarOpen > var1-value*(매수위치1차+1) Then
buy("1차매수",atlimit,var1-value*(매수위치1차+1),Floor((전략총매수금액*10000*(매수비중1차/100))/C));
Else
buy("1차매수.",AtMarket,def,Floor((전략총매수금액*10000*(매수비중1차/100))/C));
}
--------------------------------------------------------------------------------
input : 전략식시작일자(20151007), 전략식시작시간(090000), 전략총매수금액(4000);
input : 매수위치1차(2), 매수위치2차(3);
input : 매도위치1차(1), 매도위치2차(2);
input : 매수비중1차(50), 매수비중2차(50);
input : 매도비중1차(50), 매도비중2차(50);
input : 전략식진입횟수(1);
input : 최종손절위치(4);
input : Period(120);
var : CL(0),V0.5(0),V1(0),V2(0),V3(0);
var : mid(0),V4(0),V5(0),V6(0),V7(0);
var : diff(0),TF(0),cnt(0),value(0);
var : entrycond1(false),entrycond2(false),entrycond3(false);
if dayhigh(Period) > 0 Then{
var1 = dayhigh(0);
var2 = daylow(0);
var11 = dayhigh(1);
var12 = daylow(1);
for cnt = 0 to Period-1{
if DayHigh(cnt) > var1 Then
var1 = DayHigh(cnt);
if dayhigh(cnt+1) > var11 Then
var11 = dayhigh(cnt+1);
if daylow(cnt) < var2 Then
var2 = daylow(cnt);
if daylow(cnt+1) < var21 Then
var21 = daylow(cnt+1);
}
if var11 < var1 Then
CL = (var1+var2)/2;
V0.5 = var1-((var1-CL)/5)*1;
V1 = var1-((var1-CL)/5)*2; ## 1매수타점
V2 = var1-((var1-CL)/5)*3; ## 2매수타점
V3 = var1-((var1-CL)/5)*4; ## 3매수타점
mid = (var1+var2)/2;
V4 = var1-((var1-CL)/5)*5;
V5 = var1-((var1-CL)/5)*6;
V6 = var1-((var1-CL)/5)*7;
V7 = var1-((var1-CL)/5)*8;
value = abs(var1-V0.5);
if sdate >= 전략식시작일자 and
TotalTrades < 전략식진입횟수 and
MarketPosition == 0 and stime >= 전략식시작시간 and
EntryCond1 == false Then{
if NextBarOpen > var1-value*(매수위치1차+1) Then
buy("1차매수",atlimit,var1-value*(매수위치1차+1),Floor((전략총매수금액*10000*(매수비중1차/100))/C));
Else
buy("1차매수.",AtMarket,def,Floor((전략총매수금액*10000*(매수비중1차/100))/C));
}
if MarketPosition == 1 then{
diff = abs(var1[BarsSinceEntry]-V0.5[BarsSinceEntry]);
if MaxEntries == 1 and L >= var1-value*(매수위치2차+1) and EntryCond2 == false Then
buy("2차매수",atlimit,var1-value*(매수위치2차+1),Floor((전략총매수금액*10000*(매수비중2차/100))/C));
if LatestExitName(0) == "1차매도" Then
Condition1 = true;
if LatestExitName(0) == "2차매도" Then
Condition2 = true;
if Condition1 == false then
exitlong("1차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치1차,"",Floor(MaxContracts*(매도비중1차/100)),1);
if Condition2 == false then
exitlong("2차매도",atlimit,lowest(L,BarsSinceEntry)+diff*매도위치2차);
exitlong("최종손절",AtStop,var1-value*(최종손절위치+1));
}
Else{
Condition1 = false;
Condition2 = false;
}
}
if MarketPosition == 1 and (LatestEntryName(0) == "1차매수" or LatestEntryName(0) == "1차매수.") Then
entrycond1 = true;
if MarketPosition == 1 and LatestEntryName(0) == "2차매수" Then
entrycond2 = true;
if MarketPosition == 0 Then{
entrycond1 = false;
entrycond2 = false;
}