커뮤니티
58847
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);