커뮤니티

수식문의드립니다

프로필 이미지
jshwang2
2022-02-10 12:44:59
1146
글번호 156181
답변완료
안녕하세요 이전에 도움주신 수식에 아래와 같은 조건을 추가하고 싶어 질문드립니다! 수식에 진입 이후 고가로 HB가 경신되도록 되어있는 부분에서 추후 피라미딩을 추가할 예정이라, 진입 이후엔 HB가 변하지 않고, 청산 이후에 진입때 고가로 HB가 업데이트 되도록 만들고 싶습니다 ex) HB, HB+10로 피라미딩 될 때, 진입 이후 고가로 HB가 계속 업데이트 되면, 피라미딩 진입 가격(HB+10)도 변하기 때문 HB 돌파시 1차진입 1차진입때의 HB는 변동 없고, 1차진입때의 고가를 저장 1차진입 청산 이후 HB를 저장한 고가로 업데이트 업데이트된 HB 기준으로 2차진입 & 청산까지 HB는 동일 2차진입 청산 이후, 고가 기준으로 HB 업데이트 ... 그래서 이전에 도움주신 수식에서 새로 rHB(); 변수를 선언한 뒤 marketposition이 진입한 상태일때 rHB = highest(H,barssinceentry); 로 업데이트하고 if B>0 && B == Hcount then HB = rHB; 로 HB를 업데이트 하도록 만들었습니다 1차 진입시엔 B가 0이므로, HB 초기치로 돌파진입 1차 청산 이후엔 B = Hcount = 1이므로, 이때 HB=rHB로 업데이트 업데이트된 rHB로 2차진입 2차진입이 되면 B = 1, Hcount = 2 이므로 HB는 업데이트되지 않고, rHB는 고가 경신시 업데이트 2차 청산 이후 B = Hcount = 2가 되며, 2차 진입에서 고가가 경신되었다면 HB 값도 업데이트 ... 이렇게 될거라 생각하고 아래와 같이 구성했는데 제가 생각한대로 작동하는 방식인지 확인 부탁드리겠습니다 감사합니다! input : TT(55700), TD(20220205), N(5) ; var : HB(14710), LB(14680), e60(0), Hcount(0), Lcount(0),B(0),S(0),cnt(0),T1(0), rHB(0), rLB(0) ; 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 Hcount < 3 then Buy("b",AtStop,HB,2) ; if Lcount < 3 then Sell("s",AtStop,LB,2) ; if B>0 && B == Hcount then HB = rHB; if S>0 && S == Lcount then LB = rLB; if marketposition > 0 Then { if e60 < HB Then ExitLong("exitL1",AtStop,HB-N); if e60 >= HB && CrossDown(close, e60) Then ExitLong("exitL2") ; rHB = Highest(H, BarsSinceEntry) ; } if marketposition < 0 Then { if e60 > LB Then ExitShort("exitS1",AtStop,LB+N); if e60 <= LB && CrossUp(close, e60) Then ExitShort("exitS2"); rLB = Lowest(L, BarsSinceEntry); } }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-02-10 15:51:10

안녕하세요 예스스탁입니다. 예 작성하신 내용이 맞습니다. 작성하신 내용과 같이 B,S와 Hcount,Lcount비교로 청산시점을 지정하셔도 되고 아래와 같이 TotalTrades,MarketPosition를 이용해서 각 포지션 청산시점 지정하셔도 됩니다. #매수청산 발생 if TotalTrades > TotalTrades[1] and MarketPosition(1) == 1 then HB = rHB; #매도청산 발생 if TotalTrades > TotalTrades[1] and MarketPosition(1) == -1 then LB = rLB; 즐거운 하루되세요 > jshwang2 님이 쓴 글입니다. > 제목 : 수식문의드립니다 > 안녕하세요 이전에 도움주신 수식에 아래와 같은 조건을 추가하고 싶어 질문드립니다! 수식에 진입 이후 고가로 HB가 경신되도록 되어있는 부분에서 추후 피라미딩을 추가할 예정이라, 진입 이후엔 HB가 변하지 않고, 청산 이후에 진입때 고가로 HB가 업데이트 되도록 만들고 싶습니다 ex) HB, HB+10로 피라미딩 될 때, 진입 이후 고가로 HB가 계속 업데이트 되면, 피라미딩 진입 가격(HB+10)도 변하기 때문 HB 돌파시 1차진입 1차진입때의 HB는 변동 없고, 1차진입때의 고가를 저장 1차진입 청산 이후 HB를 저장한 고가로 업데이트 업데이트된 HB 기준으로 2차진입 & 청산까지 HB는 동일 2차진입 청산 이후, 고가 기준으로 HB 업데이트 ... 그래서 이전에 도움주신 수식에서 새로 rHB(); 변수를 선언한 뒤 marketposition이 진입한 상태일때 rHB = highest(H,barssinceentry); 로 업데이트하고 if B>0 && B == Hcount then HB = rHB; 로 HB를 업데이트 하도록 만들었습니다 1차 진입시엔 B가 0이므로, HB 초기치로 돌파진입 1차 청산 이후엔 B = Hcount = 1이므로, 이때 HB=rHB로 업데이트 업데이트된 rHB로 2차진입 2차진입이 되면 B = 1, Hcount = 2 이므로 HB는 업데이트되지 않고, rHB는 고가 경신시 업데이트 2차 청산 이후 B = Hcount = 2가 되며, 2차 진입에서 고가가 경신되었다면 HB 값도 업데이트 ... 이렇게 될거라 생각하고 아래와 같이 구성했는데 제가 생각한대로 작동하는 방식인지 확인 부탁드리겠습니다 감사합니다! input : TT(55700), TD(20220205), N(5) ; var : HB(14710), LB(14680), e60(0), Hcount(0), Lcount(0),B(0),S(0),cnt(0),T1(0), rHB(0), rLB(0) ; 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 Hcount < 3 then Buy("b",AtStop,HB,2) ; if Lcount < 3 then Sell("s",AtStop,LB,2) ; if B>0 && B == Hcount then HB = rHB; if S>0 && S == Lcount then LB = rLB; if marketposition > 0 Then { if e60 < HB Then ExitLong("exitL1",AtStop,HB-N); if e60 >= HB && CrossDown(close, e60) Then ExitLong("exitL2") ; rHB = Highest(H, BarsSinceEntry) ; } if marketposition < 0 Then { if e60 > LB Then ExitShort("exitS1",AtStop,LB+N); if e60 <= LB && CrossUp(close, e60) Then ExitShort("exitS2"); rLB = Lowest(L, BarsSinceEntry); } }