커뮤니티

시스템식에 주석 부탁드립니다.

프로필 이미지
종풍화성
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; }