Время в MT
From Shmuma
При работе со временем, в 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 рулит, вот что.