커뮤니티

수식 수정 부탁드려요~

프로필 이미지
추우세추우종
2020-02-25 16:16:10
303
글번호 136319
답변완료

첨부 이미지

해외선물 나스닥 1분봉 기준입니다 사진에 보시는것처럼 매주 월요일마다 진입과 청산이 안되고요 휴장다음날 또한 진입과 청산이 안되네요 한번 돌려보시고 수식 수정 부탁드립니다 //써머타임 변수 var : Summer(False),Year(0); var : V1(0),V2(0),V3(0),V4(0); var: Tcond(False); //써머타임 변수 input: p(20); var1 = ma(c,20); // 써머타임 if sdate != sdate[1] Then { Year = Floor(sdate/10000); V1 = (10000 * Year) + (100 * 3) + 1; V2 = 15 - dayofweek(v1); // 3월 두번째 일요일 날짜 v3 = (10000 * Year) + (100 * 11) + 1; v4 = 8 - dayofweek(v3); // 11월 첫번째 일요일 날짜 Summer = (sdate > (10000 * Year) + (100 * 3) + v2) And (sdate < (10000 * Year) + (100 * 11) + v4); } // 써머타임 // 써머타임 3월~11월 if Summer == true then{ if (sdate != sdate[1] and stime >= 070000) or (sdate == sdate[1] and stime >= 070000 and stime[1] < 070000) then { Tcond = true; } if sdate == 20190419 then { //써머 휴일청산 if (sdate != sdate[1] and stime >= 054500) or (sdate == sdate[1] and stime >= 054500 and stime[1] < 054500) then { Tcond = false; if MarketPosition == 1 Then ExitLong("써머휴일매수청"); if MarketPosition == -1 Then ExitShort("써머휴일매도청"); } } else if sdate == 20190528 or sdate == 20190704 or sdate == 20190705 or sdate == 20190903 then { //써머 조기장 if (sdate != sdate[1] and stime >= 014500) or (sdate == sdate[1] and stime >= 014500 and stime[1] < 014500) then { Tcond = false; if MarketPosition == 1 Then ExitLong("써머조기장매수청"); if MarketPosition == -1 Then ExitShort("써머조기장매도청"); } } else { if (sdate != sdate[1] and stime >= 054500 ) or (sdate == sdate[1] and stime >= 054500 and stime[1] < 054500 ) then { Tcond = false; if MarketPosition == 1 Then ExitLong("써머매수청"); if MarketPosition == -1 Then ExitShort("써머매도청"); } } } Else { //11월~3월까지 if (sdate != sdate[1] and stime >= 080000) or (sdate == sdate[1] and stime >= 080000 and stime[1] < 080000) then { Tcond = true; } if sdate == 20190101 or sdate == 20200101 then { //노써머 휴일청산 if (sdate != sdate[1] and stime >= 064500) or (sdate == sdate[1] and stime >= 064500 and stime[1] < 064500) then { Tcond = false; if MarketPosition == 1 Then ExitLong("노써머휴일매수청"); if MarketPosition == -1 Then ExitShort("노써머휴일매도청"); } } else if sdate == 20190122 or sdate == 20190219 or sdate == 20191129 or sdate == 20191130 or sdate == 20191225 or sdate == 20200121 or sdate == 20200218 then { //노써머 조기장 if (sdate != sdate[1] and stime >= 024500) or (sdate == sdate[1] and stime >= 024500 and stime[1] < 024500) then { Tcond = false; if MarketPosition == 1 Then ExitLong("노써머조기장매수청"); if MarketPosition == -1 Then ExitShort("노써머조기장매도청"); } } else{ if (sdate != sdate[1] and stime >= 064500 ) or (sdate == sdate[1] and stime >= 064500 and stime[1] < 064500 ) then { Tcond = false; if MarketPosition == 1 Then ExitLong("노써머매수청"); if MarketPosition == -1 Then ExitShort("노써머매도청"); } } } // 써머타임 //--------- 진입 로직 ---------// If Tcond == true Then { if CrossUp(c,var1) Then buy(); if CrossDown(c,var1) Then sell(); }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2020-02-26 11:40:57

