커뮤니티

써머시간 적용에 따른 청산

프로필 이미지
강우
2025-06-22 18:34:22
187
글번호 192000
답변완료
안녕하세요, 써머타임에 시간에 맞춰 청산 시간 수식을 만들었는데요. 아래 식으로 써머시간 미적용 시간은 오전 7시간에 정상적으로 청산이 되는데 써머시간 적용시간에는 오전 6시에 청산이 되어야 하는데 8시에 청산이 됩니다. 혹시 어떤 수식이 오류인지 알 수 있을까요? if NextBarSdate != sDate then begin DD = DayOfWeek(NextBarSdate); Year = Floor(NextBarSdate / 10000); // 써머타임 시작: 3월 둘째 일요일 V1 = (10000 * Year) + (100 * 3) + 1; V2 = 15 - DayOfWeek(V1); // 써머타임 종료: 11월 첫째 일요일 V3 = (10000 * Year) + (100 * 11) + 1; V4 = 8 - DayOfWeek(V3); summer = NextBarSdate > ((10000 * Year) + (100 * 3) + V2) and NextBarSdate < ((10000 * Year) + (100 * 11) + V4); if summer then ET = 055900; // 서머타임 청산: 오전 5:59 else ET = 065900; // 표준시간 청산: 오전 6:59 end; if NextBarStime >= ET and stime < ET then begin ExitLong("EOD_EL", AtMarket); ExitShort("EOD_ES", AtMarket); end;
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-06-23 15:06:53

안녕하세요 예스스탁입니다. 올리신 수식은 1분봉에 적용되는 내용이고 선물사에 따라서 시간에 1초가 붙는 곳도 있습니다. 당일청산함수로 발생하게 처리해 드립니다. var : dd(0),year(0),v1(0),v2(0),v3(0),v4(0),SUMMER(FalsE),ET(0); if NextBarSdate != sDate then begin DD = DayOfWeek(NextBarSdate); Year = Floor(NextBarSdate / 10000); // 써머타임 시작: 3월 둘째 일요일 V1 = (10000 * Year) + (100 * 3) + 1; V2 = 15 - DayOfWeek(V1); // 써머타임 종료: 11월 첫째 일요일 V3 = (10000 * Year) + (100 * 11) + 1; V4 = 8 - DayOfWeek(V3); summer = NextBarSdate > ((10000 * Year) + (100 * 3) + V2) and NextBarSdate < ((10000 * Year) + (100 * 11) + V4); if summer then ET = 055900; // 서머타임 청산: 오전 5:59 else ET = 065900; // 표준시간 청산: 오전 6:59 end; if ET > 0 and sDate != sDate[1] Then SetStopEndofday(ET); IF BdatE != BdatE[1] TheN SetStopEndofday(0); 즐거운 하루되세요 > 강우 님이 쓴 글입니다. > 제목 : 써머시간 적용에 따른 청산 > 안녕하세요, 써머타임에 시간에 맞춰 청산 시간 수식을 만들었는데요. 아래 식으로 써머시간 미적용 시간은 오전 7시간에 정상적으로 청산이 되는데 써머시간 적용시간에는 오전 6시에 청산이 되어야 하는데 8시에 청산이 됩니다. 혹시 어떤 수식이 오류인지 알 수 있을까요? if NextBarSdate != sDate then begin DD = DayOfWeek(NextBarSdate); Year = Floor(NextBarSdate / 10000); // 써머타임 시작: 3월 둘째 일요일 V1 = (10000 * Year) + (100 * 3) + 1; V2 = 15 - DayOfWeek(V1); // 써머타임 종료: 11월 첫째 일요일 V3 = (10000 * Year) + (100 * 11) + 1; V4 = 8 - DayOfWeek(V3); summer = NextBarSdate > ((10000 * Year) + (100 * 3) + V2) and NextBarSdate < ((10000 * Year) + (100 * 11) + V4); if summer then ET = 055900; // 서머타임 청산: 오전 5:59 else ET = 065900; // 표준시간 청산: 오전 6:59 end; if NextBarStime >= ET and stime < ET then begin ExitLong("EOD_EL", AtMarket); ExitShort("EOD_ES", AtMarket); end;