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


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

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

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

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


Теги:


Спасибо:


1 2  >
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 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. Он не изменяется в процессе работы.

Спасибо:
1 2  >

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

loading
clippy