커뮤니티

75984 추가문의드립니다

프로필 이미지
jshwang2
2022-02-18 02:46:58
842
글번호 156411
답변완료

첨부 이미지

안녕하세요~ 답변주신 내용으로 다시 살펴봤습니다 ---------------------------------- 해당 부분은 테스트해본 결과 진입의 수량을 지정하는 unitP값 때문인것 같습니다. 해당변수가 MDD값에 따라 0이 리턴되는데 수량에 1미만의 값이 지정되면 신호가 발생할수 없습니다. 해당계산식을 살펴보셔야 할것 같습니다. input : MDD(200000) ; var : N(0), unitP(0); N = Highest(ATr(14), 100); unitP = floor(MDD/(N*5*4*600)); Plot1(unitP); ----------------------------------- 이 내용에 대해 살펴보았는데 MDD = 200000, 120틱봉에서 계속 고정해 테스트했고 MDD = 200000에서 unitP = 0이되려면 ATR(14) = 17이 되어야하는데 나스닥 120틱봉에서 ATR은 정말 커져야 10~11정도이지 17까지 가지 않습니다 첨부한 사진에서도 보시면 매도 s1 진입이후 2, 3이 생략되고 s4가 진입되었는데 매매내역을 보시면 3계약씩 진입해 있습니다 N을 최근 100봉 ATR의 최대치로 사용하기 때문에 s2, s3이 들어갈 타이밍에 unitP가 0이 되었다 다시 3이될 가능성은 없을 것 같습니다 첫번째 진입은 항상 정상적으로 발생하고 2~4번째 피라미딩에서 반복적으로 이런 문제가 발생하는것도 unitP의 문제는 아닐것 같습니다 이에 해당하는 케이스는 marketposition이 0이 아닌 상황에서 진입조건 뿐인데 혹시 marketposition이 0이 아닐때 진입하는 아래 수식에서 봉완성 등의 이유로 진입이 안될 수 있는 케이스가 있을까요?? 또한 문의드리려 캡쳐해둔 사진을 모아보다보니 진입 이후 첫봉(marketposition = 1이 되는 봉)에서 진입이 안되고 있는것 같다는 생각이 듭니다 첨부한 세번째 사진처럼, 이런 경우가 발생하는 케이스가 진입한 다음봉이 2, 3번째 피라미딩 가격을 터치할때 진입이 안되고 첫 진입 다음봉이 피라미딩 가격에 도달하지 못했을 때는 이후에 진입하는것 같습니다 (첫번째 사진의 b2까지 정상진입한 케이스) 확인해봐도 진입 이후 첫봉에서 진입 안할 이유는 없어보이는데... 혹시 이런 부분이 있는지 확인 부탁드리겠습니다 감사합니다 ----------------------------------- input : TT(22900), TD(20220218), MDD(200000) ; var : HB(14354), LB(14313), 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 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-1.5*N,unitP); } if marketposition ==1 Then { rHB = Highest(H, BarsSinceEntry) ; if rHB < HB+0.5*N Then Buy("b2.",AtStop,HB+0.5*N,unitP); if rHB < HB+N Then Buy("b3.",AtStop,HB+N,unitP); if rHB < HB+1.5*N Then Buy("b4.",AtStop,HB+1.5*N,unitP); 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 rLB > LB-0.5*N Then Sell("s2.",AtStop,LB-0.5*N,unitP); if rLB > LB-N Then Sell("s3.",AtStop,LB-N,unitP); if rLB > LB-1.5*N Then Sell("s4.",AtStop,LB-1.5*N,unitP); 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; }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-02-18 09:34:55

