커뮤니티

거래 시간대

프로필 이미지
gap
2018-08-20 22:12:12
125
글번호 121481
답변완료
안녕하세요. CME 거래소 종목을 대상으로 미국 장이 열리는 시간 이전에 청산했다가 장이 열리고 30분이 지난 후부터 다시 거래를 시작하는 매매 시간 로직을 추가하고자 합니다. (※ 서머타임 시: 미장 개시는 오후 10시 30분, 동절기: 미장 개시는 오후 11시 30분) 현재 로직은 오후 8시부터 익일 오전 5시까지 거래하되 5시 15분 이전에 포지션을 정리하는 방식입니다. 아래 로직을 바탕으로 수정을 해주시면 감사하겠습니다. Inputs: SSTIME(200000), EETIME(050000), XXTIME(051430); Var: MP(0); MP = MarketPosition; //--------- 써머타임 체크 로직 ---------// Vars: ST(0), ET(0), Year(0); 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]; //------- 매매 시간대 -------// Var: TimeCond(False); If (sDate != sDate[1] and sTime >= SSTIME) or (sDate == sDate[1] and sTime >= SSTIME and sTime[1] < SSTIME) Then Begin TimeCond = True; End; If (sDate != sDate[1] and sTime >= EETIME) or (sDate == sDate[1] and sTime >= EETIME and sTime[1] < EETIME) Then Begin TimeCond = False; End; If (sDate != sDate[1] and sTime >= XXTIME) or (sDate == sDate[1] and sTime >= XXTIME and sTime[1] < XXTIME) Then Begin If MP == 1 Then ExitLong(); If MP == -1 Then ExitShort(); End; //--------- 진입 로직 ---------// If TimeCond Then Begin ~~~~~ 중략 ~~~~~ End;
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2018-08-21 13:45:53

안녕하세요 예스스탁입니다. Inputs: SSTIME(200000), EETIME(050000), XXTIME(051430); Var: MP(0),SSTIME1(0),XXTIME1(0); MP = MarketPosition; //--------- 써머타임 체크 로직 ---------// Vars: ST(0), ET(0), Year(0); 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; // 써머타임 적용 시, 장 종료 시간 SSTIME1 = 230000; XXTIME1 = 220000; End Else Begin ST = 080000; // 장 시작 시간 ET = 070000; // 장 종료 시간 SSTIME1 = 0; XXTIME1 = 230000; End; CONDITION1 = ( IntPortion(Time / 10000) > IntPortion(ET / 10000) And IntPortion(Time[1] / 10000) <= IntPortion(ET / 10000) ) Or ST <> ST[1]; //------- 매매 시간대 -------// Var: TimeCond(False); If (sDate != sDate[1] and sTime >= SSTIME) or (sDate == sDate[1] and sTime >= SSTIME and sTime[1] < SSTIME) Then Begin TimeCond = True; End; If (sDate != sDate[1] and sTime >= SSTIME1) or (sDate == sDate[1] and sTime >= SSTIME1 and sTime[1] < SSTIME1) Then Begin TimeCond = True; End; If (sDate != sDate[1] and sTime >= EETIME) or (sDate == sDate[1] and sTime >= EETIME and sTime[1] < EETIME) Then Begin TimeCond = False; End; If (sDate != sDate[1] and sTime >= XXTIME) or (sDate == sDate[1] and sTime >= XXTIME and sTime[1] < XXTIME) Then Begin If MP == 1 Then ExitLong(); If MP == -1 Then ExitShort(); End; If (sDate != sDate[1] and sTime >= XXTIME1) or (sDate == sDate[1] and sTime >= XXTIME1 and sTime[1] < XXTIME1) Then Begin TimeCond = false; If MP == 1 Then ExitLong(); If MP == -1 Then ExitShort(); End; //--------- 진입 로직 ---------// If TimeCond Then Begin ~~~~~ 중략 ~~~~~ End; 즐거운 하루되세요 > gap 님이 쓴 글입니다. > 제목 : 거래 시간대 > 안녕하세요. CME 거래소 종목을 대상으로 미국 장이 열리는 시간 이전에 청산했다가 장이 열리고 30분이 지난 후부터 다시 거래를 시작하는 매매 시간 로직을 추가하고자 합니다. (※ 서머타임 시: 미장 개시는 오후 10시 30분, 동절기: 미장 개시는 오후 11시 30분) 현재 로직은 오후 8시부터 익일 오전 5시까지 거래하되 5시 15분 이전에 포지션을 정리하는 방식입니다. 아래 로직을 바탕으로 수정을 해주시면 감사하겠습니다. Inputs: SSTIME(200000), EETIME(050000), XXTIME(051430); Var: MP(0); MP = MarketPosition; //--------- 써머타임 체크 로직 ---------// Vars: ST(0), ET(0), Year(0); 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]; //------- 매매 시간대 -------// Var: TimeCond(False); If (sDate != sDate[1] and sTime >= SSTIME) or (sDate == sDate[1] and sTime >= SSTIME and sTime[1] < SSTIME) Then Begin TimeCond = True; End; If (sDate != sDate[1] and sTime >= EETIME) or (sDate == sDate[1] and sTime >= EETIME and sTime[1] < EETIME) Then Begin TimeCond = False; End; If (sDate != sDate[1] and sTime >= XXTIME) or (sDate == sDate[1] and sTime >= XXTIME and sTime[1] < XXTIME) Then Begin If MP == 1 Then ExitLong(); If MP == -1 Then ExitShort(); End; //--------- 진입 로직 ---------// If TimeCond Then Begin ~~~~~ 중략 ~~~~~ End;