Хочу в MQL4 функцию AccountShiftGMT()

 
Время выхода новостей публикуют обычно по Гринвичу (GMT). Допустим советник открывает отложенные ордера перед выходом новостей. Параметр "StartTime" задает время по Гринвичу начала установки отложенных ордеров. Для терминала Альпари летом разница с Гринвичем составляет 2 часа. Для терминала LiteForex разница с Гринвичем летом 3 часа. Чтобы использовать такой советник с любым терминалом и не корректировать время в параметре "StartTime" в MQL4 нужна функция типа AccountShiftGMT(), которая возращает разницу времени терминала с Гринвичем.
 

Я использую такую конструкцию:

if (StringFind(AccountCompany(), "Straighthold")>=0) OffSetHour=1;
В данном случае переменная OffSetHour содержит разницу между временем альпари и лайтами.
 

Можно сделать внешнюю переменную в которую внести разность между временем ДЦ и GMT. А можно посмотреть ветку 'Адрес переменной в MQL4', там stringo привел пример получения целой структуры (в конце страницы) , поковыряв который можно сделать функцию возвращающую требуемую разницу.

 
Talex:

Можно сделать внешнюю переменную в которую внести разность между временем ДЦ и GMT. А можно посмотреть ветку 'Адрес переменной в MQL4', там stringo привел пример получения целой структуры (в конце страницы) , поковыряв который можно сделать функцию возвращающую требуемую разницу.

Там идет работа с локальным и системным временем терминала. А человек говорит о времени сервера - это несколько разные вещи.

Присоединяюсь к запросу. Такая функция будет весьма полезна.

 
bstone:

Присоединяюсь к запросу. Такая функция будет весьма полезна.


Присоединяюсь. Очень нужная функция.

Отдельно нужно заметить, что есть ДЦ, кот. смещают серверное время вслед за зимним/летним, а есть ДЦ, кот. этого не делают. В результате получается, что летом Нью-Йорк открывается в 16-20 по МСК, а зимой в 17-20 (по серверному). Если в советнике производится анализ, привязанный ко времени, то зимой и летом он будет работать по-разному.

 
bstone:
Talex:

Можно сделать внешнюю переменную в которую внести разность между временем ДЦ и GMT. А можно посмотреть ветку 'Адрес переменной в MQL4', там stringo привел пример получения целой структуры (в конце страницы) , поковыряв который можно сделать функцию возвращающую требуемую разницу.

Там идет работа с локальным и системным временем терминала. А человек говорит о времени сервера - это несколько разные вещи.

Присоединяюсь к запросу. Такая функция будет весьма полезна.


Так системное время (получить можно функцией winAPI - GetSystemTime) и возвращает время по UTC(GMT) (если системные настройки не отбалды) и сравнить с TimeCurrent, разность между ними и есть искомая.

Вот можно почитать http://www.firststeps.ru/mfc/winapi/r.php?142

 
Talex:


Так системное время (получить можно функцией winAPI - GetSystemTime) и возвращает время по UTC(GMT) (если системные настройки не отбалды) и сравнить с TimeCurrent, разность между ними и есть искомая.

Вот можно почитать http://www.firststeps.ru/mfc/winapi/r.php?142


Я как раз говорил про "если системные настройки не отбалды".
 
bstone:
Я как раз говорил про "если системные настройки не отбалды".

Еще не встречал людей(компьютеры), где были бы системные настройки от балды. Хотя не исключаю и такое. Выбирать все равно вам. Сделать самому нужную функцию или просить об этом разработчиков. Они подобные просьбы выполняют с неохотой (если вообще выполняют). Я лишь показал как это можно сделать самому.
 
Давно и успешно использую сдвиг по времени.
Сначала
extern int GMT.Shift = 2;
extern int StartHour = 8;
.........
int my.StartHour=StartHour-GMT.Shift;

Попробуйте кто не верит :) аналогично для всех функций которые на конкретный час ссылаются - просто отнимаю сдвиг по тайм-зоне.
Если время переходит через 00:00 приходится ухищрения дописывать, вроде
if(my.ShartHour<0) my.StartHour=my.StartHour+23;
Если больше 24, отнять 24.
 
Talex:

Еще не встречал людей(компьютеры), где были бы системные настройки от балды. Хотя не исключаю и такое. Выбирать все равно вам. Сделать самому нужную функцию или просить об этом разработчиков. Они подобные просьбы выполняют с неохотой (если вообще выполняют). Я лишь показал как это можно сделать самому.

Предложенный вариант со сравнением TimeCurrent() и GetSystemTime() весьма ненадежен, т.к. TimeCurrent() зависит от момента поступления последнего тика с сервера. При отсутствии связи с сервером или при дисконнектах, TimeCurrent() возвращает неактуальное время. И поэтому абсолютно корректную реализацию обсуждаемой функции могут сделать только разработчики. Поэтому их и просят.
 
bstone

а в чем сложность использования вышеприведенной функции? конечно, я за то чтобы в МТ4 вообще было только время по гринвичу или чтобы была возможность его использовать. но ведь можно и обойтись. ..
Причина обращения: