커뮤니티

수식 오류 문의드립니다

프로필 이미지
jshwang2
2022-02-16 01:07:17
1163
글번호 156334
답변완료

첨부 이미지

안녕하세요 수식을 테스트하던중 문제상황이 발생해 문의드립니다 사용한 수식은 아래와 같고 문제가 되었던 상황은 캡처로 첨부하였습니다 input : TT(224300), TD(20220215), MDD(200000) ; var : HB(14574), LB(14481), Hx(20000), Lx(1); var : e60(0), Hcount(0), Lcount(0),B(0),S(0),cnt(0),T1(0), Hstate(true), Lstate(true), N(0), unitP(0), exitC(0), rHB(0), rLB(0); N = Highest(ATr(14), 100); unitP = floor(MDD/(N*5*4*600)); exitC = (2-(MaxEntries-1)/2)*N; e60 = Ema(C,60); if Condition1 == False and sDate >= TD and sTime >= TT Then { Condition1 = true; Hcount = 0; Lcount = 0; T1 = TotalTrades; } if Condition1 == true Then { B = 0; S = 0; if TotalTrades-T1 > 0 Then { For cnt = 1 to TotalTrades-T1 { if MarketPosition(cnt) == 1 Then B = B+1; if MarketPosition(cnt) == -1 Then S = S+1; } } Hcount = B + IFf(MarketPosition == 1,1,0); Lcount = S + IFf(MarketPosition == -1,1,0); if B>0 && B == Hcount then HB = rHB; if S>0 && S == Lcount then LB = rLB; if Hstate == true then { Buy("b1",AtStop,HB,unitP); Buy("b2",AtStop,HB+0.5*N,unitP); Buy("b3",AtStop,HB+N,unitP); Buy("b4",AtStop,HB+1.5*N,unitP); } if Lstate == true then { Sell("s1",AtStop,LB,unitP); Sell("s2",AtStop,LB-0.5*N,unitP); Sell("s3",AtStop,LB-N,unitP); Sell("s4",AtStop,LB-2.5*N,unitP); } if marketposition ==1 Then { rHB = Highest(H, BarsSinceEntry) ; if e60 < HB+2*N Then exitlong("exitB1", atstop, HB-exitC); if e60 >= HB+2*N and CrossDown(close, e60) Then { ExitLong("exitB2") ; Hstate = false ; } exitlong("exitB3", AtLimit, Hx); } if marketposition == -1 Then { rLB = Lowest(L, BarsSinceEntry); if e60 > LB-2*N Then ExitShort("exitS1", atstop, LB+exitC); if e60 <= LB-2*N and CrossUp(close, e60) Then { ExitShort("exitS2"); Lstate = false ; } exitshort("exitS3", AtLimit, Lx); } if Hcount > 3 Then Hstate = False; if Lcount > 3 Then Lstate = False; if H >= Hx then Hstate = false; if L <= Lx then Lstate = false; } MessageLog("N %.2f, P %.2f, eC %.2f",N , unitP, exitC); MessageLog("HB %.2f, rHB %.2f, Hec %.2f, B %.f, Hc %.f, Hs %4s", HB, rHB, HB - exitC, B, Hcount, Hstate); MessageLog("LB %.2f, rLB %.2f, Lec %.2f, S %.f, Lc %.f, Ls %4s", LB, rLB, LB + exitC, S, Lcount, Lstate); 문제상황 1. 손절조건이 되서 청산되었으나 LB = rLB로 업데이트 되지 않았고 업데이트 되지 않아 초기치로 설정한 LB로 곧바로 다시 진입 '청산 => 재진입'이 일어난 시간을 확인해보면 5초의 갭이 있어 청산-매수 시점이 겹쳐 생긴 문제는 아닌듯 (1-1) 2. 차트상에선 청산신호가 나왔으나, 실제 청산 주문이 들어가지 않음 시스템 모니터 기록에도 청산 주문이 안들어가있음(2-1) 주문은 안들어갔으나, LB=rLB로 업데이트 3. 청산이 안된채로 조건이 되자 다시 진입 청산조건이 되자 이전에 남아있던 12계약은 그대로 있고 4계약만 청산됨 +) 캡쳐는 못했는데, exitL2 조건으로 청산되어 청산후 Hstate == false가 되어 거래정지가 되어야 하는 상황에서도 동일하게 Hstate 안바뀌고, HB 도 업데이트 안되 재진입하는 상황이 발생했습니다 관계가 있는진 모르겟으나 이 케이스도 위에 예시처럼 시스템 실행하고 처음 진입했을때 입니다 이런 문제 원인이 무엇인지 못찾겠어 가능하다면 확인 부탁드립니다 감사합니다
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-02-16 11:53:13