안녕하세요 예스스탁입니다. Tcond가 true 와 false 조건이 동시 충족되는 경우가 있습니다. 예를 들어 월요일의 경우 날짜 변경되고 첫 봉이 8시이므로 sdate != sdate[1] and stime >= 070000와 sdate != sdate[1] and stime >= 054500 같은 조건이 동시충족이 되고 수식은 위에서 아래로 읽어 내려 가므로 최종적으로 false 가 저장되어 이런날은 신호가 발생되지 않습니다. true가 되는 조건을 false보다 아랫줄에 작성하시면 됩니다. //써머타임 변수 var : Summer(False),Year(0); var : V1(0),V2(0),V3(0),V4(0); var: Tcond(False); //써머타임 변수 input: p(20); var1 = ma(c,20); // 써머타임 if sdate != sdate[1] Then { Year = Floor(sdate/10000); V1 = (10000 * Year) + (100 * 3) + 1; V2 = 15 - dayofweek(v1); // 3월 두번째 일요일 날짜 v3 = (10000 * Year) + (100 * 11) + 1; v4 = 8 - dayofweek(v3); // 11월 첫번째 일요일 날짜 Summer = (sdate > (10000 * Year) + (100 * 3) + v2) And (sdate < (10000 * Year) + (100 * 11) + v4); } // 써머타임 // 써머타임 3월~11월 if Summer == true then { if sdate == 20190419 then //써머 휴일청산 { if (sdate != sdate[1] and stime >= 054500) or (sdate == sdate[1] and stime >= 054500 and stime[1] < 054500) then { Tcond = false; if MarketPosition == 1 Then ExitLong("써머휴일매수청"); if MarketPosition == -1 Then ExitShort("써머휴일매도청"); } } else if sdate == 20190528 or sdate == 20190704 or sdate == 20190705 or sdate == 20190903 then //써머 조기장 { if (sdate != sdate[1] and stime >= 014500) or (sdate == sdate[1] and stime >= 014500 and stime[1] < 014500) then { Tcond = false; if MarketPosition == 1 Then ExitLong("써머조기장매수청"); if MarketPosition == -1 Then ExitShort("써머조기장매도청"); } } else { if (sdate != sdate[1] and stime >= 054500 ) or (sdate == sdate[1] and stime >= 054500 and stime[1] < 054500 ) then { Tcond = false; if MarketPosition == 1 Then ExitLong("써머매수청"); if MarketPosition == -1 Then ExitShort("써머매도청"); } } if (sdate != sdate[1] and stime >= 070000) or (sdate == sdate[1] and stime >= 070000 and stime[1] < 070000) then { Tcond = true; } } Else //11월~3월까지 { if sdate == 20190101 or sdate == 20200101 then //노써머 휴일청산 { if (sdate != sdate[1] and stime >= 064500) or (sdate == sdate[1] and stime >= 064500 and stime[1] < 064500) then { Tcond = false; if MarketPosition == 1 Then ExitLong("노써머휴일매수청"); if MarketPosition == -1 Then ExitShort("노써머휴일매도청"); } } else if sdate == 20190122 or sdate == 20190219 or sdate == 20191129 or sdate == 20191130 or sdate == 20191225 or sdate == 20200121 or sdate == 20200218 then //노써머 조기장 { if (sdate != sdate[1] and stime >= 024500) or (sdate == sdate[1] and stime >= 024500 and stime[1] < 024500) then { Tcond = false; if MarketPosition == 1 Then ExitLong("노써머조기장매수청"); if MarketPosition == -1 Then ExitShort("노써머조기장매도청"); } } else { if (sdate != sdate[1] and stime >= 064500 ) or (sdate == sdate[1] and stime >= 064500 and stime[1] < 064500 ) then { Tcond = false; if MarketPosition == 1 Then ExitLong("노써머매수청"); if MarketPosition == -1 Then ExitShort("노써머매도청"); } } if (sdate != sdate[1] and stime >= 080000) or (sdate == sdate[1] and stime >= 080000 and stime[1] < 080000) then { Tcond = true; } } // 써머타임 //--------- 진입 로직 ---------// If Tcond == true Then { if CrossUp(c,var1) Then buy(); if CrossDown(c,var1) Then sell(); } 즐거운 하루되세요 > 추우세추우종 님이 쓴 글입니다. > 제목 : 수식 수정 부탁드려요~ > 해외선물 나스닥 1분봉 기준입니다 사진에 보시는것처럼 매주 월요일마다 진입과 청산이 안되고요 휴장다음날 또한 진입과 청산이 안되네요 한번 돌려보시고 수식 수정 부탁드립니다 //써머타임 변수 var : Summer(False),Year(0); var : V1(0),V2(0),V3(0),V4(0); var: Tcond(False); //써머타임 변수 input: p(20); var1 = ma(c,20); // 써머타임 if sdate != sdate[1] Then { Year = Floor(sdate/10000); V1 = (10000 * Year) + (100 * 3) + 1; V2 = 15 - dayofweek(v1); // 3월 두번째 일요일 날짜 v3 = (10000 * Year) + (100 * 11) + 1; v4 = 8 - dayofweek(v3); // 11월 첫번째 일요일 날짜 Summer = (sdate > (10000 * Year) + (100 * 3) + v2) And (sdate < (10000 * Year) + (100 * 11) + v4); } // 써머타임 // 써머타임 3월~11월 if Summer == true then{ if (sdate != sdate[1] and stime >= 070000) or (sdate == sdate[1] and stime >= 070000 and stime[1] < 070000) then { Tcond = true; } if sdate == 20190419 then { //써머 휴일청산 if (sdate != sdate[1] and stime >= 054500) or (sdate == sdate[1] and stime >= 054500 and stime[1] < 054500) then { Tcond = false; if MarketPosition == 1 Then ExitLong("써머휴일매수청"); if MarketPosition == -1 Then ExitShort("써머휴일매도청"); } } else if sdate == 20190528 or sdate == 20190704 or sdate == 20190705 or sdate == 20190903 then { //써머 조기장 if (sdate != sdate[1] and stime >= 014500) or (sdate == sdate[1] and stime >= 014500 and stime[1] < 014500) then { Tcond = false; if MarketPosition == 1 Then ExitLong("써머조기장매수청"); if MarketPosition == -1 Then ExitShort("써머조기장매도청"); } } else { if (sdate != sdate[1] and stime >= 054500 ) or (sdate == sdate[1] and stime >= 054500 and stime[1] < 054500 ) then { Tcond = false; if MarketPosition == 1 Then ExitLong("써머매수청"); if MarketPosition == -1 Then ExitShort("써머매도청"); } } } Else { //11월~3월까지 if (sdate != sdate[1] and stime >= 080000) or (sdate == sdate[1] and stime >= 080000 and stime[1] < 080000) then { Tcond = true; } if sdate == 20190101 or sdate == 20200101 then { //노써머 휴일청산 if (sdate != sdate[1] and stime >= 064500) or (sdate == sdate[1] and stime >= 064500 and stime[1] < 064500) then { Tcond = false; if MarketPosition == 1 Then ExitLong("노써머휴일매수청"); if MarketPosition == -1 Then ExitShort("노써머휴일매도청"); } } else if sdate == 20190122 or sdate == 20190219 or sdate == 20191129 or sdate == 20191130 or sdate == 20191225 or sdate == 20200121 or sdate == 20200218 then { //노써머 조기장 if (sdate != sdate[1] and stime >= 024500) or (sdate == sdate[1] and stime >= 024500 and stime[1] < 024500) then { Tcond = false; if MarketPosition == 1 Then ExitLong("노써머조기장매수청"); if MarketPosition == -1 Then ExitShort("노써머조기장매도청"); } } else{ if (sdate != sdate[1] and stime >= 064500 ) or (sdate == sdate[1] and stime >= 064500 and stime[1] < 064500 ) then { Tcond = false; if MarketPosition == 1 Then ExitLong("노써머매수청"); if MarketPosition == -1 Then ExitShort("노써머매도청"); } } } // 써머타임 //--------- 진입 로직 ---------// If Tcond == true Then { if CrossUp(c,var1) Then buy(); if CrossDown(c,var1) Then sell(); }