커뮤니티

75857 답변해주신 수식 질문드립니다

프로필 이미지
jshwang2
2022-02-10 02:40:27
1161
글번호 156171
답변완료
안녕하세요 어제 답변주신 수식이 잘 작동하는 것은 확인했습니다 감사합니다! 하지만 어떻게 그런 결과가 나오는지 잘 이해가 되지 않아 관련해 추가적으로 질문드립니다 질문 내용은 시스템 사이사이 해당하는 코드 밑에 적어놨습니다 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) ; e60 = Ema(C,60); if Condition1 == False and sDate >= TD and sTime >= TT Then { Condition1 = true; Hcount = 0; Lcount = 0; T1 = TotalTrades; } Q1. 1-1 ) if문에 condition1을 선언 안했는데 condition1 == false가 조건으로 들어간게 무슨 의미이고 어떤 기능을 하나요? 1-2) Hcount, Lcount는 이미 변수 선언시 0으로 선언했는데 여기서 다시 0으로 만드는 이유가 무엇인가요? 1-3) TotalTrades는 처음에 0이고, 시스템을 돌려봐도 T1 = 0으로 변함이 없는데 이게 들어간 이유가 궁금합니다 if Condition1 == true Then { B = 0; S = 0; Q2. B, S 또한 처음 선언시 0으로 선언되었는데 다시 여기서 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) ; Q3. Hcount, Lcount가 사용되는 이유가 뭔가요? 수식을 봤을 때 한번의 진입과 청산에서 Hcount는 진입 시점에 +1, B는 청산시점에 +1이 되는 것으로 보이는데 4번째 진입을 막아야 하는 상황인 3번째 진입-청산이 끝난 상황에선 B도 3이기 때문에 Hcount 대신 B를 써도 되지 않나요? if marketposition > 0 Then { if e60 < HB Then ExitLong("exitL1",AtStop,HB-N); if e60 >= HB && CrossDown(close, e60) Then ExitLong("exitL2") ; HB = 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"); LB = Lowest(L, BarsSinceEntry); } } 의도한대로 잘 작동하게 짜주셔서 다시한번 감사합니다! 그래도 제가 정확히 이해를 하고있어야 나중에 사용하다 필요에 따라 수정 할 수 있을것 같아 부득이하게 디테일한 부분들에 대해 질문을 드렸습니다ㅠ 가능한만큼 답변해주시면 감사하겠습니다! 감사합니다
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-02-10 10:55:01

안녕하세요 예스스탁입니다. 1 condition1~condition99는 작성의 편의를 위해 내부적으로 미리 선언되어 제공되는 변수입니다. var : condiition1(false);가 생략된 형태로 기본값이 false입니다. var1~var99,value1~value99도 위와 같이 미리 선언되어 제공되는 변수입니다. 기본값은 모두 0입니다. if Condition1 == False and sDate >= TD and sTime >= TT Then { Condition1 = true; Hcount = 0; Lcount = 0; T1 = TotalTrades; } 해당 수식에서 Condition1변수를 사용한 이유는 지정한 일시이후에 계속 조건이 만족하므로 차트에서 지정한 일시를 만족하는 첫봉만 지정하기 위함입니다. 구현하는 수식에서 굳이 위와 같이 처리할 필요는 없지만 수식을 응용해 매일 카운트를 초기화하는 등 일정시점마다 초기화가 필요한 내용을 구현할때는 공통으로 사용하기 편한 내용으로 변경해 드린 부분입니다. 2 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); B,S는 매봉 for루프로 청산종결된 매수거래와 매도거래 횟수를 카운트 합니다. 그러므로 매봉 0으로 초기화하고 아래 for문에서 다시 누적값을 저장하게 만든것입니다. 일반적으로 for문을 통해 값을 누적할 때는 매봉 누적값을 저장하는 변수를 초기화하고 for문의 내용이 수행되게 하셔야 합니다. 작성하신 매수진입과 매도진입이 한봉에서 같이 나올수 있기 때문입니다. MarketPosition같은 함수의 전봉과 현재봉의 변화로는 봉의 최종포지션만 알수 있으므로 중간에 진입이 되었는지를 알수가 없어 일반적으로 위와 같은 수식으로 진입횟수를 카운트합니다. 위 수식이 진입횟수를 카운트는 기본 수식입니다. 3 #B(청산완료된 매수거래횟수)값에 현재 매수가 진입중이면 1더하고 아니면 0을 더함 Hcount = B + IFf(MarketPosition == 1,1,0); #S(청산완료된 매도거래횟수)값에 현재 매도가 진입중이면 1더하고 아니면 0을 더함 Lcount = S + IFf(MarketPosition == -1,1,0); TotalTrades는 청산된 거래의 횟수만 리펀합니다. B,S는 청산된 거래만 따져서 진입의 횟수를 카운트 하고 현재 진입이 들어가 있는 상태라면 해당 포지션을 포함해서 카운트 값을 사용하기 위해 위와 같은 계산식이 추가되어 Hcount,Lcount변수가 제공됩니다. 즐거운 하루되세요 > jshwang2 님이 쓴 글입니다. > 제목 : 75857 답변해주신 수식 질문드립니다 > 안녕하세요 어제 답변주신 수식이 잘 작동하는 것은 확인했습니다 감사합니다! 하지만 어떻게 그런 결과가 나오는지 잘 이해가 되지 않아 관련해 추가적으로 질문드립니다 질문 내용은 시스템 사이사이 해당하는 코드 밑에 적어놨습니다 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) ; e60 = Ema(C,60); if Condition1 == False and sDate >= TD and sTime >= TT Then { Condition1 = true; Hcount = 0; Lcount = 0; T1 = TotalTrades; } Q1. 1-1 ) if문에 condition1을 선언 안했는데 condition1 == false가 조건으로 들어간게 무슨 의미이고 어떤 기능을 하나요? 1-2) Hcount, Lcount는 이미 변수 선언시 0으로 선언했는데 여기서 다시 0으로 만드는 이유가 무엇인가요? 1-3) TotalTrades는 처음에 0이고, 시스템을 돌려봐도 T1 = 0으로 변함이 없는데 이게 들어간 이유가 궁금합니다 if Condition1 == true Then { B = 0; S = 0; Q2. B, S 또한 처음 선언시 0으로 선언되었는데 다시 여기서 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) ; Q3. Hcount, Lcount가 사용되는 이유가 뭔가요? 수식을 봤을 때 한번의 진입과 청산에서 Hcount는 진입 시점에 +1, B는 청산시점에 +1이 되는 것으로 보이는데 4번째 진입을 막아야 하는 상황인 3번째 진입-청산이 끝난 상황에선 B도 3이기 때문에 Hcount 대신 B를 써도 되지 않나요? if marketposition > 0 Then { if e60 < HB Then ExitLong("exitL1",AtStop,HB-N); if e60 >= HB && CrossDown(close, e60) Then ExitLong("exitL2") ; HB = 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"); LB = Lowest(L, BarsSinceEntry); } } 의도한대로 잘 작동하게 짜주셔서 다시한번 감사합니다! 그래도 제가 정확히 이해를 하고있어야 나중에 사용하다 필요에 따라 수정 할 수 있을것 같아 부득이하게 디테일한 부분들에 대해 질문을 드렸습니다ㅠ 가능한만큼 답변해주시면 감사하겠습니다! 감사합니다