안녕하세요 예스스탁입니다. 1 청산후에 진입이 동일봉에서 발생하는 경우가 있습니다. 랭귀지는 봉완성이 기준이며 모든 사용하는 값과 값저장은 봉완성이 기준입니다. if B>0 && B == Hcount then HB = rHB; if S>0 && S == Lcount then LB = rLB; 청산후 같은봉 미완성시에 위 내용으로 HB,LB에 저장되는 것은 아닙니다. 해당 내용을 해결하기 위해서는 최소한 한개봉은 완성이 되어야 하므로 청산이 발생한 봉에서 같이 동일방향 진입이 발생하는 것을 막는 방법뿐이 없습니다. if MarketPosition <= 0 and Hstate == true then { Buy("b1",AtStop,HB,unitP); Buy("b2",AtStop,HB+0.5*N,unitP); Buy("b3",AtStop,HB+N,unitP); Buy("b4",AtStop,HB+1.5*N,unitP); } if MarketPosition >= 0 and Lstate == true then { Sell("s1",AtStop,LB,unitP); Sell("s2",AtStop,LB-0.5*N,unitP); Sell("s3",AtStop,LB-N,unitP); Sell("s4",AtStop,LB-2.5*N,unitP); } 2 청산신호가 발생했는데 주문자체가 발생하지 않았다면 해당부분은 주로 설정창의 주문시작신호 때문에 발생합니다. 설정창의 주문시작신호는 [모든신호], [진입신호] 중 택1해서 설정이 됩니다. [모든신호]는 적용이후 발생하는 모든 신호에 대해 주문을 집행하지만 [진입신호]는 시스템 적용 후 진입신호가 발생한 이후부터 주문을 집행하게 됩니다. 즉 [진입신호]는 실제 잔고에 포지션이 없을때 새로운 진입부터 주문을 하기 위한 설정입니다. 주문시작신호를 [진입신호]로 설정한 상태에서 자동매매 중에 설정창을 다시 띄운후에 확인버튼을 클릭하면 이후 다시 다음 진입부터 주문이 집행되므로 적용이후 첫신호가 청산신호이면 신호는 표시되지만 주문집행은 하지 않게 됩니다 그러므로 주문시작신호가 [진입신호]로 설정된 상태에서 자동매매 중에 시스템 트레이딩 설정창을 다시 띄워을 경우에는 주문시작신호를 상황에 따라 [모든신호]나 [진입신호]로 변경하고 적용하셔야 합니다. 3 시스템은 코딩상 내용으로 신호만 발생합니다. 지정한 조건으로 차트에 신호를 발생시키고 자동매매로 설정하면 각 신호종류에 따라 매수나 매도주문을 집행합니다. 차트의 신호나 변수의 값할당 자체가 실제 주문여부나 체결/미체결과 관련이 없습니다. 즐거운 하루되세요 > jshwang2 님이 쓴 글입니다. > 제목 : 수식 오류 문의드립니다 > 안녕하세요 수식을 테스트하던중 문제상황이 발생해 문의드립니다 사용한 수식은 아래와 같고 문제가 되었던 상황은 캡처로 첨부하였습니다 input : TT(224300), TD(20220215), MDD(200000) ; var : HB(14574), LB(14481), Hx(20000), Lx(1); var : e60(0), Hcount(0), Lcount(0),B(0),S(0),cnt(0),T1(0), Hstate(true), Lstate(true), N(0), unitP(0), exitC(0), rHB(0), rLB(0); N = Highest(ATr(14), 100); unitP = floor(MDD/(N*5*4*600)); exitC = (2-(MaxEntries-1)/2)*N; e60 = Ema(C,60); if Condition1 == False and sDate >= TD and sTime >= TT Then { Condition1 = true; Hcount = 0; Lcount = 0; T1 = TotalTrades; } if Condition1 == true Then { B = 0; S = 0; if TotalTrades-T1 > 0 Then { For cnt = 1 to TotalTrades-T1 { if MarketPosition(cnt) == 1 Then B = B+1; if MarketPosition(cnt) == -1 Then S = S+1; } } Hcount = B + IFf(MarketPosition == 1,1,0); Lcount = S + IFf(MarketPosition == -1,1,0); if B>0 && B == Hcount then HB = rHB; if S>0 && S == Lcount then LB = rLB; if Hstate == true then { Buy("b1",AtStop,HB,unitP); Buy("b2",AtStop,HB+0.5*N,unitP); Buy("b3",AtStop,HB+N,unitP); Buy("b4",AtStop,HB+1.5*N,unitP); } if Lstate == true then { Sell("s1",AtStop,LB,unitP); Sell("s2",AtStop,LB-0.5*N,unitP); Sell("s3",AtStop,LB-N,unitP); Sell("s4",AtStop,LB-2.5*N,unitP); } if marketposition ==1 Then { rHB = Highest(H, BarsSinceEntry) ; if e60 < HB+2*N Then exitlong("exitB1", atstop, HB-exitC); if e60 >= HB+2*N and CrossDown(close, e60) Then { ExitLong("exitB2") ; Hstate = false ; } exitlong("exitB3", AtLimit, Hx); } if marketposition == -1 Then { rLB = Lowest(L, BarsSinceEntry); if e60 > LB-2*N Then ExitShort("exitS1", atstop, LB+exitC); if e60 <= LB-2*N and CrossUp(close, e60) Then { ExitShort("exitS2"); Lstate = false ; } exitshort("exitS3", AtLimit, Lx); } if Hcount > 3 Then Hstate = False; if Lcount > 3 Then Lstate = False; if H >= Hx then Hstate = false; if L <= Lx then Lstate = false; } MessageLog("N %.2f, P %.2f, eC %.2f",N , unitP, exitC); MessageLog("HB %.2f, rHB %.2f, Hec %.2f, B %.f, Hc %.f, Hs %4s", HB, rHB, HB - exitC, B, Hcount, Hstate); MessageLog("LB %.2f, rLB %.2f, Lec %.2f, S %.f, Lc %.f, Ls %4s", LB, rLB, LB + exitC, S, Lcount, Lstate); 문제상황 1. 손절조건이 되서 청산되었으나 LB = rLB로 업데이트 되지 않았고 업데이트 되지 않아 초기치로 설정한 LB로 곧바로 다시 진입 '청산 => 재진입'이 일어난 시간을 확인해보면 5초의 갭이 있어 청산-매수 시점이 겹쳐 생긴 문제는 아닌듯 (1-1) 2. 차트상에선 청산신호가 나왔으나, 실제 청산 주문이 들어가지 않음 시스템 모니터 기록에도 청산 주문이 안들어가있음(2-1) 주문은 안들어갔으나, LB=rLB로 업데이트 3. 청산이 안된채로 조건이 되자 다시 진입 청산조건이 되자 이전에 남아있던 12계약은 그대로 있고 4계약만 청산됨 +) 캡쳐는 못했는데, exitL2 조건으로 청산되어 청산후 Hstate == false가 되어 거래정지가 되어야 하는 상황에서도 동일하게 Hstate 안바뀌고, HB 도 업데이트 안되 재진입하는 상황이 발생했습니다 관계가 있는진 모르겟으나 이 케이스도 위에 예시처럼 시스템 실행하고 처음 진입했을때 입니다 이런 문제 원인이 무엇인지 못찾겠어 가능하다면 확인 부탁드립니다 감사합니다