API 4.3.14.2(особенности, изменения, замечания, новинки, баги)

API 4.3.14.2(особенности, изменения, замечания, новинки, баги)
Atom
4/21/2016
Slepoy


Чтобы не плодить тонну постов - я предлагаю под каждый новый/старый релиз API создать одну ветку-пост, в которой описывать все замечания по конкретному релизу. В общем, данный пост про конретный релиз API 4.3.14.2, пишем сюда все замечания касательно только данного релиза. Когда выйдет новый релиз API 4.3.15 - под него создадим новый пост. Так будет более-менее упорядоченно.


Сегодня заметил опечатку, ну я предполагаю что это опечатка, т.к. исходники не глядел. Событие StopOrderRegistered класса Strategy, в версии API 4.3.13 называлось по нормальному "Событие об успешной регистрации стоп-заявки". В новом API 4.3.14.2 имя изменилось на "Событие об ошибке регистрации стоп-заявки", хотя событие отвечающее за это - уже есть StopOrderRegisterFailed. В итоге, появился дубль. Два события StopOrderRegistered и StopOrderRegisterFailed, - судя по описанию, выполняются одно и тоже. Я думаю это опечатка, хотя хрен его знает.

http://i9.pixs.ru/storage/2/5/8/Opechatkaj_2093534_21643258.jpg

Tags:


Thanks: Mikhail Sukhov


< 1 2 
Slepoy

Avatar
Date: 5/7/2016
Reply


