WinAPI: синхронизация времени

 

Неожиданно понял, что ещё мне очень нужно от WinAPI.

У меня программа работает с API биржи, и время нужно поддерживать точным. Автоматом синхронизация происходит даже не каждые 24 часа, а у меня за это время разница со временем сервера биржи выходит за 2 сек.

Кроме того, синхронизацию нужно производить вне некоторого окна, в "тихое" время, когда не идёт процесс.

Так что в ближайшие дни собираюсь заморочиться. Возможно, это будет просто, я ещё не углублялся. Получение локального адреса через WinAPI было очень сложным.

Если есть что сказать, велком. Да, речь не о прямой работе с серверами времени, а о пинке системной функции Windows. С WinAPI проблема не в написании кода, а в поиске нужной функции. Их там тысячи, и они неочевидны по названиям. Находятся только по подсказкам экспертов.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2024.07.06 14:24

Серверная часть MT5 автоматически сама синхронизируется по времени или это зависит исключительно от настроек ОС?

Если первое, то как синхронизировать удаленную машину со временем торгового сервера?


Мне рекомендовали следующие программы для автоматической синхронизации.


По первой ссылке программа используется астрономами (может обновлять через GPS и аналоги).

Показывает, что локальное время смещается на шесть миллисекунд каждые пять минут.

 

Как насчет такого - включить службу времени (w32tm), настроить для неё задачу в планировщике с запуском по любому требуемому расписанию:

w32tm /resync /force
W32tm – управление службой времени Windows.
  • Белый Александр Email: ab@ab57.ru
  • ab57.ru
Команда W32TM – управление службой времени в операционных системах семейства Windows.
 
fxsaber #:

Спасибо. Внешняя программа тоже вариант. Если часто синхронизировать, миллисекундные скачки времени не скажутся на торговых процессах. Правда могут забанить при долгой работе. Было у меня такое.

Программами можно заняться сейчас, а WinAPI всё же буду смотреть.

 
Stanislav Korotky #:

Как насчет такого - включить службу времени (w32tm), настроить для неё задачу в планировщике с запуском по любому требуемому расписанию:

Тоже отличный вариант. Спасибо.

 

Сравнил известные мне сервера времени.

ru.pool.ntp.org, time.nist.gov, 0.openwrt.pool.ntp.org, 1.openwrt.pool.ntp.org показывают одинаково.

2.openwrt.pool.ntp.org, 3.openwrt.pool.ntp.org, time.windows.com отличаются на +- 8-11 мс.

 

Настроил службу времени. Думаю, системной функциональности достаточно, не стоит городить свои костыли.

Под админом дал команды

w32tm /register
sc start w32time
w32tm /config /syncfromflags:manual /manualpeerlist:"ru.pool.ntp.org,0x9 time.nist.gov,0x9 0.openwrt.pool.ntp.org,0x9 1.openwrt.pool.ntp.org,0x9" /update

В реестре HKLM\System\CurrentControlSet\Services\w32time в подветках поправил переменные и сохранил в экспорт.

SpecialPollInterval 3600
MaxNegPhaseCorrection 0xffffffff
MaxPosPhaseCorrection 0xffffffff

Буду следить уход времени и работу после перезагрузки.

 
Edgar Akhmadeev #:

Настроил службу времени. Думаю, системной функциональности достаточно, не стоит городить свои костыли.

Под админом дал команды

В реестре HKLM\System\CurrentControlSet\Services\w32time в подветках поправил переменные и сохранил в экспорт.

Буду следить уход времени и работу после перезагрузки.

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

 
Stanislav Korotky #:

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

Я в Services переключил с ручного запуска на автоматический. После перезагрузки он запущен, проверил. Пара дней покажет, уходят ли часы.

 

Meinberg NTP поставьте и забудьте о проблемах. Расхождение с точным временем будет не больше 5 мс. Круглосуточно.

Это служба точного времени, используемая в linux. В отличии от стандартной для Windows:

подводит время гораздо чаще (замеры примерно раз в минуту)

позволяет использовать несколько серверов, автоматически выбирая лучший

рассчитывает, насколько часы на компьютере идут быстрее/медленнее и плавно корректирует часы с учетом этого.


https://www.meinbergglobal.com/english/sw/ntp.htm


Короче, у вас на компе всегда будет точное (+-5 мс) время. После этого просто берите нужное время на MQL.

Meinberg NTP Software Downloads
Meinberg NTP Software Downloads
  • MEINBERG
  • www.meinbergglobal.com
NTP client and server download for different operating systems
 
Ilya Baranov #:

Meinberg NTP поставьте и забудьте о проблемах. Расхождение с точным временем будет не больше 5 мс. Круглосуточно.

Это служба точного времени, используемая в linux. В отличии от стандартной для Windows:

подводит время гораздо чаще (замеры примерно раз в минуту)

позволяет использовать несколько серверов, автоматически выбирая лучший

рассчитывает, насколько часы на компьютере идут быстрее/медленнее и плавно корректирует часы с учетом этого.


https://www.meinbergglobal.com/english/sw/ntp.htm


Короче, у вас на компе всегда будет точное (+-5 мс) время. После этого просто берите нужное время на MQL.

Спасибо за ещё одну программу. Отличие от встроенной, но не запущенной по умолчанию w32tm, одно - динамическое регулирование частоты запросов в зависимости от скорости ухода локальных часов. Раз в минуту мне кажется избыточным. Я настроил на раз в час. Ну может ещё плюс - графический мониторинг. Меня устраивает точность в десятки миллисекунд, учитывая, что на серверах, которыми я пользовался (bybit, binance, ...) время неточное.