안녕하세요 예스스탁입니다. rHB = Highest(H, BarsSinceEntry) ; rLB = Lowest(L, BarsSinceEntry); 사용하시는 수식에서 위 내용은 진입이후 최고가/최저가입니다. BarsSinceEntry가 진입봉은 0, 다음봉이 1, 다다음봉이 2...로 변경되는데 진입봉에서는 Highest(H, 0),Lowest(L,0)과 같이 기간값이 0이 되어 N/A가 발생해서 진입봉 다음봉에 신호가 발생하지 않았습니다. rHB = Highest(H, BarsSinceEntry+1) ; rLB = Lowest(L, BarsSinceEntry+1); 위와 같이 변경하시면 진입봉이 포함된 최고가와 최저가로 계산되어 진입이 가능합니다. 즐거운 하루 되세요 > jshwang2 님이 쓴 글입니다. > 제목 : 75984 추가문의드립니다 > 안녕하세요~ 답변주신 내용으로 다시 살펴봤습니다 ---------------------------------- 해당 부분은 테스트해본 결과 진입의 수량을 지정하는 unitP값 때문인것 같습니다. 해당변수가 MDD값에 따라 0이 리턴되는데 수량에 1미만의 값이 지정되면 신호가 발생할수 없습니다. 해당계산식을 살펴보셔야 할것 같습니다. input : MDD(200000) ; var : N(0), unitP(0); N = Highest(ATr(14), 100); unitP = floor(MDD/(N*5*4*600)); Plot1(unitP); ----------------------------------- 이 내용에 대해 살펴보았는데 MDD = 200000, 120틱봉에서 계속 고정해 테스트했고 MDD = 200000에서 unitP = 0이되려면 ATR(14) = 17이 되어야하는데 나스닥 120틱봉에서 ATR은 정말 커져야 10~11정도이지 17까지 가지 않습니다 첨부한 사진에서도 보시면 매도 s1 진입이후 2, 3이 생략되고 s4가 진입되었는데 매매내역을 보시면 3계약씩 진입해 있습니다 N을 최근 100봉 ATR의 최대치로 사용하기 때문에 s2, s3이 들어갈 타이밍에 unitP가 0이 되었다 다시 3이될 가능성은 없을 것 같습니다 첫번째 진입은 항상 정상적으로 발생하고 2~4번째 피라미딩에서 반복적으로 이런 문제가 발생하는것도 unitP의 문제는 아닐것 같습니다 이에 해당하는 케이스는 marketposition이 0이 아닌 상황에서 진입조건 뿐인데 혹시 marketposition이 0이 아닐때 진입하는 아래 수식에서 봉완성 등의 이유로 진입이 안될 수 있는 케이스가 있을까요?? 또한 문의드리려 캡쳐해둔 사진을 모아보다보니 진입 이후 첫봉(marketposition = 1이 되는 봉)에서 진입이 안되고 있는것 같다는 생각이 듭니다 첨부한 세번째 사진처럼, 이런 경우가 발생하는 케이스가 진입한 다음봉이 2, 3번째 피라미딩 가격을 터치할때 진입이 안되고 첫 진입 다음봉이 피라미딩 가격에 도달하지 못했을 때는 이후에 진입하는것 같습니다 (첫번째 사진의 b2까지 정상진입한 케이스) 확인해봐도 진입 이후 첫봉에서 진입 안할 이유는 없어보이는데... 혹시 이런 부분이 있는지 확인 부탁드리겠습니다 감사합니다 ----------------------------------- input : TT(22900), TD(20220218), MDD(200000) ; var : HB(14354), LB(14313), 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 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-1.5*N,unitP); } if marketposition ==1 Then { rHB = Highest(H, BarsSinceEntry) ; if rHB < HB+0.5*N Then Buy("b2.",AtStop,HB+0.5*N,unitP); if rHB < HB+N Then Buy("b3.",AtStop,HB+N,unitP); if rHB < HB+1.5*N Then Buy("b4.",AtStop,HB+1.5*N,unitP); 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 rLB > LB-0.5*N Then Sell("s2.",AtStop,LB-0.5*N,unitP); if rLB > LB-N Then Sell("s3.",AtStop,LB-N,unitP); if rLB > LB-1.5*N Then Sell("s4.",AtStop,LB-1.5*N,unitP); 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; }