Gavrus
Кто в курсе, подскажите, пожалуйста. При использовании старого подключения к Quik по DDE, раньше до версии 4.3.13 все работало, все таблицы нормально из квика экспортировались, но с версии 4.3.14 экспорт из квика по DDE запускается а в QuikTrader они не поступают ((((
В чем проблема??? Этот функционал не работает в ПРИМЕРАХ!


Я бы на твоём месте забил на ДДЕ, и начал бы перебираться на ЛУА. Походу всё идёт к тому, что ДДЕ скоро вообще полноcтью выпилят из API. Поддерживать устаревший и неудобный коннектор "ДДЕ+библиотека_транзакций" - это лишние трудо/время/бабло-затраты. Я бы на их месте ДДЕ - полностью бы выпилил.
Thanks:

daniil.tr

Avatar
Date: 5/10/2016
Reply


День добрый.
При использовании примера Quik для подключения к бирже по протоколу FIX получаю непонятную ошибку "Value is empty"
Code
2016/05/10 17:09:21.709| |Quik LUA. Market data|Connect to Unspecified/api.okcoin.cn:9880...
2016/05/10 17:09:22.100| |Quik LUA. Market data|Connect to Unspecified/api.okcoin.cn:9880 is OK.
2016/05/10 17:09:22.101| |Quik LUA. Market data|Sending logon to Unspecified/api.okcoin.cn:9880...
2016/05/10 17:09:22.101| |Quik LUA. Market data|Logon sent to Unspecified/api.okcoin.cn:9880 OK.
2016/05/10 17:09:22.101| |Quik LUA. Market data|Start message processing.
2016/05/10 17:09:22.101|Debug |Quik LUA. Market data|To server: 8=FIX.4.4^9=183^35=A^49=тут_мой_apiKey^56=OKSERVER^52=20160510-14:09:22.101^34=1^98=0^108=60^141=Y^553=тут_мой_apiKey^554=тут_мой_secretKey^10=170^
2016/05/10 17:09:22.900|Error |Quik LUA. Market data|System.InvalidOperationException: Value is empty.
в StockSharp.Fix.Native.TextFixReader.ReadTag()
в #=qfRZ7pemjxpoxPmObVEtIBevMOyapMU_VyornAvZTO0ahyDqZVsf9rv_PEclzz1MA.#=qgSGR1SDFtSJUIe7X8zQRtA==(IFixReader #=q2nUiutBfR3eEUh$g9VIiog==, FixTags #=qyAk4CplYsCM0dwrEZFWo1g==)
в #=qfRZ7pemjxpoxPmObVEtIBevMOyapMU_VyornAvZTO0ahyDqZVsf9rv_PEclzz1MA.#=q0GRsD49WfcxbovznA_zmCg==(IFixReader #=q2nUiutBfR3eEUh$g9VIiog==, Boolean #=qH4GbWm32Qz5RrC_8REtIYEF$4P06GyVkVvT0r7inCME=, String #=qf0AhNgro1T3fdZ_Bb39oHvb06UnwOVzcKNFbiV4WruU=)
в StockSharp.Fix.Dialects.BaseDialect.#=qIArNFQzajJFGrfxlNMukiveeY00y8P2AH72zybI1DibwwcTDMHW3BJOHjCBxZK5I()
в StockSharp.Fix.FixMessageAdapter.#=q6swou73IYqd_6BZJhaj5HnS_D9hOtWLhD3osscl99dY=()


Тоже самое при использовании коннектора FIX в S#.Designer
Code
07:09:41.644| |FIX |Connect to Unspecified/api.okcoin.com:9880...
07:09:42.282| |FIX |Connect to Unspecified/api.okcoin.com:9880 is OK.
07:09:42.283| |FIX |Sending logon to Unspecified/api.okcoin.com:9880...
07:09:42.289| |FIX |Logon sent to Unspecified/api.okcoin.com:9880 OK.
07:09:42.290| |FIX |Start message processing.
07:09:42.290|Debug |FIX |To server: 8=FIX.4.4^9=183^35=A^49=тут_мой_apiKey^56=OKSERVER^52=20160510-14:09:42.301^34=1^98=0^108=60^141=Y^553=тут_мой_apiKey^554=тут_мой_secretKey^10=174^
07:09:42.853|Error |FIX |System.InvalidOperationException: Value is empty.
at StockSharp.Fix.Native.TextFixReader.ReadTag()
at #=qjcT_UIgnP6ct_8MlSJzskygE6_7pKDeVFDL8TazXe3jwu0vjz1tfLwP8yKUs8CKf.#=q7DNsH2BfhTAZ62x_nJ4yvw==(IFixReader #=qWClUTYppieHCCFUE17PPsA==, FixTags #=qRivLCfBsSqVVqvJFVrcByw==)
at #=qjcT_UIgnP6ct_8MlSJzskygE6_7pKDeVFDL8TazXe3jwu0vjz1tfLwP8yKUs8CKf.#=qP$RDNtHVUjZjqK0v4gNDcQ==(IFixReader #=qWClUTYppieHCCFUE17PPsA==, Boolean #=q2TxyjlA$EpSYr0SSJLBtJkPog3yNlztOjMLZB0Cl0Rg=, String #=qDVBLmRjIXvz$8vd$MGLUwsZLAGAkQIbLmA9fILFZV20=)
at StockSharp.Fix.Dialects.BaseDialect.#=qGKC61oyjqwiWbG1NxVPW74z9sTe8CEKazn3PrVBDqL4RUK5gwTnQoR7lQRnsxOKW()
at StockSharp.Fix.FixMessageAdapter.#=qMnHVF443p6vFEntqz22V_mofNpmLxVpg9xIMaWn5ohk=()
07:09:42.855|Debug |FIX |Session 'api.okcoin.com:9880 Sender тут_мой_apiKey Target OKSERVER'. Received: ''
07:09:42.855|Error |BasketMessageAdapter|Connection error for FixMessageAdapter: System.InvalidOperationException: Value is empty.
at StockSharp.Fix.Native.TextFixReader.ReadTag()
at #=qjcT_UIgnP6ct_8MlSJzskygE6_7pKDeVFDL8TazXe3jwu0vjz1tfLwP8yKUs8CKf.#=q7DNsH2BfhTAZ62x_nJ4yvw==(IFixReader #=qWClUTYppieHCCFUE17PPsA==, FixTags #=qRivLCfBsSqVVqvJFVrcByw==)
at #=qjcT_UIgnP6ct_8MlSJzskygE6_7pKDeVFDL8TazXe3jwu0vjz1tfLwP8yKUs8CKf.#=qP$RDNtHVUjZjqK0v4gNDcQ==(IFixReader #=qWClUTYppieHCCFUE17PPsA==, Boolean #=q2TxyjlA$EpSYr0SSJLBtJkPog3yNlztOjMLZB0Cl0Rg=, String #=qDVBLmRjIXvz$8vd$MGLUwsZLAGAkQIbLmA9fILFZV20=)
at StockSharp.Fix.Dialects.BaseDialect.#=qGKC61oyjqwiWbG1NxVPW74z9sTe8CEKazn3PrVBDqL4RUK5gwTnQoR7lQRnsxOKW()
at StockSharp.Fix.FixMessageAdapter.#=qMnHVF443p6vFEntqz22V_mofNpmLxVpg9xIMaWn5ohk=()
07:09:42.855|Error |Connector |System.InvalidOperationException: Value is empty.
at StockSharp.Fix.Native.TextFixReader.ReadTag()
at #=qjcT_UIgnP6ct_8MlSJzskygE6_7pKDeVFDL8TazXe3jwu0vjz1tfLwP8yKUs8CKf.#=q7DNsH2BfhTAZ62x_nJ4yvw==(IFixReader #=qWClUTYppieHCCFUE17PPsA==, FixTags #=qRivLCfBsSqVVqvJFVrcByw==)
at #=qjcT_UIgnP6ct_8MlSJzskygE6_7pKDeVFDL8TazXe3jwu0vjz1tfLwP8yKUs8CKf.#=qP$RDNtHVUjZjqK0v4gNDcQ==(IFixReader #=qWClUTYppieHCCFUE17PPsA==, Boolean #=q2TxyjlA$EpSYr0SSJLBtJkPog3yNlztOjMLZB0Cl0Rg=, String #=qDVBLmRjIXvz$8vd$MGLUwsZLAGAkQIbLmA9fILFZV20=)
at StockSharp.Fix.Dialects.BaseDialect.#=qGKC61oyjqwiWbG1NxVPW74z9sTe8CEKazn3PrVBDqL4RUK5gwTnQoR7lQRnsxOKW()
at StockSharp.Fix.FixMessageAdapter.#=qMnHVF443p6vFEntqz22V_mofNpmLxVpg9xIMaWn5ohk=()


В чем может быть проблема? Что я делаю не так? Непонятно в какую сторону копать...
Thanks:

Mikhail Sukhov

Avatar
Date: 5/10/2016
Reply


QuikTrader может подключаться только к терминалу. FixTrader к бирже напрямую, но это уже платный коннектор https://stocksharp.com/pricing/
Thanks: daniil.tr

daniil.tr

Avatar
Date: 5/11/2016
Reply


Михаил, спасибо за ответ.
Подскажите еще пожалуйста, в S#.Designer коннектор FIX тоже платный??
Есть ли какая-то триал/демо версия FixTrader для пробы? А то не хочется брать кота в мешке ))
Thanks:

Mikhail Sukhov

Avatar
Date: 5/11/2016
Reply


daniil.tr
Михаил, спасибо за ответ.
Подскажите еще пожалуйста, в S#.Designer коннектор FIX тоже платный??
Есть ли какая-то триал/демо версия FixTrader для пробы? А то не хочется брать кота в мешке ))


