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

Не всегда приходит инструмент
Atom
10/22/2010
eaa


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

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

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

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


Tags:


Thanks:


1 2  >
Mikhail Sukhov

Avatar
Date: 10/24/2010
Reply


У меня код:

trader.NewSecurities += securities =>
{
	foreach (var security in securities)
	{
		if (security.Code == "RIZ0")
		{
			_riz0 = security;
			trader.RegisterSecurity(_rim0);
		}
	}
};

и на демо и на реале стабильно находил фьюч. Но я не проверял порядок прихода инструментов. Может быть там не всегда одна и так же сортировка?

Thanks:

eaa

Avatar
Date: 10/24/2010
Reply


у меня то же самое, разве что в цикле печатает все, что приходит. стабильно работает, работает, а потом так же стабильно эта бумага не появляется. Потом опять начинает появляться... это и смущает. сначала думал что может оно где-то лочится в коде, но вроде нет - остальное-то приходит стабильно.

Thanks:

eaa

Avatar
Date: 10/26/2010
Reply


Вот еще заметил такую вещь...


trader.NewSecurities += securities =>
{
    foreach (var security in securities)
    {
        if (security.Code == "RIZ0")
        {
            _riz0 = security;
            trader.RegisterSecurity(_rim0);
            waitHandle.Set();
        }
    }
};

waitHandle.WaitOne();

Если ставлю точку останова на waitHandle.WaitOne() и потом продолжаю выполнение - приходят все коды, если убираю - некоторые теряются, в т.ч. тот, который мне нужен, хотя не только он... Пробовал перед ним ставить sleep() - толку нет.

Может есть мысль, как победить?

Thanks:

Mikhail Sukhov

Avatar
Date: 10/26/2010
Reply


eaa: Вот еще заметил такую вещь...

Если ставлю точку останова на waitHandle.WaitOne() и потом продолжаю выполнение - приходят все коды, если убираю - некоторые теряются, в т.ч. тот, который мне нужен, хотя не только он... Пробовал перед ним ставить sleep() - толку нет.

Может есть мысль, как победить?

Я весь код не вижу, но думаю это то, о чем я писал выше. Инструменты приходят не всегда в одном и том же порядке. А Вы в коде ожидаете, что RIZ придется одним из первых. В качестве проверки сделайте простое приложение, которое выводит в консоль момент прихода RIZ0:

trader.NewSecurities += securities =>
{
    foreach (var security in securities)
    {
        if (security.Code == "RIZ0")
        {
            Console.WriteLine("Пришло!!!");
        }
    }
};

Console.ReadLine();

Уверен, что надпись Пришло будет появляться всегда, хоть и с небольшими задержками.

Thanks:

eaa

Avatar
Date: 10/27/2010
Reply


Нашел как обойти, но так и не понял причину.

Собственно, когда я ставлю точку останова, то приходит событие NewSecurities, если я ее не ставлю, то приходит SecuritiesChanged, и ловить эту бумагу надо в другом обработчике... Странно, но факт.

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

Thanks:

Mikhail Sukhov

Avatar
Date: 10/28/2010
Reply


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

А мой ответ чем не подошел?

Thanks:

eaa

Avatar
Date: 10/28/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 10/28/2010
Reply


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

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

Thanks:

Alex2

Avatar
Date: 10/29/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 10/29/2010
Reply


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

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

Thanks:
1 2  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy