커뮤니티

58847

프로필 이미지
gap
2018-08-01 20:23:57
174
글번호 121071
답변완료
안녕하세요. 문의글 58847번의 연장입니다. 알려주신 지표로는 거래시간(20:00 ~ 익일 05:00)이 제대로 표시가 됩니다. 그런데, 막상 시스템 수식에서는 20시가 아닌 자정 이후부터 거래가 시작이 됩니다. 아래는 테스트를 위해서 만든 간단한 시스템 수식입니다. (컴파일 / 실행 가능) 대부분의 진입로직을 제외하고는 거의 알려주신 그대로 적용했습니다. //--------- 미국 CME 거래소 매매용 ---------// Inputs: SSTIME(200000), EETIME(050000); Vars: ST(0), ET(0), Year(0), TimeCond(False); Vars: MP(0); Inputs: Exit_L(40); MP = MarketPosition; //--------- 써머타임 체크 로직 ---------// Year = Floor(sDate / 10000); Var18 = DayofWeek( (10000 * Year) + (100 * 3) + 1 ); If Var18 == 0 Then Value98 = 8; Else Value98 = 15 - Var18; // 3월 두번째 일요일 날짜 Var20 = DayofWeek( (10000 * Year) + (100 * 11) + 1 ); If Var20 == 0 Then Value99 = 1; Else Value99 = 8 - Var20; // 11월 첫번째 일요일 날짜 If sDate > (10000 * Year) + (100 * 3) + Value98 And sDate < ( 10000 * Year) + (100 * 11) + Value99 Then Begin ST = 070000; // 써머타임 적용 시, 장 시작 시간 ET = 060000; // 써머타임 적용 시, 장 종료 시간 End Else Begin ST = 080000; // 장 시작 시간 ET = 070000; // 장 종료 시간 End; //--------- 시간과 봉 계산 ---------// CONDITION1 = ( IntPortion(Time / 10000) > IntPortion(ET / 10000) And IntPortion(Time[1] / 10000) <= IntPortion(ET / 10000) ) Or ST <> ST[1]; //------- 매매 시간대 -------// If (sDate != sDate[1] and sTime >= SSTIME) or (sDate == sDate[1] and sTime >= SSTIME and sTime[1] < SSTIME) Then Begin //MessageLog("SSTIME @TimeLogic = %.f", SSTIME); TimeCond = True; End; If (sDate != sDate[1] and sTime >= EETIME) or (sDate == sDate[1] and sTime >= EETIME and sTime[1] < EETIME) Then Begin //MessageLog("EETIME @TimeLogic = %.f", EETIME); TimeCond = False; End; Input : shortPeriod(5), longPeriod(20); value1 = ma(C, shortPeriod); value2 = ma(C, longPeriod); //--------- 진입 로직 ---------// If TimeCond Then Begin If CrossUp(Value1, Value2) Then Buy(); If CrossDown(Value1, Value2) Then Sell(); End; //--------- 손절 로직 ---------// //SetStopLoss(Exit_L * TickSize * CurrentContracts, PointStop); SetStopLoss(Exit_L * PriceScale , PointStop); // 장 마감 전 모든 포지션 강제청산 If (MP <> 0) then SetStopEndofday(051430);
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2018-08-02 14:05:01

