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


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

Теги:


Спасибо:




47 Ответов
1 2  >
Alexander

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


frontman как раз прохождением клиринга и занимается сейчас фактически.
можете ему помочь в этом

и надо не заглушки чтоб ошибки не лезли вставлять, а ошибки лучше исправлять :)
Спасибо:

FiNick

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


Помогу, конечно)
Автор топика
Спасибо:

frontman

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


)))) Урааа)))
FiNich если что у меня есть отложенные изменения frontman_cp)) Велком)))
Спасибо:

Alexander

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


frontman Перейти
)))) Урааа)))
FiNich если что у меня есть отложенные изменения frontman_cp)) Велком)))


Так вроде вы уже всё сделали и вам оставалось лишь протестировать изменения.
Что-то изменилось?
Спасибо:

frontman

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


Нет. Так и есть.
Просто если человек хочет помочь почему бы и нет...
Может он придумает способ сделать то же самое проще...
Спасибо:

FiNick

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


Протестировал, на клиринге вылетают те же ошибки. (Может я не на то смотрю и ошибки вообще не связаны с тем что frontman менял?)
Первая ошибка это "P2ERR_SERV_NO_SERVICE". На сколько я помню она вылетает потому что на клиринге потоки закрываются, и мы тогда решили что это нормальния ситуация и надо эту ошибку просто игнорить, написали соответствующий код. Что изменилось с тех пор, почему решили вернуть её обратно?

Вторая ошибка: "Инструменты GAZR28@RTS и GASP@RTS имеют одинаковый идентификатор инструмента 167736 торговой системы (тот самый IsinID??)". Странная ошибка, что за инструмент GAZR28, или USDRUB23?

Далее вопрос frontman'y по коду:
Код
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);

				GetSecurity(CreateSecurityId(secCode, "RTS"), security =>
				{
					if (_secCodeAndIsinIds.TryAdd(secCode, isinId))
					{
						InitSecurityInfo(security, record, metadata);

						security.Code = secCode;
						initHandler(security);
					}
					else
					{
						_newAndOldIsinIds.TryAdd(isinId, _secCodeAndIsinIds[secCode]);
					}

					UpdateSecurityInfo(security, record, metadata);
					updateHandler(security);
				}, isinId.ToString());
			});
		}

Я так понял это событие обрабатывает приход новых инструментов. Сначала мы сохраняем в словарь пары ShortIsin-IsinId, а затем если инструмент с такимже ShortIsin пришел второй раз сохраняем пару "новый IsinId-старый IsinId"?
Код
private void ProcessPlazaStream(PlazaRecord record, PlazaColumn isinIdColumn, bool ignoreIfNotExist, Action<Security> action)
		{
			var newIsinId = record.Get<int>(isinIdColumn);
			var oldIsinId = _newAndOldIsinIds.TryGetValue(newIsinId);
			var isinId = (oldIsinId == 0 ? newIsinId : oldIsinId).ToString();
			ProcessEvents(() => ProcessSecurityAction(isinId, action, ignoreIfNotExist));
		}

Здесь в ProcessSecurityAction мы пытаемся подсунуть тот isinId который был до клиринга, ищем его в словаре _newAndOldIsinIds. Я так понимаю метод ProcessPlazaStream вызывается очень часто, и такая вот конструкция с поиском в словаре будет сильно все замедлять. Но вопрос оптимизации это уже второй вопрос, главное сейчас чтоб хоть как-то заработало=)
Автор топика
Спасибо:

frontman

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


Так же тестил. Ошибка так же вылетела... Ничего не понял) Продолжу сегодня...
Спасибо:

frontman

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


FiNick Перейти
Но вопрос оптимизации это уже второй вопрос, главное сейчас чтоб хоть как-то заработало=)


Рад что вы понимаете это)
Честно скажу как это сделать по другому я пока не знаю... Подменять isinId надо, т.к. данные по инструменту закреплены за одним isinId(дневным как правило), а у нас их 2 одновременно существует...
Словарь по моему это самая быстрая конструкция для поиска... Так что...
Спасибо:

FiNick

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


frontman Перейти
Так же тестил. Ошибка так же вылетела... Ничего не понял) Продолжу сегодня...

А какие у тебя ошибки вылетают? Такие же как у меня?
Автор топика
Спасибо:

frontman

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


Первой не было. На второй все упало...
Причем ранее я что то этого не наблюдал...
Спасибо:

frontman

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


"что за инструмент GAZR28, или USDRUB23" - а что именно подозрительно?)
Спасибо:

FiNick

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


frontman Перейти
"что за инструмент GAZR28, или USDRUB23" - а что именно подозрительно?)

