커뮤니티

전략 오류

프로필 이미지
히익
2022-09-27 21:57:06
716
글번호 162558
답변완료

첨부 이미지

안녕하세요 개발자님. 아래 수식은 간단한 변동성 돌파 전략입니다. 문제가 아래와 같은 atstop수식으로 하면 가끔 다음날 시초가에 매수되는 경우가 있습니다. 기본 변동성 돌파 전략 그대로 항상 시가+dayrange 에 매수되고, 시가-dayrange에 매도되게 만들 수 있을까요..? (atstop 주문으로 부탁드립니다!) 항상 도움주셔서 감사합니다. Var : dayrange(0),cnt(0); ///////////////////////////////////////// dayrange=(DayHigh(1) - DayLow(1)) * 0.5; /////////////////////////////////////////////////////////////////// Var1=0; For cnt = 0 to 10 { If EntryDate(cnt)==sDate Then Var1=Var1 + 1; } ///////////////////////////////////////////////////////////////////////// If MarketPosition==0 and Var1<1 Then Buy("매수",AtStop,DayOpen+dayrange); If MarketPosition == 1 and NextBarSdate!=sDate Then ExitLong("매수청산",AtMarket); If MarketPosition==0 and Var1<1 Then Sell("매도",AtStop,DayOpen-dayrange); If MarketPosition == -1 and sTime==152000 Then ExitShort("매도청산");
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-09-28 09:51:49

안녕하세요 예스스탁입니다. 신호타입 중 atstop이나 atlimit은 봉완성시 값이 셋팅이 되고 다음봉 시세와 셋팅된 값을 비교해 신호가 발생합니다. 당일 마지막봉에 셋팅이 되면 다음날 첫봉의 시세와 비교하게 됩니다. 진입식에 NextBarSdate == sDate 조건을 추가하시면 당일 마지막봉에서는 셋팅이 되지 않습니다. Var : dayrange(0),cnt(0); ///////////////////////////////////////// dayrange=(DayHigh(1) - DayLow(1)) * 0.5; /////////////////////////////////////////////////////////////////// Var1=0; For cnt = 0 to 10 { If EntryDate(cnt)==sDate Then Var1=Var1 + 1; } ///////////////////////////////////////////////////////////////////////// If MarketPosition==0 and Var1<1 and NextBarSdate == sDate Then Buy("매수",AtStop,DayOpen+dayrange); If MarketPosition == 1 and NextBarSdate!=sDate Then ExitLong("매수청산",AtMarket); If MarketPosition==0 and Var1<1 and NextBarSdate == sDate Then Sell("매도",AtStop,DayOpen-dayrange); If MarketPosition == -1 and sTime==152000 Then ExitShort("매도청산"); 즐거운 하루되세요 > 히익 님이 쓴 글입니다. > 제목 : 전략 오류 > 안녕하세요 개발자님. 아래 수식은 간단한 변동성 돌파 전략입니다. 문제가 아래와 같은 atstop수식으로 하면 가끔 다음날 시초가에 매수되는 경우가 있습니다. 기본 변동성 돌파 전략 그대로 항상 시가+dayrange 에 매수되고, 시가-dayrange에 매도되게 만들 수 있을까요..? (atstop 주문으로 부탁드립니다!) 항상 도움주셔서 감사합니다. Var : dayrange(0),cnt(0); ///////////////////////////////////////// dayrange=(DayHigh(1) - DayLow(1)) * 0.5; /////////////////////////////////////////////////////////////////// Var1=0; For cnt = 0 to 10 { If EntryDate(cnt)==sDate Then Var1=Var1 + 1; } ///////////////////////////////////////////////////////////////////////// If MarketPosition==0 and Var1<1 Then Buy("매수",AtStop,DayOpen+dayrange); If MarketPosition == 1 and NextBarSdate!=sDate Then ExitLong("매수청산",AtMarket); If MarketPosition==0 and Var1<1 Then Sell("매도",AtStop,DayOpen-dayrange); If MarketPosition == -1 and sTime==152000 Then ExitShort("매도청산");