커뮤니티

문의 드립니다

프로필 이미지
하우즐영
2021-11-26 11:06:07
716
글번호 153944
답변완료
수고하십니다. If IsEntryName("ds1") == True Then { If BarsSinceEntry > 1 and BarsSinceEntry <= 7 and CountIF(CrossDown(sigma1456v,sigma5615),BarsSinceEntry)>=1 and (var179 >= var180 or Lowest(sigma1456v,20) < Lowest(sigma1456v,8) or CountIF(CrossDown(sigma1456v,-2),BarsSinceEntry)>=2 ) then SetStopTrailing(0.2,0.4,PointStop); } Else {SetStopTrailing(0,0);} 이런 수식으로 청산식을 만들었습니다. 여기서 BarsSinceEntry <= 7 는 진입후 7개 캔들 이내에서만 조건 완성시 청산으로 알고 있습니다. 그런데 7개를 훨씬 지난 12번째 캔들에서 청산신호가 나왔습니다. 왜 그런것인지 궁굼합니다. 참고로 진입후 7캔들내로 제한을 둔 것은 7캔들 내에서 조건이 충족이 되지 않을 때는 추세로 보고 길게 가지고 가려는 이유에서입니다. 이런 목적에 부합하는 더 적합한 수식이 있다면 부탁드립니다. 감사합니다. 좋은 주말 보내세요
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-11-26 13:25:28

안녕하세요 예스스탁입니다. If IsEntryName("ds1") == True Then { If BarsSinceEntry > 1 and BarsSinceEntry <= 7 and CountIF(CrossDown(sigma1456v,sigma5615),BarsSinceEntry)>=1 and (var179 >= var180 or Lowest(sigma1456v,20) < Lowest(sigma1456v,8) or CountIF(CrossDown(sigma1456v,-2),BarsSinceEntry)>=2 ) then SetStopTrailing(0.2,0.4,PointStop); } Else { SetStopTrailing(0,0); } 작성하신 수식은 SetStopTrailing이 셋팅되는 조건이 7봉이내로 지정되어 있는 것일 뿐입니다. 강제청산함수는 한번 셋팅이 되면 그 셋팅을 유지하게 됩니다. ds1이라는 진입이후에 지정한 조건이 만족하면 SetStopTrailing이 셋팅이 되고 해당 진입이 청산이 될때까지 유지가 되게 됩니다. 진입 후 7개봉 경과되면 해제하고자 하시면 아래와 같이 7개봉이 경과되면 해제하는 내용을 추가해 주셔야 합니다. If IsEntryName("ds1") == True Then { If BarsSinceEntry > 1 and BarsSinceEntry <= 7 and CountIF(CrossDown(sigma1456v,sigma5615),BarsSinceEntry)>=1 and (var179 >= var180 or Lowest(sigma1456v,20) < Lowest(sigma1456v,8) or CountIF(CrossDown(sigma1456v,-2),BarsSinceEntry)>=2 ) then SetStopTrailing(0.2,0.4,PointStop); if BarsSinceExit >= 7 Then SetStopTrailing(0,0); } Else { SetStopTrailing(0,0); } 추가적으로 SetStopTrailing은 익절이나 손절과는 다르게 진입이후 최고수익지점을 체크하게 됩니다. 위와 같이 작성하시면 셋팅이 진입이후 특정조건이 만족한 이후에 셋팅이 되어 세팅이전에 발생한 봉에 대한 손익체크는 하지를 못합니다. 셋팅이후의 봉만으로 최고수익지점을 계산해서 0.4포인트 이상 수익이 난것을 체크하게 됩니다. 위 내용으로 셋팅이 되시는 것을 의도하신 내용이면 위식을 사용하시면 되고 진입이후 첫봉부터 최고수익을 체크하는 내용이면 아래와 같이 강제청산 함수가 아닌 일반청산함수로 대체해서 작성하셔야 합니다. ds1이 매수진입인지 매도진입인지 알수 없어 매도진입으로 보고 작성해 드립니다. If IsEntryName("ds1") == True Then { If BarsSinceEntry > 1 and BarsSinceEntry <= 7 and CountIF(CrossDown(sigma1456v,sigma5615),BarsSinceEntry)>=1 and (var179 >= var180 or Lowest(sigma1456v,20) < Lowest(sigma1456v,8) or CountIF(CrossDown(sigma1456v,-2),BarsSinceEntry)>=2 ) then { if lowest(L,BarsSinceEntry) <= EntryPrice-0.4 Then ExitShort("sx",AtStop,lowest(l,BarsSinceEntry)+0.2); } 즐거운 하루되세요 > 하우즐영 님이 쓴 글입니다. > 제목 : 문의 드립니다 > 수고하십니다. If IsEntryName("ds1") == True Then { If BarsSinceEntry > 1 and BarsSinceEntry <= 7 and CountIF(CrossDown(sigma1456v,sigma5615),BarsSinceEntry)>=1 and (var179 >= var180 or Lowest(sigma1456v,20) < Lowest(sigma1456v,8) or CountIF(CrossDown(sigma1456v,-2),BarsSinceEntry)>=2 ) then SetStopTrailing(0.2,0.4,PointStop); } Else {SetStopTrailing(0,0);} 이런 수식으로 청산식을 만들었습니다. 여기서 BarsSinceEntry <= 7 는 진입후 7개 캔들 이내에서만 조건 완성시 청산으로 알고 있습니다. 그런데 7개를 훨씬 지난 12번째 캔들에서 청산신호가 나왔습니다. 왜 그런것인지 궁굼합니다. 참고로 진입후 7캔들내로 제한을 둔 것은 7캔들 내에서 조건이 충족이 되지 않을 때는 추세로 보고 길게 가지고 가려는 이유에서입니다. 이런 목적에 부합하는 더 적합한 수식이 있다면 부탁드립니다. 감사합니다. 좋은 주말 보내세요