Ну для людей есть ShortIsin, он например "RIH2", "GAZR" он всегда одинаковый, каждый день, до и после клиринга. Для машин есть isinId, просто цыфры которые смысловой нагрузки не несут, на каждой торговой сессии они разные. Когда я вижу ShortIsin=="GAZR28" я вот и не понимаю что это за инструмент такой.
Я так понимаю это какраз тот короткий код инструмента который является ключем в словаре _secCodeAndIsinIds. Т.е. в таблицу торгуемых инструментов на клиринге приходит новая запись с ShortIsin=="GAZR28", в словарь _secCodeAndIsinIds добавляется пара GAZR28 - 167735, в этом словаре уже есть пара GAZP - 167735, но ошибки это не вызывает. Ошибка вылетает потом то ли из initHandler, то ли из updateHandler, это я сегодня еще протестчу.
Автор топика
Спасибо:

Alexander

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


РТС Стандарт меняет названия инструментов
у них дата дюрации ведь разная, постоянно меняется
Спасибо:

frontman

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


Ну вы же видили письмо тех поддержки...
Цитата:
Вы можете сами обратить внимание, на то, по какому приницпу изменяются данные в fut_sess_contents.

Для фьючей и опционов все, кроме short_isin, isin, name, code_vcb, lot_volume, step_price, d_exp.

Для стандарта всё тоже самое, за исключением того, что инструменты станадрта могут жить всего 5 дней. При появлении нового инструмента ему присваивается новый isin_id. При изменении торговой сессии в инструментах Стандарта "сдвгиаются" isin_id, по принципу, обрисованому на скриншоте.
Спасибо:

frontman

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


Вроде как short_isin не должен меняться((
Спасибо:

frontman

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


А если меняется надо взять другое поле значит. Ток вот какое...
Спасибо:

FiNick

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


Вот стэктрейс ошибки "Инструменты GAZR28@RTS и GASP@RTS имеют одинаковый идентификатор...":
at StockSharp.Algo.BaseTrader.#=qRF_xqxANieD2egGg0vH$DyS9znTAcZf_D2rckeY$o9o=.#=qfEqfyH4VGXSOwDg5F7Jnwn3mDUB1ES48llbREdWjqoQ=.#=q14B6ZRU$RPtdRzxfmaRNQ8CoRwETJQ_mnmzCJkV$OMc=(SynchronizedDictionary`2 #=qEUZtngTxeDs91jqGD7GENw==)
at Ecng.Collections.CollectionHelper.SyncDo[TCollection](TCollection collection, Action`1 action)
at StockSharp.Algo.BaseTrader.#=qRF_xqxANieD2egGg0vH$DyS9znTAcZf_D2rckeY$o9o=.#=qtQpinW32NuP13jTk2ftde4STP6A6qcoCtYMw2TywzKw=(String #=qrq653$aXZYhOQ79Ye_NoVQ==)
at Ecng.Collections.CollectionHelper.SafeAdd[TKey,TValue](IDictionary`2 dictionary, TKey key, Func`2 handler)
at StockSharp.Algo.BaseTrader.GetSecurity(String id, Func`2 createSecurity, Action`1 changeSecurity, String nativeSecurityId)
at StockSharp.Algo.BaseTrader.GetSecurity(String id, Action`1 changeSecurity, String nativeSecurityId)
at StockSharp.Plaza.PlazaTrader.<>c__DisplayClass1d.<OnSessionContentsDerivativeStreamInserted>b__1b() in ...\PlazaTrader.cs:line 610
at StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)

Честно говоря, я совершенно не понимаю что происходит и как сделать чтобы все заработало, перечитал всю тему по сертификации два раза, все равно не понятно
Автор топика
Спасибо:

Mikhail Sukhov

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


FiNick Перейти
Честно говоря, я совершенно не понимаю что происходит


Происходит обычное игнорирование собеседников.
Спасибо:

frontman

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


Михаил! Да не кто вас не игнорит. Как я понял так я и сделал.
И в каком месте я вас проигнорил то?!
Вон FiNick то же прочитал и не чего не понял. В этом скорее виновата закрытая часть кода. Потому что не задав кучу вопросов вам невозможно понять механизмы...
Спасибо:

Alexander

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


frontman Перейти
Михаил! Да не кто вас не игнорит. Как я понял так я и сделал.
И в каком месте я вас проигнорил то?!
Вон FiNick то же прочитал и не чего не понял. В этом скорее виновата закрытая часть кода. Потому что не задав кучу вопросов вам невозможно понять механизмы...


Какая закрытая часть вам нужна для того чтобы во всём разобраться?
Спасибо:

frontman

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


BaseTrader.
Спасибо:

Alexander

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


frontman Перейти
BaseTrader.


Зачем всего? Confused
Может какой-то конкретный метод интересует?
Спасибо:

frontman

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


Ну просто хотелось посмотреть как используется nativeId
Потому что вроде бы подмену isin_id я делаю... И все норм... А вот что дальше происходит...
Спасибо:

Alexander

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


Отправил всё использование nativeId внутри BaseTrader.
Теперь все данные для фикса есть?
Спасибо:

frontman

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


)) Спасибо. Да. Надеюсь...
Спасибо:
1 2  >

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

loading
clippy