Летнее/зимнее время.

При изучении внутридневной динамики цен можно "наступить на грабли", связанные с переходом на летнее/зимнее время. Т.к. даты перехода не совпадают в различных странах, то стоит определиться, каким образом обрабатывать этот переход.

Полезный ресурс по временным зонам : wwp.greenwichmeantime.com .

Как правило, дата-вендор подает данные в определенной временной зоне, например IQfeed.net делает это по американскому восточному времени EST, соответственно переход на DST будет по правилам, принятым в США. В таком случае, при анализе европейских фьючерсов необходимо учитывать смещение при переходе на летнее/зимнее время в Европе.

Ниже функция WLD, которая определяет, используется ли на текущем баре DST:

Function DST_EU(date: integer) : Boolean;

Begin

// check DST for Europe , DST dates are hard-coded

Result:=false;

if ((date>19990327) and (date<19991031)) or ((date>20000325) and (date<20001029)) or ((date>20010324) and (date<20011028)) or ((date>20020330) and (date<20021027)) or ((date>20030329) and (date<20031026)) or ((date>20040327) and (date<20041031)) or ((date>20050326) and (date<20051030)) or ((date>20060325) and (date<20061029)) or ((date>20070324) and (date<20071028)) or ((date>20080329) and (date<20081026)) or ((date>20090328) and (date<20091025)) or ((date>20100327) and (date<20101031)) or ((date>20110326) and (date<20111030)) then Result:=true;

End;

Если наш датавендор даёт данные по GMT, где перехода на летнее/зимнее время нет, например - Forexite, то можно воспользоваться следующей функцией:

Function DST_USA(date: integer) : Boolean;

Begin

// check DST for USE, DST dates are hard-coded here

Result:=false;

if ((date>19990403) and (date<19991031)) or ((date>20000401) and (date<20000129)) or ((date>20010331) and (date<20011028)) or ((date>20020406) and (date<20021027)) or ((date>20030405) and (date<20031026)) or ((date>20040403) and (date<20041031)) or ((date>20050402) and (date<20051030)) or ((date>20060401) and (date<20061029)) or ((date>20070310) and (date<20071104)) or ((date>20080308) and (date<20081102)) or ((date>20090307) and (date<20091101)) or ((date>20100313) and (date<20101107)) or ((date>20110312) and (date<20111106)) then Result:=true;

End;