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


Чтобы не плодить тонну постов - я предлагаю под каждый новый/старый релиз 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

Теги:


Спасибо: Mikhail Sukhov




20 Ответов
Den

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


SampleQuik S# 4.3.14.2 и Quik 7.1.2.2 от БКС.
В логах вижу

|LuaServer |LookupOrders
|LuaServer |Orders count: 12
|LuaServer |LookupOrders done
|LuaServer |LookupTrades
|LuaServer |Own trades count: 16
|LuaServer |LookupTrades done

Но события NewMyTrades, NewOrders не вызываются...
Спасибо:

Mikhail Sukhov

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


Den Перейти
SampleQuik S# 4.3.14.2 и Quik 7.1.2.2 от БКС.


На демо БКС 7.1.1.16 работает. Изменение в версии минимальное, думаю, что причина в каких-то ваших настройках локальных.
Спасибо:

shipa988

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


У меня в новой версии не получает инструменты. Портфель приходит, инструменты нет. демо БКС 7.1.1.16
Спасибо:

Mikhail Sukhov

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


shipa988 Перейти
У меня в новой версии не получает инструменты. Портфель приходит, инструменты нет. демо БКС 7.1.1.16


Пример запускали?
Спасибо:

shipa988

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


Да запускал! он то и не работает. Предыдущая версия stocksharp успешно работает и сейчас. Однако предыдущая версия с демо БКС 7.1.1.16 не регистрирует заявки(говорит что не верно указан торговый счет). Хотя с Quik с официального сайта АРКА 7.2.0.45 все проходит. Вот такие вот загадки((
Спасибо:

Mikhail Sukhov

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


shipa988 Перейти
(говорит что не верно указан торговый счет).


Логи клиента и сервера под режимом Дебаг.
Спасибо:

shipa988

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


0001/01/01 00:00:00.000| |QuikTrader|Connect
2016/05/05 13:49:34.642|Debug |Quik LUA. Market data|To server: 8=FIX.4.4^9=95^35=A^49=quik^56=StockSharpMD^52=20160505-10:49:34.640^34=1^98=0^108=60^141=Y^553=quik^554=quik^10=174^
2016/05/05 13:49:34.643|Debug |Quik LUA. Transactions|To server: 8=FIX.4.4^9=95^35=A^49=quik^56=StockSharpTS^52=20160505-10:49:34.640^34=1^98=0^108=60^141=Y^553=quik^554=quik^10=196^
2016/05/05 13:49:36.103| |Quik LUA. Transactions|From server: Logon
2016/05/05 13:49:36.103| |Quik LUA. Market data|From server: Logon
2016/05/05 13:49:36.106|Debug |QuikTrader|BP:Connect,T(L)=2016.05.05 13:49:36.109
2016/05/05 13:49:36.115|Debug |Quik LUA. Market data|Сессия 'server'. Получено: '8=FIX.4.0^9=59^35=A^49=quik^56=StockSharpMD^52=20160505-10:49:36.105^34=1^10=052^'
2016/05/05 13:49:36.115|Debug |Quik LUA. Transactions|Сессия 'server'. Получено: '8=FIX.4.0^9=59^35=A^49=quik^56=StockSharpTS^52=20160505-10:49:36.105^34=1^10=074^'
2016/05/05 13:49:36.109|Debug |QuikTrader|BP:Connect,T(L)=2016.05.05 13:49:36.109
2016/05/05 13:49:36.122|Debug |Quik LUA. Market data|To server: 8=F]новый quik[/img]
[img=]старый quik[/img]
Спасибо:

shipa988

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


сами файлы
Спасибо:

Mikhail Sukhov

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


shipa988 Перейти
сами файлы


Код
t["ACCOUNT"] = "S0-USA"
t["CLASSCODE"] = "TQBR"
t["SECCODE"] = "SBER"
t["QUANTITY"] = "50"
t["CLIENT_CODE"] = "50950"
t["EXPIRY_DATE"] = "GTC"
t["OPERATION"] = "B"
t["TYPE"] = "M"
t["ACTION"] = "NEW_ORDER"
t["PRICE"] = "0"
t["EXECUTION_CONDITION"] = "PUT_IN_QUEUE"
t["TRANS_ID"] = "55599460"


Это транзакция. И дальше вам ответ от Квика, что неверно указан номер счета. Что не так - это вам к Арке или брокеру. S# корректно все данные отправил в терминал и корректно получил по ним ответ.
Спасибо:

Gavrus

Фотография
Курсы Благотворитель
Дата: 06.05.2016
Ответить


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

Slepoy

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


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


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

daniil.tr

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


День добрый.
При использовании примера Quik для подключения к бирже по протоколу FIX получаю непонятную ошибку "Value is empty"
Код
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
Код
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=()


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

Mikhail Sukhov

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


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

daniil.tr

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


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

Mikhail Sukhov

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


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


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

risty

Фотография
Программист
Дата: 11.05.2016
Ответить


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

agat50

Фотография
Программист
Дата: 11.05.2016
Ответить


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


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

risty

Фотография
Программист
Дата: 17.05.2016
Ответить


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

Slepoy

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


Инфа для пользователей сидящих на 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.
Автор топика
Спасибо:

Kudryavtsev

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


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


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

loading
clippy