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


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

Теги:


Спасибо:




47 Ответов
< 1 2 
FiNick

Фотография
Благотворитель
Дата: 27.12.2011
Ответить


Короче, в GetSecurity не надо подавать isinId в качестве параметра.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 27.12.2011
Ответить


FiNick Перейти
Короче, в GetSecurity не надо подавать isinId в качестве параметра.


Во, надеюсь теперь вы найдете общий язык с фронтмэном. Я ему писал раз. Писал два. Писал три. Писал четыре. И что-то у меня есть сомнение, что фраза "не использовать маппинг BaseTrader" усвоена до конца.
Спасибо:

FiNick

Фотография
Благотворитель
Дата: 27.12.2011
Ответить


Ну хорошо, убирем isinId из GetSecurity, в самом PlazaTrader'e будем хранить словарь "isinId - security". Далее, в ProcessPlazaStream есть метод BaseTrader.ProcessSecurityAction с параметром nativeSecurityId, который теперь работать не будет, значит его надо убрать, заменить на аналог для PlazaTrader.
Я так понимаю этот метод по isinId искал соответствующий security, и, если находил, вызывал action(security)?
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 27.12.2011
Ответить


FiNick Перейти
Ну хорошо, убирем isinId из GetSecurity, в самом PlazaTrader'e будем хранить словарь "isinId - security". Далее, в ProcessPlazaStream есть метод BaseTrader.ProcessSecurityAction с параметром nativeSecurityId, который теперь работать не будет, значит его надо убрать, заменить на аналог для PlazaTrader.
Я так понимаю этот метод по isinId искал соответствующий security, и, если находил, вызывал action(security)?


Код
protected void ProcessSecurityAction(string nativeSecurityId, Action<Security> action, bool ignoreIfNotExist)
		{
			if (nativeSecurityId.IsEmpty())
				throw new ArgumentNullException("nativeSecurityId");

			if (action == null)
				throw new ArgumentNullException("action");

			var security = _nativeIdSecurities.TryGetValue(nativeSecurityId);

			if (security == null)
			{
				if (!ignoreIfNotExist)
					_suspendedSecurityEvents.Add(nativeSecurityId, action);
			}
			else
				action(security);
		}
Спасибо:

frontman

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


По моему все помешались... Если не передавать isinId, то как будет происходить поиск инструмента в BaseTrader?!?!
Как вот эта строчка будет работать то : var security = _nativeIdSecurities.TryGetValue(nativeSecurityId);?!?!?
Спасибо:

frontman

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


Mikhail Sukhov Перейти
FiNick Перейти
Короче, в GetSecurity не надо подавать isinId в качестве параметра.


Во, надеюсь теперь вы найдете общий язык с фронтмэном. Я ему писал раз. Писал два. Писал три. Писал четыре. И что-то у меня есть сомнение, что фраза "не использовать маппинг BaseTrader" усвоена до конца.


Я и сделал мапинг внутри PlazaTrader.
Спасибо:

FiNick

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


frontman Перейти
Я и сделал мапинг внутри PlazaTrader.

Да, но параллельно использовался мапинг BaseTrader, давай его уберем и все должно заработать
Автор топика
Спасибо:

frontman

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


А как тогда быть с ProcessSecurityAction?
Чем его заменить? Таким образом просто получается мы нарушаем единообразие реализаций коннекторов так сказать...
Если задуман ProcessSecurityAction через который во всех коннекторах совершаются действия над инструментами, то и в PlazaTrader все должно быть так...
Я во всяком случае себе это так представляю...

По мне так просто вся проблема в поиске поля не изменяемого при смене сессий... Т.е. ShortIsin - не подходит...
Спасибо:

FiNick

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


frontman Перейти
А как тогда быть с ProcessSecurityAction?

Просто в PlazaTradere замещаем его своим методом. Можно даже попросить, чтобы в BaseTradere его сделали virtual, тогда "единообразие реализаций коннекторов" не нарушится я думаю)
Автор топика
Спасибо:

frontman

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


Ну смотрите сами... Если это проще...
В любом случае соответствие между isinId и инструментов надо сохранить...
Т.е. добавиться еще один словарик. Зачем если он уже есть в BaseTrader? Я не понимаю...
Попробуйте сделайте... В принципе важен результат, а не то насколько он прост))
Спасибо:

frontman

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


Я все равно сделаю так как вижу это сам))
Потом решим как лучше...
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 28.12.2011
Ответить


frontman Перейти
Я все равно сделаю так как вижу это сам))
Потом решим как лучше...


Да там работы на 2 часа (1 - создать маппинг по разным исин_ид, 2 - сделать свой ProcessSecurityAction). А обсуждение ведем пол месяца. Но все равно интересно наблюдать.
Спасибо:

frontman

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


Да кто ж мешает то?
Проект открытый... Милости просим. В этом же основная идея...
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 28.12.2011
Ответить


frontman Перейти
Да кто ж мешает то?
Проект открытый... Милости просим. В этом же основная идея...


Как только с этой странички исчезнет мой аккаунт, сразу возьмусь за Плазу.
Спасибо:

frontman

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


Михаил. Глупо по моему пытаться выставить кого то глупым и недалеким...
Вы основатель данного проекта и конечно же лучше вас и быстрее вас врятли кто то сделает, но если вы хотете что бы проект стал действительно открытым, то надо быть готовым к тому, что кто то будет делать что то не так и задавать вопросы...
Мне кажется вы немного пренебрежительно относитесь к любой попытке инакомыслия...
Спасибо:

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, буду еще тестить как работает
Автор топика
Спасибо:
< 1 2 

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

loading
clippy