안녕하세요 예스스탁입니다. If (MP <> 0) then SetStopEndofday(051430); 하단의 위 문장을 지우시면 됩니다. SetStopEndofday는 당일청산함수로 지정한 시간에 청산후에 당일은 진입을 막기 때문에 밤 0시 까지 진입이 없었습니다. 이전답변에 지우고 답변드렸어야 했는데 같이 첨부가 됐습니다. 수정해 드립니다. //--------- 미국 CME 거래소 매매용 ---------// Inputs: SSTIME(200000), EETIME(050000); Vars: ST(0), ET(0), Year(0), TimeCond(False); Vars: MP(0); Inputs: Exit_L(40); MP = MarketPosition; //--------- 써머타임 체크 로직 ---------// Year = Floor(sDate / 10000); Var18 = DayofWeek( (10000 * Year) + (100 * 3) + 1 ); If Var18 == 0 Then Value98 = 8; Else Value98 = 15 - Var18; // 3월 두번째 일요일 날짜 Var20 = DayofWeek( (10000 * Year) + (100 * 11) + 1 ); If Var20 == 0 Then Value99 = 1; Else Value99 = 8 - Var20; // 11월 첫번째 일요일 날짜 If sDate > (10000 * Year) + (100 * 3) + Value98 And sDate < ( 10000 * Year) + (100 * 11) + Value99 Then Begin ST = 070000; // 써머타임 적용 시, 장 시작 시간 ET = 060000; // 써머타임 적용 시, 장 종료 시간 End Else Begin ST = 080000; // 장 시작 시간 ET = 070000; // 장 종료 시간 End; //--------- 시간과 봉 계산 ---------// CONDITION1 = ( IntPortion(Time / 10000) > IntPortion(ET / 10000) And IntPortion(Time[1] / 10000) <= IntPortion(ET / 10000) ) Or ST <> ST[1]; //------- 매매 시간대 -------// If (sDate != sDate[1] and sTime >= SSTIME) or (sDate == sDate[1] and sTime >= SSTIME and sTime[1] < SSTIME) Then Begin //MessageLog("SSTIME @TimeLogic = %.f", SSTIME); TimeCond = True; End; If (sDate != sDate[1] and sTime >= EETIME) or (sDate == sDate[1] and sTime >= EETIME and sTime[1] < EETIME) Then Begin //MessageLog("EETIME @TimeLogic = %.f", EETIME); TimeCond = False; if MarketPosition == 1 Then ExitLong(); if MarketPosition == -1 Then ExitShort(); End; Input : shortPeriod(5), longPeriod(20); value1 = ma(C, shortPeriod); value2 = ma(C, longPeriod); //--------- 진입 로직 ---------// If TimeCond Then Begin If CrossUp(Value1, Value2) Then Buy(); If CrossDown(Value1, Value2) Then Sell(); End; //--------- 손절 로직 ---------// //SetStopLoss(Exit_L * TickSize * CurrentContracts, PointStop); SetStopLoss(Exit_L * PriceScale , PointStop); 즐거운 하루되세요 > gap 님이 쓴 글입니다. > 제목 : 58847 > 안녕하세요. 문의글 58847번의 연장입니다. 알려주신 지표로는 거래시간(20:00 ~ 익일 05:00)이 제대로 표시가 됩니다. 그런데, 막상 시스템 수식에서는 20시가 아닌 자정 이후부터 거래가 시작이 됩니다. 아래는 테스트를 위해서 만든 간단한 시스템 수식입니다. (컴파일 / 실행 가능) 대부분의 진입로직을 제외하고는 거의 알려주신 그대로 적용했습니다. //--------- 미국 CME 거래소 매매용 ---------// Inputs: SSTIME(200000), EETIME(050000); Vars: ST(0), ET(0), Year(0), TimeCond(False); Vars: MP(0); Inputs: Exit_L(40); MP = MarketPosition; //--------- 써머타임 체크 로직 ---------// Year = Floor(sDate / 10000); Var18 = DayofWeek( (10000 * Year) + (100 * 3) + 1 ); If Var18 == 0 Then Value98 = 8; Else Value98 = 15 - Var18; // 3월 두번째 일요일 날짜 Var20 = DayofWeek( (10000 * Year) + (100 * 11) + 1 ); If Var20 == 0 Then Value99 = 1; Else Value99 = 8 - Var20; // 11월 첫번째 일요일 날짜 If sDate > (10000 * Year) + (100 * 3) + Value98 And sDate < ( 10000 * Year) + (100 * 11) + Value99 Then Begin ST = 070000; // 써머타임 적용 시, 장 시작 시간 ET = 060000; // 써머타임 적용 시, 장 종료 시간 End Else Begin ST = 080000; // 장 시작 시간 ET = 070000; // 장 종료 시간 End; //--------- 시간과 봉 계산 ---------// CONDITION1 = ( IntPortion(Time / 10000) > IntPortion(ET / 10000) And IntPortion(Time[1] / 10000) <= IntPortion(ET / 10000) ) Or ST <> ST[1]; //------- 매매 시간대 -------// If (sDate != sDate[1] and sTime >= SSTIME) or (sDate == sDate[1] and sTime >= SSTIME and sTime[1] < SSTIME) Then Begin //MessageLog("SSTIME @TimeLogic = %.f", SSTIME); TimeCond = True; End; If (sDate != sDate[1] and sTime >= EETIME) or (sDate == sDate[1] and sTime >= EETIME and sTime[1] < EETIME) Then Begin //MessageLog("EETIME @TimeLogic = %.f", EETIME); TimeCond = False; End; Input : shortPeriod(5), longPeriod(20); value1 = ma(C, shortPeriod); value2 = ma(C, longPeriod); //--------- 진입 로직 ---------// If TimeCond Then Begin If CrossUp(Value1, Value2) Then Buy(); If CrossDown(Value1, Value2) Then Sell(); End; //--------- 손절 로직 ---------// //SetStopLoss(Exit_L * TickSize * CurrentContracts, PointStop); SetStopLoss(Exit_L * PriceScale , PointStop); // 장 마감 전 모든 포지션 강제청산 If (MP <> 0) then SetStopEndofday(051430);