Не всегда приходит инструмент
Atom Ответить
22.10.2010


eaa

Фотография
Наблюдаю странную ситуацию на тестовом сервере (на рабочем не проверял):
ловлю событие NewSecurities, мне надо отловить бумагу RIZ0. Получаю ее не каждый раз :(
Т.е. коннекчусь, смотрю что приходит, например:

один раз так:
....
AZKM
RU000A0JPB41
GM32500BL0
VB13000BX0
KBSB
RU000A0JPD98
....

другой раз так:
....
AZKM
RU000A0JPB41
GM32500BL0
RIZ0
VB13000BX0
KBSB
RU000A0JPD98
....

Как видно, в первом случае RIZ0 почему-то отсутствует, все остальные бумаги на месте.
Собственно вопрос - куда исчезает бумага?
Причем происходит это вроде бы случайным образом. Или может есть какая-то хитрая настройка или
какая другая причина столь странного поведения?

Теги:


Спасибо:




11 Ответов
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

Фотография
Автор статей Программист Трейдер
Дата: 27.10.2010
Ответить


eaa

Если кто знает почему так - отпишите плз.


А мой ответ чем не подошел?
Спасибо:

eaa

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


Он не объясняет, почему в одном случае приходит NewSecurity, а в другом - SecurityChanged.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 28.10.2010
Ответить


eaa
Он не объясняет, почему в одном случае приходит NewSecurity, а в другом - SecurityChanged.


Я думаю проблема в синхронизации данных. Вы пробовали создать простой приложение с кодом, которое я написал? Всегда ли приходит фьюч на РТС?
Спасибо:

Alex2

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


Mikhail Sukhov
eaa
Он не объясняет, почему в одном случае приходит 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. Он не изменяется в процессе работы.
Спасибо:

Alex2

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


Mikhail Sukhov
Alex2

Подтверждаю, такая же проблема с RIZ0
Пробовал приведенный вами код для NewSecurities не срабатывает:


Ок, понятно. Проблема в том, что инструмент инициализируется позднее. Из-за того, что сделки (или заявки) по инструменту приходят раньше, чем сама информация по инструменту. Из-за этого в NewSecurities посылается не полностью инициализированный объект Security. Как вариант - смотрите на Security.Id, а не на Code. Он не изменяется в процессе работы.


Да, это помогло. Спасибо.
Спасибо:


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

loading
clippy