커뮤니티
거래 시간대
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;