안녕하세요,
써머타임에 시간에 맞춰 청산 시간 수식을 만들었는데요.
아래 식으로
써머시간 미적용 시간은 오전 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;