Справочник MQL5, Дата и время, TimeGMT
TimeGMT - При работе в тестере стратегий время TimeGMT() всегда равно моделируемому серверному времени TimeTradeServer().
Вот код моих стараний. Самым надежным оказался ручной метод (Первый вариант).
Полученный результат:
Все результаты кроме первого - неправильны!
Но хотелось в тесте время TimeGMT получить автоматически. Подскажите если есть такая возможность.
TimeGMT
Возвращает время GMT, которое вычисляется с учётом перехода на зимнее или летнее время по локальному времени компьютера, на котором запущен клиентский терминал. Существует 2 варианта функции.
Вызов без параметров
datetime TimeGMT(); |
Вызов с параметром типа MqlDateTime
datetime TimeGMT( |
Параметры
dt_struct
[out] Переменная типа структурыMqlDateTime.
Возвращаемое значение
Значение типаdatetime
Примечание
Если в качестве параметра была передана переменная типа структурыMqlDateTime, то она заполняется соответствующим образом.
Для организации счетчиков и таймеров высокого разрешения нужно использовать функциюGetTickCount(), которая выдает значения в миллисекундах.
При работе в тестере стратегий время TimeGMT() всегда равно моделируемому серверному времени TimeCurrent().
TimeGMT
Возвращает время GMT, которое вычисляется с учётом перехода на зимнее или летнее время по локальному времени компьютера, на котором запущен клиентский терминал. Существует 2 варианта функции.
Вызов без параметров
datetime TimeGMT(); |
Вызов с параметром типа MqlDateTime
datetime TimeGMT( |
Параметры
dt_struct
[out] Переменная типа структурыMqlDateTime.
Возвращаемое значение
Значение типаdatetime
Примечание
Если в качестве параметра была передана переменная типа структурыMqlDateTime, то она заполняется соответствующим образом.
Для организации счетчиков и таймеров высокого разрешения нужно использовать функциюGetTickCount(), которая выдает значения в миллисекундах.
При работе в тестере стратегий время TimeGMT() всегда равно моделируемому серверному времени TimeCurrent().
Вы красным выделили то что я в первой строке из справочника написал.
Но Так и не ответили как самому рассчитать Time GMT чтоб это работало в тестере стратегий.
Можете вручную задавать к времени TimeCurrent() сдвиг на нужное время, но оно будет постоянным, и без учёта перехода на летнее время
Так же странно что TimeGMTOffset() и TimeGMT() - TimeLocal() по сути одно и тоже
// TimeGMTOffset()- Возвращает текущую разницу между временем GMT и локальным временем компьютера, TimeLocal(), // в секундах с учетом перехода на зимнее или летнее время. Зависит от настроек времени на компьютере пользователя. // TimeGMTOffset() = TimeGMT() - TimeLocal()
но результат получается разный:
0 14:34:57.808 2017.03.30 00:00:00 help mql5 forum EURUSD,Daily: Второй вариант расчетов времени GMT: 21:00:00 / TimeCurrent: 00:00:00 0 14:34:57.808 2017.03.30 00:00:00 help mql5 forum EURUSD,Daily: Третий вариант расчетов времени GMT: 00:00:00 / TimeCurrent: 00:00:00
Можете вручную задавать к времени TimeCurrent() сдвиг на нужное время, но оно будет постоянным, и без учёта перехода на летнее время
Посмотрите мой представлений код, там все уже реализовано
input int Winter_standard_time_zone=2; //Standard Winter time zone (GMT +/- hour) input bool Daylight_saving_time=true; //Broker uses daylight saving time int handle=0; string vTimeGMT="",DaylightSavings=""; //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { static int sT_tiMe=0; int tiMe=0; tiMe=(int)iTime(Symbol(),PERIOD_D1,0); //--- if(tiMe-sT_tiMe>=1) { sT_tiMe=tiMe; // Первый вариант int TimeCorrection=Winter_standard_time_zone*3600 /*секунды в одном часу*/; int month=Month(); if(Daylight_saving_time && month>=4 && month<=10) { TimeCorrection=(Winter_standard_time_zone+1 /*Летом + один час*/)*3600; DaylightSavings="Летнее время"; } else DaylightSavings="Зимнее время"; vTimeGMT="Первый вариант расчетов времени GMT: "+TimeToString((int)TimeCurrent()-TimeCorrection,TIME_SECONDS) +" / TimeCurrent: "+TimeToString(TimeCurrent(),TIME_SECONDS); Print("-------------"); Print(DaylightSavings); Print(vTimeGMT); } }
Но вопрос был: как Time GMT рассчитать автоматически для тестера стратегий? В реальном времени все и так работает.
Автоматически — никак.
Только конвертировать серверное время (время котировок) к GMT с учетом указанного сдвига (нужно определить для каждого брокера) и перехода на летнее/зимнее (тоже бывает по разным правилам у разных брокеров).
Можете вручную задавать к времени TimeCurrent() сдвиг на нужное время, но оно будет постоянным, и без учёта перехода на летнее время
Дополнение к посту.
Самообман
Самообман
Спорное утверждение. Знаю точно - метод работает и не только для определения времени в тестере стратегий.
Неоднократно пользовался этим методом в МТ5 - там он работает четко и без сбоев, в МТ4 есть архитектурные отличия и работа там ведется немного по иному - но и тут вполне работает все.
Причем более универсального метода расчета я не нашел, если кто знает то пусть подскажет.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Справочник MQL5, Дата и время, TimeGMT
TimeGMT - При работе в тестере стратегий время TimeGMT() всегда равно моделируемому серверному времени TimeTradeServer().
Вот код моих стараний. Самым надежным оказался ручной метод (Первый вариант).
Полученный результат:
Все результаты кроме первого - неправильны!
Но хотелось в тесте время TimeGMT получить автоматически. Подскажите если есть такая возможность.