← Back

Синхронизация времени с биржей

Есть такой код по синхронизации времени:


Trader = new QuikTrader(Path.Text);
this.GuiAsync(() => Trader.SyncMarketTime(Exchange.Rts));

После выполнения этого кода, если сравнить время Trader.MarketTime и время в терминале Quik, то видно что разница составляет примерно 23 секунды. Пробовал вторую строку заменить на такую:

this.GuiAsync(() => Trader.SyncMarketTime(Exchange.Micex));

Так же время отличается.

Уточнял у брокера, сказали что время у них на сервер одинаковое с биржей.

Подскажите почему не верно синхронизируется время?

Comments (6)

Login or Create account, Log in or register to leave a comment

PavelAd
PavelAd Author

Сделал синхронизацию так и стало нормально:


var srvTime = QuikTerminal.GetTerminals(false).First().ServerTime;
Trader.MarketTimeOffset =  srvTime.Value.Subtract(DateTime.Now);

Роман Угрюмов
Роман Угрюмов

Заметил интересное свойство у SyncMarketTime Если ее вызывать два раза кряду с небольшим промежутком времени (10-20 секунд), то при втором вызове SyncMarketTime выходит по таймауту, а MarketTimeOffset == 0 Если запускать SyncMarketTime не чаще чем один раз в пару минут то все нормально. Жить не мешает, но слегка обескураживает

Alexander
Alexander

Роман Угрюмов: Заметил интересное свойство у SyncMarketTime Если ее вызывать два раза кряду с небольшим промежутком времени (10-20 секунд), то при втором вызове SyncMarketTime выходит по таймауту, а MarketTimeOffset == 0 Если запускать SyncMarketTime не чаще чем один раз в пару минут то все нормально. Жить не мешает, но слегка обескураживает

Видимо NTP сервер вас посылает и не даёт так часто синхронизовать время. Синхронизация времени нужна максимум 1 раз - при запуске робота. Её и не надо делать каждые 10 секунд.

Роман Угрюмов
Роман Угрюмов

Не все так однозначно Вот поставил this.quikTrader.SyncMarketTime(Exchange.Rts, 30000); // Синхронизуем время с московским (биржа РТС) в обработчик нажатия кнопки, нажал кнопку - синхронизация прошла

Поставил эту команду в функцию обработки сообщения о успешном подключении к КВИК this.quikTrader.Connected += this.CoonectIsEstablished; // 1

  • вышел по таймауту без синхронизации

Поставил эту команду перед командой старта экспорта DDE

this.quikTrader.SyncMarketTime(Exchange.Rts, 30000); this.quikTrader.Trader.StartExport(); - вышел по таймауту без синхронизации

Куда опытные люди вставляют вызов SyncMarketTime?

PS. Вообще поражает объем проделанной вами работы по созданию этой библиотеки!!!

paveld
paveld

Роман Угрюмов: Куда опытные люди вставляют вызов SyncMarketTime? я наприер SyncMarketTime ставил перед вызовом Trader.Connect();

После вызова SyncMarketTime все равно было расхождение в несколько секунд с временем в терминале Quik, и я стал синхронизировать время с терминалом так:

          
          var srvTime = QuikTerminal.GetTerminals(false).First().ServerTime;
          if (srvTime != null)
            Trader.MarketTimeOffset = srvTime.Value.Subtract(DateTime.Now);

Роман Угрюмов
Роман Угрюмов

Синхронизация времени стала работать некорректно в WindowForm приложении после перехода на 4.1 После отката на 4.0 работает корректно.