Стоимость коннектора не зависит от того, где он используется. Но в Дизайнере пока нет фичи live подключения к торгам вообще. Только бэктест.
Thanks: daniil.tr

risty

Avatar
Date: 5/11/2016
Reply


http://stocksharp.ru/for...Express-Xpf-Core-v15-2/
вот эта тема имеет место быть.
Thanks:

agat50

Avatar
Date: 5/11/2016
Reply


risty
http://stocksharp.ru/forum/5378/DevExpress-Xpf-Core-v15-2/
вот эта тема имеет место быть.


+1, тоже встретил. Со SmartCom коннектором какие-то проблемы постоянные, примеры SampleSmartCandles SampleSmartSMA не работают нормально (не подгружаются инструменты например), на 3.13 нормально, пришлось откатиться.
Thanks:

risty

Avatar
Date: 5/17/2016
Reply


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

Slepoy

Avatar
Date: 6/17/2016
Reply


Инфа для пользователей сидящих на API 4.3.14.2. Настоятельно рекомендую обновится до новой версии API 4.3.15, которая вышла на этой неделе: https://github.com/StockSharp/StockSharp/releases
В версии API 4.3.14.2 есть баг в Менеджере Позиции, конкретно при расчёте позиции исходя из реализованного объёма заявки, т.е. когда мы создаём объект передавая его конструктору true, т.е. пишем "new PositionManager(true)". Тем самым мы устанавиваем свойство byOrders в значение true. И если у вас где-то в коде используется именно такая запись "new PositionManager(true)" то ждите беду, у вас будет неверно подсчитыватся позиция. Дело в том, что в версии API 4.3.13 было вообще два отдельных метода, один расчитывал позицию по заявкам, т.е. для объекта "new PositionManager(true)", другой же метод расчитывал позицию по сделкам, т.е. для объекта "new PositionManager(false)". В версии API 4.3.14.2 эти два метода свели в один ProcessMessage() в котором и допустили косяк. Причём косяк лишь для расчёта по заявкам, при расчёте по сделкам всё работает как надо. То есть, если вы создали объект "new PositionManager(false)", то всё работает хорошо, позиция подсчитывается верно. Но если вы создали объект "new PositionManager(true)" то позиция будет почти всегда меньше реальной. Я этот косяк заметил где-то с полмесяца назад, когда изучал видеоуроки, конкретно "Урок 3. Часть 2. Strategy Rule", где была элементарная стратегия, которая должна была набрать определённную лонговую позу единичными заявками. Так вот, стратегия почти всегда перебирала больше чем надо. К примеру, ставим набрать 10 лотов, так стратегия реально наберёт то 12, то 13, то 14, то 21. И вся проблема была именно в том, что в класс Strategy не умеет создавать объект "new PositionManager(false)", в исходниках жестко приписана строчка "private IPositionManager _positionManager = new PositionManager(true);". То есть, нет возможности вручную изменить способ расчёта позиции. Чтобы создать своего Менеджера Позиции со свойством byOrders= false, мне пришлось ещё и переопределять метод OnNewMyTrades(), брать коллекцию моих пришедших сделок, перебирать её, и для каждую сделку ковертировать в объект-сообщение, и передавать его методу ProcessMessage(). В обещем, косяк разработчики заметили и поправили в новом API 4.3.15. Плохо лишь одно, что я на решение проблемы убил неделю-полторы времени, и когда я хотел уже пожаловаться отдельным постом, то тут и вышел новый API ))). Я даже картинку заготовил и всё в пустую ))). Кому интересно, картинка тута: http://i9.pixs.ru/storage/7/9/8/314h10jpg_2030394_22379798.jpg
http://i9.pixs.ru/storage/7/9/8/314h10jpg_2030394_22379798.jpg


Просьба к разработчикам. В новом API ввести в класс Strategy свойство byOrders, чтобы пользователь при создании объекта стратегии мог бы сам выбирать метод расчёта позы: по заявкам/по сделкам. То есть, записать так: private IPositionManager _positionManager = new PositionManager(byOrders); Можете byOrders сразу установить true, чтобы ни у кого не полетели роботы. И кому надо, те при создании объекта стратегии сами сменят данное свойство на false. Тем более, текущие исходники даже менять не нужно, ибо уже текущий код в классе Strategy поддерживает это, он фактически сейчас даже избыточен. Исходники уже учитывают отправку методу обектов-сообщений на основе сделок "PositionManager.ProcessMessage(trade.ToMessage());". То есть все уже и так готово. Делать практически ничего не нужно - лишь добавить свойство byOrders.
Thanks:

Kudryavtsev

Avatar
Date: 6/18/2016
Reply


В этой версии библиотек у меня "не работают" ваши примеры SimpleHistoryTesting и SimpleRandomEmulation (другие не смотрел). Компилируются и запускаются без проблем, но при нажатии кнопки Старт [confused].
Thanks:
< 1 2 

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy