Alexander
|
Date: 12/28/2011
Вступлю, пожалуй, в разговор.
Можно конкретики больше - где кто-то был выставлен глупым и недалёким, где пренебрежительное отношение было продемонстрировано? И где не были даны ответы на заданные вопросы?
Даже запрошенные исходники отправил я в личку.
|
|
Thanks:
|
|
|
|
|
FiNick
|
Date: 12/28/2011
|
|
|
|
Написал вот так: Code
private void ProcessPlazaStream(PlazaRecord record, PlazaColumn isinIdColumn, bool ignoreIfNotExist, Action<Security> action)
{
var isinId = record.Get<int>(isinIdColumn);
ProcessEvents(() => ProcessSecurityAction(isinId, action, ignoreIfNotExist));
}
private void ProcessSecurityAction(int isinId, Action<Security> action, bool ignoreIfNotExist)
{
if (isinId==0)
throw new ArgumentNullException("isinId");
if (action == null)
throw new ArgumentNullException("action");
Security security = _isinIdSecurities.TryGetValue<int, Security>(isinId);
if (security == null)
{
if (!ignoreIfNotExist)
{
//_suspendedSecurityEvents.Add(isinId, action); что это?
}
}
else
action(security);
}
private void OnSessionContentsDerivativeStreamInserted(PlazaRecord record, PlazaSessionContentsDerivativeColumns metadata, Action<Security> initHandler, Action<Security> updateHandler)
{
ProcessEvents(() =>
{
var isinId = record.Get<int>(metadata.IsinId);
var secCode = record.Get<string>(metadata.ShortIsin);
var sec = GetSecurity(CreateSecurityId(secCode, "RTS"), security =>
{
_isinIdSecurities.TryAdd(isinId, security);
InitSecurityInfo(security, record, metadata);
security.Code = secCode;
initHandler(security);
UpdateSecurityInfo(security, record, metadata);
updateHandler(security);
});
});
}
До клиринга все вроде норм работало, на клиринге стали вылетать ошибки из PlazaDepthBuilder.FlushChanges, строка: Code
var newDepth = dict[oldDepth.Security].PendingDepth;
Говорит что в dict нет таких-то ключей, ключем тут является security. Есть идеи?)
|
|
Thanks:
|
|
|
|
|
frontman
|
Date: 12/28/2011
Погодите... а вы что именно исправляли? Потому что если просто создать в PlazaTrader словарь с _isinIdSecurities это не поможет. Проблема в том что в вечернюю сессию у всех инструментов существует по 2 issin_id(Дневной и вечерний) Я создавал несколько словарей для замены... У вас в _isinIdSecurities хранятся пары где issin_id - различный , а Security один и тот же? Или как?
|
|
Thanks:
|
|
|
|
|
frontman
|
Date: 12/28/2011
Alexander Mukhanchikov Вступлю, пожалуй, в разговор.
Можно конкретики больше - где кто-то был выставлен глупым и недалёким, где пренебрежительное отношение было продемонстрировано? И где не были даны ответы на заданные вопросы?
Даже запрошенные исходники отправил я в личку. Ну если вы перечитаете переписку то все поймете думаю... Я бы не хотел на этом акцентировать внимание...
|
|
Thanks:
|
|
|
|
|
FiNick
|
Date: 12/28/2011
frontman У вас в _isinIdSecurities хранятся пары где issin_id - различный , а Security один и тот же? Или как? Да, именно так, после клиринга у нас будут записи с разными isin_id и одинаковыми Security, в этом ничего плохого нет. А возможна ли ситуация, когда после клиринга приходит некоторая security2 у которой точно такой isin_id как и у некоторой security1 которая еще до клиринга была? врядли... но если так надо будет к ключу добавить еще какой-нибудь session_id. Ну и вообще, логика вроде верная: приходит новый инструмент, GetSecurity находит или создает соответствующий экземпляр Security, а я с этим экземпляром ассоциирую isin_id, если таких isin_id несколько это не страшно. если понадобится различать какой из них старый, какой новый, то добавим session_id
|
|
Thanks:
|
|
|
|
|
frontman
|
Date: 12/28/2011
Ну да. Все норм.
|
|
Thanks:
|
|
|
|
|
FiNick
|
Date: 12/29/2011
Поставил заглушку в PlazaDepthBuilder.FlushChanges: Code
if (!dict.ContainsKey(oldDepth.Security)) //Заглушка, удалить
continue;
var newDepth = dict[oldDepth.Security].PendingDepth;
Вроде через клиринг нормально перешел, только повылетали "P2ERR_SERV_NO_SERVICE". После клиринга заявки ставятся, торговля идет, стакан работает. Изменения в шелве, ник FiNick_cp, буду еще тестить как работает
|
|
Thanks:
|
|
|
|