Синхронизация времени с биржей
Atom Ответить
03.04.2012


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

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

После выполнения этого кода, если сравнить время Trader.MarketTime и время в терминале Quik, то видно что разница составляет примерно 23 секунды.
Пробовал вторую строку заменить на такую:
Код
this.GuiAsync(() => Trader.SyncMarketTime(Exchange.Micex));

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

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

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

Теги:


Спасибо:




6 Ответов
PavelAd

Фотография
Дата: 03.04.2012
Ответить


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

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

Автор топика
Спасибо:

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

Фотография
Дата: 17.06.2012
Ответить


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

Спасибо:

Alexander

Фотография
Дата: 17.06.2012
Ответить


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



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

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

Фотография
Дата: 17.06.2012
Ответить


Не все так однозначно
Вот поставил 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

Фотография
Дата: 22.06.2012
Ответить


Роман Угрюмов Перейти

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

я наприер SyncMarketTime ставил перед вызовом Trader.Connect();

После вызова SyncMarketTime все равно было расхождение в несколько секунд с временем в терминале Quik, и я стал синхронизировать время с терминалом так:
Код
          
          var srvTime = QuikTerminal.GetTerminals(false).First().ServerTime;
          if (srvTime != null)
            Trader.MarketTimeOffset = srvTime.Value.Subtract(DateTime.Now);
Спасибо:

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

Фотография
Дата: 23.06.2012
Ответить


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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy