커뮤니티

진입 후 일자별로 stoploss를 다르게 설정하려고 합니다.

프로필 이미지
윤이
2021-12-23 21:34:08
537
글번호 154817
답변완료
if marketposition == 1 then { if sdate == EntryDate Then { setstoploss(1,PercentStop); } if sdate >= EntryDate+1 and sdate < EntryDate+3 Then { setstoploss(0.5,PercentStop); if CrossDown(C,삼일저가평균) Then { ExitLong("EX1",AtStop,삼일저가평균); } } if sdate >= EntryDate+3 Then { setstoploss(0.2,PercentStop); if CrossDown(C,삼일저가평균) Then { ExitLong("EX2",AtStop,삼일저가평균); } } } 이렇게 작성했는데 시뮬을 돌리면 stop 값이 일별 진행과 상관없이 전부 동일하게 작은값으로 적용이 되어버립니다. 로직이 잘못된 것 같아 보이지는 않는데 이유를 모르겠어요.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-12-24 09:57:43

안녕하세요 예스스탁입니다. 1 강제청산은 한번셋팅이 되면 다음 if조건이 만족해 변경될때까지 그 값이 유지가 됩니다. if문은 봉완성이 기준입니다. if marketposition == 1 then { if sdate == EntryDate Then { 위 조건은 진입이 후 최소 한개봉은 완성이 되어야 조건이 성립되고 진입이후 첫봉 봉완성시 if조건이 만족해서 셋팅이 되면 두번째 봉부터 새로운 스탑조건으로 감시를 하게 됩니다. 즉 작성하신 수식은 진입이후 두번쨰 봉부터 1%손절을 감시하게 됩니다. 2 청산후에 다음진입까지 값이 유지가 되므로 진입봉에서 셋팅은 이전에 셋팅해 놓은 값입니다. 그러므로 직전 진입이 0.2%에 손절되었다면 다음 진입봉후 첫봉에 0.2% 하락하면 손절이 나오게 됩니다. 1% 손절이 진입과 동시에 셋팅이 되어야 하므로 아래와 같이 지정하시면 진입과 동시에 1%손절셋팅으로 시작하게 됩니다. 3 sdate >= EntryDate+1 and sdate < EntryDate+3 랭귀지에서 날짜는 단지 8자리(천만단위) 숫자입니다. 진입일이 20211130이고 다음날이 20211201이면 아래와 같은 계산식과 조건문이 됩니다. 20211201 >= 20211131(20211130+1) and 20211201 < 20211133(20211130+3) 날짜에 +1이나 +3을 해서 자동으로 아래와 같이 변환되는 것이 아닙니다. EntryDate+1 --> 20211201 EntryDate+3 --> 20211203 진입이후 N일경과는 아래와 같이 날짜변경을 카운트해서 이용하셔야 합니다. 4 var : Didx(0); if Bdate != Bdate[1] Then Didx = Didx+1; if marketposition == 1 then { //진입후 1거래일 이후 3거래일 미만에서만 0.5% 설정 if Didx >= Didx[BarsSinceEntry]+1 and Didx < Didx[BarsSinceEntry]+3 Then { setstoploss(0.5,PercentStop); } //진입후 3거래일 이후에는 0.2% 설정 if Didx >= Didx[BarsSinceEntry]+3 Then { setstoploss(0.2,PercentStop); } } Else //marketposition이 1이 되기 전에 1% 셋팅 setstoploss(1,PercentStop); 즐거운 하루되세요 > 윤이 님이 쓴 글입니다. > 제목 : 진입 후 일자별로 stoploss를 다르게 설정하려고 합니다. > if marketposition == 1 then { if sdate == EntryDate Then { setstoploss(1,PercentStop); } if sdate >= EntryDate+1 and sdate < EntryDate+3 Then { setstoploss(0.5,PercentStop); if CrossDown(C,삼일저가평균) Then { ExitLong("EX1",AtStop,삼일저가평균); } } if sdate >= EntryDate+3 Then { setstoploss(0.2,PercentStop); if CrossDown(C,삼일저가평균) Then { ExitLong("EX2",AtStop,삼일저가평균); } } } 이렇게 작성했는데 시뮬을 돌리면 stop 값이 일별 진행과 상관없이 전부 동일하게 작은값으로 적용이 되어버립니다. 로직이 잘못된 것 같아 보이지는 않는데 이유를 모르겠어요.