Как найти GMT - сдвиг торгового сервера ? Кто что подскажет ?

 

Всех приветствую.

Такая задача - необходимо найти GMT-сдвиг котировок торгового сервера.  Разные дц работают с разным сдвигом, поэтому при определении паттернов на старших таймфреймах получается существенная разница.

Когда терминал получает тики, проблема решается сравнением время тика с текущим GMT-временем (хотя, в тестере стратегий здесь получается крайне неприятно).  А вот что делать во время функции инициализации, которая может быть запущена в выходные, перед торговой сессией ? В МТ5 - все нормально проходит, там выдается реальное текущее время торгового сервера. Но, блин, мало какие ДЦ работают с МТ5 на реале, приходится писать в МТ4... А тут и проблема...  

Запрашиваем время последней котировки - получаем конец пятницы. Запрашиваем GMT - получаем конец воскресенья. Как посчитать GMT-сдвиг котировок ?

Что предложите, коллеги ?

 
Laryx:

Всех приветствую.

Такая задача - необходимо найти GMT-сдвиг котировок торгового сервера.  Разные дц работают с разным сдвигом, поэтому при определении паттернов на старших таймфреймах получается существенная разница.

Когда терминал получает тики, проблема решается сравнением время тика с текущим GMT-временем (хотя, в тестере стратегий здесь получается крайне неприятно).  А вот что делать во время функции инициализации, которая может быть запущена в выходные, перед торговой сессией ? В МТ5 - все нормально проходит, там выдается реальное текущее время торгового сервера. Но, блин, мало какие ДЦ работают с МТ5 на реале, приходится писать в МТ4... А тут и проблема...  

Запрашиваем время последней котировки - получаем конец пятницы. Запрашиваем GMT - получаем конец воскресенья. Как посчитать GMT-сдвиг котировок ?

Что предложите, коллеги ?

int  TimeGMTOffset()
.
 
pako: int  TimeGMTOffset()
.
Увы, не годится. Эта функция возвращает сдвиг между локальным временем компьютера и GMT. А нужен сдвиг между торговым сервером и GMT.
 
papaklass:

Посмотрите индикатор https://www.mql5.com/ru/code/11341

Там есть время терминала, время компьютера, время GTM.

Все верно. Но, при этом, получить разницу между временем сервера и ГМТ - невозможно. В пятницу вечером, скажем, на Альпари этот индикатор покажет "Время сервера пятница 23:59, ГМТ: пятница 21:59" - стало быть, сдвиг +2. А в воскресенье вечером этот индикатор покажет "Время сервера пятница 23:59, ГМТ: воскресенье 21:59" - стало быть сдвиг -48 часов.

Проблема в том, что "текущее время сервера" в МТ4 берется из последней котировки. Если котировки не идут - время сервера как бы "останавливается". А ГМТ - идет.

Этот вопрос решен в МТ5, там есть прямо время сервера, которое идет и в выходные, соответственно, сдвиг котировок посчитать можно легко. Но МТ5 недостаточно распространен.

А вот что делать на МТ4 ?

 

Пришлось извращаться...

Сделал функцию OnInit() пустой, а инициализацию провел на первом тике, когда ясно, какое именно время было на сервере... А обработку тиков - делаю уже со второго тика...

Все-таки насколько в МТ5 лучше сделано...

 
Laryx:

Пришлось извращаться...

Сделал функцию OnInit() пустой, а инициализацию провел на первом тике, когда ясно, какое именно время было на сервере... А обработку тиков - делаю уже со второго тика...

Все-таки насколько в МТ5 лучше сделано...

Например можно сделать инициализацию не от первого котировочного тика  а от тика таймера...

причем такой метод годиться  как и в мт4 так и в мт5

посмотрите этот код , он не даст разницу от GMT но можно поюзать идею   https://www.mql5.com/ru/code/11932

возьмите время своей машины за базу ( Вы ведь знаете какой сдвиг у Вас от GMT)   - далее дело техники что бы найти  сдвиг сервера от GMT

YZ_Summer_Time
YZ_Summer_Time
  • голосов: 12
  • 2014.10.06
  • Yuriy Zaytsev
  • www.mql5.com
Проверка даты на принадлежность к зимнему или летнему времени, код был разработан для отладки новостных событий.
 
YuraZ:

Например можно сделать инициализацию не от первого котировочного тика  а от тика таймера...

причем такой метод годиться  как и в мт4 так и в мт5

посмотрите этот код , он не даст разницу от GMT но можно поюзать идею   https://www.mql5.com/ru/code/11932

возьмите время своей машины за базу ( Вы ведь знаете какой сдвиг у Вас от GMT)   - далее дело техники что бы найти  сдвиг сервера от GMT

Да нееет... В том-то и дело, что в МТ4 время сервера - это время последнего тика. Все. Точка. Серверное время после этого "как бы замирает".  И, получается, что сдвиг этого момента относительно локального времени (или относительно ГМТ) - "растягивается" (ГМТ-то идет дальше).

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

Нет, единственная возможность для МТ4 - это "отложенная инициализация" - на первом тике.

 
Laryx:

Нет, единственная возможность для МТ4 - это "отложенная инициализация" - на первом тике.

Это можно делать один раз для каждого брокера - сразу после успешной инициализации создавать глобальную переменную с найденным сдвигом.
А потом просто ее читать. 

Кроме того, это даст возможность задавать сдвиг вручную (путем создания нужной гл. переменной). 

Причина обращения: