Время в MT

From Shmuma

Jump to: navigation, search


При работе со временем, в MetaTrader существуют особенности, которые нужно иметь в виду.

MT4

В MetaTrader4 существует две функции определения текущего времени:

TimeCurrent возвращает текущий timestamp сервера (количество секунд с 1-01-1970). Так как сервер настраивает брокер, который может находится фиг знает где, это время может быть любым. Вообще. Например, для Alpari это GMT+2, что соответствует Франкфуртскому времени.

TimeLocal, по задумке авторов, должна возвращать локальное системное время. Небольшой эксперимент показывает что это так и есть. Однако, при тестировании, функция TimeLocal возвращает моделируемое время сервера. Что сводит на нет пользу от этой функции. Можно, конечно, проверять, работает ли эксперт под оптимизатором или нет, и вводить поправки, но это слишком извращенно и ведет к сложным логическим ошибкам. В общем, плохо.

Но даже в случае, если мы работаем реальном времени, эти две функции ведут себя очень странно. Вот, например, значения, возвращаемые следующими выражениями:

TimeHour(TimeCurrent ()) = 18
TimeHour(TimeLocal ()) = 20
(TimeLocal() - TimeCurrent()) / 3600 = 1

Как нетрудно заметить, TimeHour выполняет еще черт знает какие преобразования внутри (скорее всего, компенсируя DST), в результате получаем фигню.

Другого способа, как вводить в эксперта поправочные коэффициенты я не нашел.

MT5

В MT5 сделали более по уму. Добавили еще две функции и исправили семантику TimeLocal (по крайней мере, убрали приписку о совпадении значения с TimeCurrent при тестировании, но я не проверял).

Новые функции:

  • TimeTradeServer — то же, что и TimeCurrent, но вычисляется локально. Скорее всего нужен для периодов недоступности сервера (и выходных, когда рынок закрыт и тики не приходят)
  • TimeGMT — возвращает время GMT

Также появилась возможность узнать смещение локального времени компьютера относительно GMT (TimeGMTOffset). MT5 рулит, вот что.

Personal tools