ой, это я похоже в торопях кинул сюда все; исправил; суть в том, что не работает, м.б. структуры времени для MQL4 и WinAPI не совпадают или что?
Даже при запуске MT4 с правами администратора в итоге:
TimeCurrent = 2017.08.04 18:48:17
LocalTime = 2017.08.04 18:48:11
Да, действительно:
1) не совпадают структуры а) MqlDateTime и б) аргумент функции SetSystemTime
2) в отредактированном варианте все работает, но только при запуске MetaTrader 4 с правами администратора.
Рабочий вариант:
#property description "Скрипт устанавливает локальное время по торговому серверу" #property version "0.00" //!!!BETA!!! #property script_show_inputs #property strict struct WindowsSystemTime { short wYear; short wMonth; short wDayOfWeek; short wDay; short wHour; short wMinute; short wSecond; short wMilliseconds; } TradeServerTime; #import "kernel32.dll" bool SetSystemTime(WindowsSystemTime& dtWindowsStruct); #import input int iDeltaHours = -3; //Подбирается по часовым поясам int OnStart() { bool bSetSystemTimeResult=false; datetime dtBeforeScriptTime=TimeLocal(); MqlDateTime dtStruct; TimeToStruct(TimeCurrent()+3600*iDeltaHours, dtStruct); TradeServerTime.wYear = short(dtStruct.year); TradeServerTime.wMonth = short(dtStruct.mon); TradeServerTime.wDayOfWeek = short(dtStruct.day_of_week); TradeServerTime.wDay = short(dtStruct.day); TradeServerTime.wHour = short(dtStruct.hour); TradeServerTime.wMinute = short(dtStruct.min); TradeServerTime.wSecond = short(dtStruct.sec); TradeServerTime.wMilliseconds = 0; bSetSystemTimeResult=SetSystemTime(TradeServerTime); //вызов функции из kernel32.dll MessageBox(StringFormat("BeforeScriptTime\t\t= %s\nTimeCurrent\t\t= %s\nLocalTime\t\t\t= %s", TimeToString(dtBeforeScriptTime, TIME_DATE|TIME_MINUTES|TIME_SECONDS), TimeToString(TimeCurrent(), TIME_DATE|TIME_MINUTES|TIME_SECONDS), TimeToString(TimeLocal(), TIME_DATE|TIME_MINUTES|TIME_SECONDS)), NULL, MB_ICONASTERISK); return INIT_SUCCEEDED; }
Да, действительно:
1) не совпадают структуры а) MqlDateTime и б) аргумент функции SetSystemTime
2) в отредактированном варианте все работает, но только при запуске MetaTrader 4 с правами администратора.
Рабочий вариант:
Полезная вещь!
А на MT5 будет работать?
Полезная вещь!
А на MT5 будет работать?
Практически наверняка, ну, Вы попробуйте, м.б., что-то модифицировать надо немножко.
Скорее всего, для любопытства и саморазвития, погодя сделаю сам, хотя это все надо в конечном итоге засовывать в свой вспомогательный советник.
Практически наверняка, ну, Вы попробуйте, м.б., что-то модифицировать надо немножко.
Скорее всего, для любопытства и саморазвития, погодя сделаю сам, хотя это все надо в конечном итоге засовывать в свой вспомогательный советник.
Пробовал в MT5 - синхронизации нет - получил такую табличку:
Тики от сервера редки, вот и разница
Тики от сервера редки, вот и разница
Не наблюдаю - вижу тики чаще чем раз в секунду, а разница остается.
Не наблюдаю - вижу тики чаще чем раз в секунду, а разница остается.
в настройках винды убери синхронизацию времени. Если винда в виртуалке, то и на хост машине тоже
вообще это ЗЛО - часто подкручивать часы невесть от какого сигнала с какой задержкой..
системный NTP правильно настройте чтобы часики тикали равномерно и синхронно с серверами времени, будет счастье: часы реального времени будут отличаться от серверных на разницу GMT, метки времени в тиках будут отличаться от часов на "накладные задержки" (время путешествия тика от генерации до приёма на вашей стороне, это можно будет замерить)
в настройках винды убери синхронизацию времени. Если винда в виртуалке, то и на хост машине тоже
вообще это ЗЛО - часто подкручивать часы невесть от какого сигнала с какой задержкой..
системный NTP правильно настройте чтобы часики тикали равномерно и синхронно с серверами времени, будет счастье: часы реального времени будут отличаться от серверных на разницу GMT, метки времени в тиках будут отличаться от часов на "накладные задержки" (время путешествия тика от генерации до приёма на вашей стороне, это можно будет замерить)
Синхронизация отключена, конечно.
Часто подкручивать не хочу - нормальный сервер времени по Москве, что б работал и учитывал местные причуды перехода на зиму лету, найти не могу.
Понятно, что сверх точной синхронизации не будет, но меня устроит лаг в 1,5 секунды.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть желание по ряду причин синхронизировать время в Windows по времени торгового сервера.
Можно ли это как-то сделать, обойдясь только средствами MQL4.
Пробую вот такой вариант, но не срабатывает: