v4.0.20 Trader.ProcessDataError: System.ArgumentOutOfRangeException
Atom Ответить
15.03.2012


sda

Фотография
Добрый день!

Не знаю, куда правильно постить информацию о багах, опубликую здесь.

Подключаюсь к торговой системе посредством SmartTrader'а.

Сегодня на вечернем клиринге с моего счета списали мартовские опционы вне денег. Эти операции отдаются со стороны торговой системы как сделки с нулевым orderTransactionId. В результате при получении сделок возникает exception:


15.03.2012 21:21:32 err Trader.ProcessDataError: System.ArgumentOutOfRangeException: Номер транзакции должен быть отличен от нуля.
Parameter name: orderTransactionId
Actual value was 0.
at StockSharp.Algo.BaseTrader.AddMyTrade(Security security, Int64 orderId, Int64 orderTransactionId, Int64 tradeId, Func`2 createTrade, Action`1 initMyTrade)
at StockSharp.Smart.SmartTrader.#=qfzSH89$Mv8Ofzu2y$3js_kysbq$NiANKIBBTSpnvTGs=.#=q4mbFJ60V1bPbFeGAvyC1ibxEquGFFRHMAVcij6R3Spg=(Security #=qxrfNJbw0xpwzUWGXMStJHw==)
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.Smart.SmartTrader.#=qwRaN51iZmc1S0J9GUiteXg==(Int32 #=qcKJ3I5IWFH9VGLCcFIxLWQ==, Int32 #=qd_HFLT8KhQdYPYrriX3Z0w==, String #=qA26HfIyr1Hp1awyY$ScCNw==, String #=q4kT6hRtHz0cB30gzvW2Uow==, String #=qxsnZ7xnxtOVt_x2Uv9kPPQ==, String #=q7F54ujMZTFZrOrnYJVfk4g==, Int32 #=qtR35YFeUwJZKl7$1hymQrw==, Int32 #=qLReP$4l4o5IgcNxSE8j0Vw==, Decimal #=qrciuxaDj5NbwitmG7x6PgQ==, Decimal #=qf54825kg7L9SdT_qlB4SKg==, String #=qtQxI15g5cUMatZ_YBKWP9w==, String #=q4MEPte6Q5ZnUsivjDz2KOQ==, Nullable`1 #=qekZ0Fn305HW0Pt3gP6Gk0Q==, Decimal #=qrrUBO3JMgQ6dy_R0YmVzQuFxkjDU6Vy_S_1hGd0cj2w=, Decimal #=qdaiuwzZ5XwfDPHIrdJ59ew==)
at Ecng.Common.DelegateHelper.SafeInvoke[T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15](Action`15 handler, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15)
at StockSharp.Smart.SmartComWrapper.#=qfzSH89$Mv8Ofzu2y$3js_qgdS7SCdhEpMj2tiPnQ2bQ=.#=qD19bRnre6gLZZNWHAbtsdbqqmA2tHEYXwNn2tuxYMQk=()
at StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)


Upd. По этой ненорме создал тикет на codeplex:

http://stocksharp.codeplex.com/workitem/952
trades.jpg 101,5KB (0)

Теги:


Спасибо:




19 Ответов
Mikhail Sukhov

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


sda Перейти

Сегодня на вечернем клиринге с моего счета списали мартовские опционы вне денег. Эти операции отдаются со стороны торговой системы как сделки с нулевым orderTransactionId. В результате при получении сделок возникает exception:


Можно попробовать добавить поддержку. Кроме этого есть еще какие особенности в транслировании данных? Если поставочный фьючерс, то так же делают исполнение через сделки?
Спасибо:

sda

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


Опыта работы с поставочными инструментами у меня нет. Но в случае с экспирацией опционов вне денег ситуация, на мой взгляд, ясная. Сделка по списанию опциона регистрируется в торговой системе, но не регистрируется на сервере котировок. Полагаю так будет для всех опционов вне денег на все базовые активы.

По-поводу особенностей трансляции данных. По событию NewSecurities данные со стороны торговой системы загружаются заметно долго даже на железной машине, на витруалке должно быть еще дольше. Причем большая часть загружаемой информации - это данные по экспирированным инстументам и они, как правило, не нужны. Думаю, имело бы смысл реализовать в SmartTrader'е загрузку справочника инстументов из файла + добавлять туда новые инструменты. Могу сделать сам, но нужен доступ к исходнику коннектора.
Автор топика
Спасибо:

Mikhail Sukhov

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


sda Перейти

По-поводу особенностей трансляции данных. По событию NewSecurities данные со стороны торговой системы загружаются заметно долго даже на железной машине, на витруалке должно быть еще дольше. Причем большая часть загружаемой информации - это данные по экспирированным инстументам и они, как правило, не нужны. Думаю, имело бы смысл реализовать в SmartTrader'е загрузку справочника инстументов из файла + добавлять туда новые инструменты. Могу сделать сам, но нужен доступ к исходнику коннектора.


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

sda

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


Терминал - это SmartTrade или SmartX? Но они не используют SmartCOM. Как они могут фильтровать вывод AddSymbol? Уверен, что никак не могут.
Автор топика
Спасибо:

Mikhail Sukhov

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


sda Перейти
Терминал - это SmartTrade или SmartX? Но они не используют SmartCOM. Как они могут фильтровать вывод AddSymbol? Уверен, что никак не могут.


А вы спросите у тех поддержки АйТи по поводу протухших инструментов.
Спасибо:

sda

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


Михаил, я использую SmartCOM API довольно интенсивно для программирования собственной оснастки для торговли опционами, поэтому разбираюсь в этом софте хорошо. Сейчас потихоньку осваиваю StockSharp.

Так вот, ни в SmartCOM API, ни в торговых терминалах IT Invest нет возможности формировать вывод AddSymbol. Это событие всегда передает информацию по всем инструментам, какие есть на торговой площадке. Далее приходится забирать нужные инструменты из того, что получено посредством этого события, после этого подписывать эти инструменты на событие UpdateQuote. В-принципе AddSymbol можно и не использовать- для того чтобы подписать инструмент на UpdateQuote нужны только название инструмента в торговой системе и название портфеля.

В StockSharp объект Security аккумулирует всю информацию, получаемую от двух событий - AddSymbol и UpdateQuote. Поэтому я не уверен, что здесь вообще можно обойтись без использования AddSymbol, и, на мой взгляд, скорость загрузки справочника целесообразно оптимизировать указанным выше способом.
Автор топика
Спасибо:

Mikhail Sukhov

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


sda Перейти
Михаил, я использую SmartCOM API довольно интенсивно для программирования собственной оснастки для торговли опционами, поэтому разбираюсь в этом софте хорошо.


Тем не менее, я рекомендую этот вопрос уточнить у тех поддержки. Если я ошибаюсь, то посыплю голову пеплом (хотя будет странно, так как ранее я это проделывал не раз). Если вы ошибаетесь, то вы получите информацию, как уйти от этой проблемы стандартными средствами брокера. В любом случае мы получим информацию, бесплатно и существенно полезную.
Спасибо:

sda

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


Лог переписки с поддержкой.


К сожалению, на данный момент никак.

-----Original Message-----
From: Дмитрий Седов [mailto:XXX@XXX]
Sent: Monday, March 19, 2012 3:18 PM
To: SmartCOM
Subject: Re[4]: Прошу разъяснить некоторые особенности работы SmartCOM API.

То, что список инструментов закачивается не мгновенно, это, в-общем, не страшно. Неприятно, что в момент его получения замирает программа - даже несмотря на событийную модель и многоядерность. Не подскажите, как можно избежать этого "замирания"?


Mon, 19 Mar 2012 15:10:37 +0700 от "SmartCOM" <smartcom@iqi.ru>:
> Полный список инструментов приходит от 3 до 15 секунд.
>
> -----Original Message-----
> From: Дмитрий Седов [mailto:XXX@XXX]
> Sent: Monday, March 19, 2012 3:03 PM
> To: SmartCOM
> Subject: Re[2]: Прошу разъяснить некоторые особенности работы SmartCOM API.
>
> На форуме S# обсуждаем особенности получения справочников инструментов посредством SmartCOM. Вот линк на тему, если интересно. Дискуссия возникла ближе к концу темы:
>
> https://stocksharp.ru/fo...mentOutOfRangeException/
>
> Mon, 19 Mar 2012 14:59:50 +0700 от "SmartCOM" <smartcom@iqi.ru>:
> > Добрый день.
> > К сожалению никак.
> > А в чём проблема отфильтровать при получении и лишнее не брать.
> >
> > -----Original Message-----
> > From: Дмитрий Седов [mailto:XXX@XXX]
> > Sent: Monday, March 19, 2012 2:48 PM
> > To: smartcom
> > Subject: Прошу разъяснить некоторые особенности работы SmartCOM API.
> >
> > Добрый день!
> >
> > Подскажите, пожалуйста, существует ли возможность по событию StClientLib.StServer.AddSymbol получить не все множество инструментов, какие есть в системе, а только часть их. Например только те, у которых еще не наступил срок экспирации. Возможно это можно как-то сделать посредством других событий или задать для этого какие-то настройки в торговых терминалах IT Invest?
> >
> > Дмитрий Седов.
> >
>
Автор топика
Спасибо:

Mikhail Sukhov

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


sda Перейти
Лог переписки с поддержкой.


К сожалению, на данный момент никак.


Попробуйте сделать вот так http://www.itinvest.ru/f...ndex.php?showtopic=63472
Спасибо:

sda

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


Михаил, у меня сложилось впечатление, что Вы неверно представляете себе процесс обновления инструментов в торговых терминалах IT Invest. Он происходит так:

- на момент инсталляции у терминала есть локальная копия справочника инструментов.
- эта локальная копия справочника никогда не обновляется автоматически.
- обновить справочник инстументов можно вручную, выбрав пункт меню "Обновить справочники" или нажав на соответствующую кнопочку на панели инструментов. Это аналог GetSymbols/AddSymbol.
- когда Вы добавляете или удаляете инстументы в "избранном" или в таблице кодировок, справочник не обновляется. Это аналог ListenQuotes/UpdateQuote.
Автор топика
Спасибо:

Mikhail Sukhov

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


sda Перейти
Михаил, у меня сложилось впечатление, что Вы неверно представляете себе процесс обновления инструментов в торговых терминалах IT Invest.


Давайте пойдем по логическому пути. Я правильно понял, что тех поддержка гарантировала, что протухшие опционы будут всегда приходить, месячной давности, декадной, годовой, пяти летней? И избавиться от этого нельзя? Или все же какой-то способ существует?
Спасибо:

sda

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


Ну, не совсем так. На клиента по GetSymbols/AddSymbol закачивается информация обо всех инструментах, какие есть в справочнике инструментов на стороне брокера (торговой системы?). Если в справочнике есть инструменты, проэкспирировавшиеся пять лет назад, то они закачаются на клиента. Если, допустим, эти инструменты на стороне брокера из справочника удалили, они на клиента не закачаются.

Штатных средств для выборочного обновления справочника ни в SmartCOM, ни в терминалах IT Invest нет. Во всяком случае в документации они не описаны.
Автор топика
Спасибо:

Mikhail Sukhov

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


Поговорил с тех поддержкой. Они чистят протухшие контакты. Как часто - не понятно.
Спасибо:

sda

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


Поскольку от первоначальной темы треда мы все равно отклонились, а ветка форума называется "Фичи и пожелания", позволю себе пожелать еще три фичи. :)

1. Свойство SmartTrader'а, сигнализирующее об окончании передачи справочника по GetSymbols/AddSymbol.

Точное время окончания процесса получения инструментов справочника неизвестно, поэтому было бы неплохо однозначно идентифицировать состояние этого процесса: {получение инструментов идет, получение инструментов завершилось}.

Как сделать. В обработчик AddSymbol для каждого инструмента передают его номер в справочнике + количество инструментов в справочнике. Если номер инструмента равен количеству инструментов в справочнике, то процесс передачи справочника завершен.


2. В DerivativeHelper есть методы, которые по коду инструмента или объекту типа Security выдают другие объекты типа Security: GetDerivatives, GetSecurity и проч. Причем при вызове этих методов характерного для GetSymbols "замирания" программы не происходит. То есть, насколько я понимаю, SmartTrader создает внутри себя справочник инструментов, а потом либо предоставляет доступ к объектам справочника, или копирует их. Было бы неплохо получить доступ к этому справочнику - в какой-то форме помимо вызова NewSecurities.


3. Хотелось бы справку по функционалу Ecng.*, например такую же, как для Stocksharp.*
Автор топика
Спасибо:

Mikhail Sukhov

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


1. Это вообще неправильный стиль. На это не нужно затачиваться.
2. см ITrader.
3. Можно, но нужно немногим, а делать некому.
Спасибо: sda

sda

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


1. В-принципе, без этого свойства можно обойтись, например, отслеживая динамику изменения количества элементов в ITrader.Securities. Получаются приемлемые задержки по времени. Хотя если бы можно было однозначно идентифицировать окончание получения справочника, было бы проще.

2. Да, ITrader.Securities. Спасибо за подсказку!

3. Подозреваю, что просто немногие способны достаточно глубоко разобраться в этом инструментарии. Можно было бы создать что-то вроде user guide или how-to.
Автор топика
Спасибо:

Alexander

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


sda Перейти
3. Подозреваю, что просто немногие способны достаточно глубоко разобраться в этом инструментарии. Можно было бы создать что-то вроде user guide или how-to.


Готовы взяться?
Спасибо:

sda

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


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

Alexander

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


у нас свободных рук не хватает )
Спасибо:


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

loading
clippy