Не вызываются события стакана

10 views
Skip to first unread message

Lafert

unread,
Sep 20, 2010, 8:00:01 AM9/20/10
to Stock#
В событии NewSecurities в цикле получаю security, стакан, добавляю к
нему события QuotesChanged и UpdateFinished и вставляю стакан в
коллекцию. RegisterQuotes происходит, но события не вызываются.

Если работаю с одним инструментом и стакан - переменная класса, то все
работает.
Что я не так делаю?

Mikhail Sukhov

unread,
Sep 20, 2010, 8:51:34 AM9/20/10
to Stock#
Приведите код обработчика. Не понятно с описания.

Lafert

unread,
Sep 20, 2010, 9:08:36 AM9/20/10
to Stock#
_trader.NewSecurities += (securities) =>
{
foreach(Security security in securities)
{
if (Securities.IndexOf(mysec =>
mysec.security.Equals(security as Security)) < 0)
{
MarketDepth stakan = new
MarketDepth(security);
stakan.QuotesChanged += (odr, quotes) =>
{
foreach (Quote qt in quotes.Values)
{
to_log("{0} {1} {2}
{3}".Put(stakan.Security.Id, odr, qt.Price, qt.Volume));
}
};
stakan.UpdatingStarted += () =>
{
to_log("{0}
stakan.UpdatingStarted".Put(security.Id));
};
stakan.UpdatingFinished += () =>
{
to_log("{0}
stakan.UpdatingFinished".Put(stakan.Security.Id));
StakanUpdated(stakan);
};
AddSecurities(security, stakan);

}
}
};
}

public void AddSecurities(Security security, MarketDepth stakan)
{
if (security == null)
throw new ArgumentNullException("security");
int _daily_sqlId = 0;
try
{
_trader.RegisterQuotes(security);
}
catch (Exception ex) { to_log(ex.Message); }
Securities.Add(security);
_security_stakans.Add(security, stakan);
to_log("Добавлен инструмент {0}".Put(security.Id));
}

После этого стаканы в квике регитрируются, но событий не происходит.
Не происходити события ProcessUnknownDdeData.
После закрытия квика в окне сообщений Квика - переполнена очередь
сообщений по инструмкенту.
> > Что я не так делаю?- Скрыть цитируемый текст -
>
> - Показать цитируемый текст -

Mikhail Sukhov

unread,
Sep 20, 2010, 9:19:25 AM9/20/10
to Stock#
Иду по шагам:

1. f (Securities.IndexOf(mysec => mysec.security.Equals(security as
Security)) < 0) думаю можно смело заменить на Securities.Contains
2. Нельзя создавать объекты по new. Это делает сам шлюз. Как
результат, шлюз изменяется совсем другой объект, нежели Ваш. Это
касается всего, кроме заявок. Получайте объект стакана из
ITrader.GetQuotes(Security).
3. Насчет закрытия не понял. Где получаете ошибку с очередью? В Квике?
Так Вы же его закрываете.

Lafert

unread,
Sep 20, 2010, 10:18:57 AM9/20/10
to Stock#
Спасибо. Получилось

> > > - Показать цитируемый текст -- Скрыть цитируемый текст -

Reply all
Reply to author
Forward
0 new messages