← Zurück

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

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


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

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

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

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

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

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (6)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

PavelAd
PavelAd Autor

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


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 работает корректно.