Проблемы в клиринг
Atom
22.12.2011


Раньше вроде нормально клиринг проходили, вернее мы там код меняли, чтобы куча ошибок не вылетала на клиринге, а сейчас вот опять то же самое? (см. картинку)

Теги:


Спасибо:


<< < 3 4 5 
Alexander

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


Вступлю, пожалуй, в разговор.

Можно конкретики больше - где кто-то был выставлен глупым и недалёким, где пренебрежительное отношение было продемонстрировано?
И где не были даны ответы на заданные вопросы?

Даже запрошенные исходники отправил я в личку.
Спасибо:

FiNick

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


Написал вот так:
Код
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, строка:
Код
var newDepth = dict[oldDepth.Security].PendingDepth;

Говорит что в dict нет таких-то ключей, ключем тут является security. Есть идеи?)
Спасибо:

frontman

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


Погодите... а вы что именно исправляли?
Потому что если просто создать в PlazaTrader словарь с _isinIdSecurities это не поможет.
Проблема в том что в вечернюю сессию у всех инструментов существует по 2 issin_id(Дневной и вечерний)
Я создавал несколько словарей для замены...
У вас в _isinIdSecurities хранятся пары где issin_id - различный , а Security один и тот же? Или как?
Спасибо:

frontman

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


Alexander Mukhanchikov Перейти
Вступлю, пожалуй, в разговор.

Можно конкретики больше - где кто-то был выставлен глупым и недалёким, где пренебрежительное отношение было продемонстрировано?
И где не были даны ответы на заданные вопросы?

Даже запрошенные исходники отправил я в личку.


Ну если вы перечитаете переписку то все поймете думаю...
Я бы не хотел на этом акцентировать внимание...
Спасибо:

FiNick

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


frontman Перейти
У вас в _isinIdSecurities хранятся пары где issin_id - различный , а Security один и тот же? Или как?

Да, именно так, после клиринга у нас будут записи с разными isin_id и одинаковыми Security, в этом ничего плохого нет.
А возможна ли ситуация, когда после клиринга приходит некоторая security2 у которой точно такой isin_id как и у некоторой security1 которая еще до клиринга была? врядли... но если так надо будет к ключу добавить еще какой-нибудь session_id.

Ну и вообще, логика вроде верная: приходит новый инструмент, GetSecurity находит или создает соответствующий экземпляр Security, а я с этим экземпляром ассоциирую isin_id, если таких isin_id несколько это не страшно. если понадобится различать какой из них старый, какой новый, то добавим session_id
Спасибо:

frontman

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


Ну да. Все норм.
Спасибо:

FiNick

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


Поставил заглушку в PlazaDepthBuilder.FlushChanges:
Код
if (!dict.ContainsKey(oldDepth.Security)) //Заглушка, удалить
    continue;
var newDepth = dict[oldDepth.Security].PendingDepth;


Вроде через клиринг нормально перешел, только повылетали "P2ERR_SERV_NO_SERVICE". После клиринга заявки ставятся, торговля идет, стакан работает.
Изменения в шелве, ник FiNick_cp, буду еще тестить как работает
Спасибо:
<< < 3 4 5 

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

loading
clippy