Mikhail Sukhov
|
Дата: 24.10.2010
У меня код: Кодtrader.NewSecurities += securities => { foreach (var security in securities) { if (security.Code == "RIZ0") { _riz0 = security; trader.RegisterSecurity(_rim0); } } }; и на демо и на реале стабильно находил фьюч. Но я не проверял порядок прихода инструментов. Может быть там не всегда одна и так же сортировка?
|
|
Спасибо:
|
|
|
|
|
eaa
|
Дата: 24.10.2010
у меня то же самое, разве что в цикле печатает все, что приходит. стабильно работает, работает, а потом так же стабильно эта бумага не появляется. Потом опять начинает появляться... это и смущает. сначала думал что может оно где-то лочится в коде, но вроде нет - остальное-то приходит стабильно.
|
|
Спасибо:
|
|
|
|
|
eaa
|
Дата: 26.10.2010
Вот еще заметил такую вещь... Код trader.NewSecurities += securities => { foreach (var security in securities) { if (security.Code == "RIZ0") { _riz0 = security; trader.RegisterSecurity(_rim0); waitHandle.Set(); } } };
waitHandle.WaitOne();
Если ставлю точку останова на waitHandle.WaitOne() и потом продолжаю выполнение - приходят все коды, если убираю - некоторые теряются, в т.ч. тот, который мне нужен, хотя не только он... Пробовал перед ним ставить sleep() - толку нет. Может есть мысль, как победить?
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 26.10.2010
eaaВот еще заметил такую вещь...
Если ставлю точку останова на waitHandle.WaitOne() и потом продолжаю выполнение - приходят все коды, если убираю - некоторые теряются, в т.ч. тот, который мне нужен, хотя не только он... Пробовал перед ним ставить sleep() - толку нет.
Может есть мысль, как победить?
Я весь код не вижу, но думаю это то, о чем я писал выше. Инструменты приходят не всегда в одном и том же порядке. А Вы в коде ожидаете, что RIZ придется одним из первых. В качестве проверки сделайте простое приложение, которое выводит в консоль момент прихода RIZ0: Кодtrader.NewSecurities += securities => { foreach (var security in securities) { if (security.Code == "RIZ0") { Console.WriteLine("Пришло!!!"); } } };
Console.ReadLine(); Уверен, что надпись Пришло будет появляться всегда, хоть и с небольшими задержками.
|
|
Спасибо:
|
|
|
|
|
eaa
|
Дата: 27.10.2010
Нашел как обойти, но так и не понял причину.
Собственно, когда я ставлю точку останова, то приходит событие NewSecurities, если я ее не ставлю, то приходит SecuritiesChanged, и ловить эту бумагу надо в другом обработчике... Странно, но факт.
Если кто знает почему так - отпишите плз.
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 28.10.2010
eaa Если кто знает почему так - отпишите плз.
А мой ответ чем не подошел?
|
|
Спасибо:
|
|
|
|
|
eaa
|
Дата: 28.10.2010
Он не объясняет, почему в одном случае приходит NewSecurity, а в другом - SecurityChanged.
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 28.10.2010
eaaОн не объясняет, почему в одном случае приходит NewSecurity, а в другом - SecurityChanged.
Я думаю проблема в синхронизации данных. Вы пробовали создать простой приложение с кодом, которое я написал? Всегда ли приходит фьюч на РТС?
|
|
Спасибо:
|
|
|
|
|
Alex2
|
Дата: 29.10.2010
Mikhail SukhoveaaОн не объясняет, почему в одном случае приходит NewSecurity, а в другом - SecurityChanged.
Я думаю проблема в синхронизации данных. Вы пробовали создать простой приложение с кодом, которое я написал? Всегда ли приходит фьюч на РТС? Подтверждаю, такая же проблема с RIZ0 Пробовал приведенный вами код для NewSecurities не срабатывает: trader.NewSecurities += securities => { foreach (var security in securities) { if (security.Code == "RIZ0") { Console.WriteLine(security.Code); } } Бумага не находится. А вот если поместить этот же код в trader.SecuritiesChanged RIZ0 находится. ps: если бы не инфа в предыдущих постах о SecuritiesChanged - до сих пор ломал бы голову, почему не приходит RIZ0
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 29.10.2010
Alex2 Подтверждаю, такая же проблема с RIZ0 Пробовал приведенный вами код для NewSecurities не срабатывает:
Ок, понятно. Проблема в том, что инструмент инициализируется позднее. Из-за того, что сделки (или заявки) по инструменту приходят раньше, чем сама информация по инструменту. Из-за этого в NewSecurities посылается не полностью инициализированный объект Security. Как вариант - смотрите на Security.Id, а не на Code. Он не изменяется в процессе работы.
|
|
Спасибо:
|
|
|
|