S#.API 4.2 (Закрыта)
Atom
14.11.2013


Выложили 4.2.0

Фичи:
  • События обработки данных коннекторов вызываются из одного потока.
  • Коннекторы Quik, Plaza, SmartCOM, LMAX, FIX, Blackwood переведены на работу через сообщения.
  • RealTimeEmulationTrader работает только с коннекторами переведенными на сообщения.
  • Добавлен MessagesBasketTrader для коннекторов, которые переведены на работу с сообщениями. BasketTrader не работает с коннекторами, которые переведены на сообщения.
  • Полностью переделаны MarketEmulator и EmulationTrader.
  • Для Quik добавлена поддержка T+2, для каждого вида лимита приходит отдельная позиция (поле Position.LimitType).
  • ITrader добавлена поддержка поиска портфелей.
  • Security.MinStepSize по умолчанию равен 0.01.
  • Portfolio.ExchangeBoard является необязательным.
  • Exchange.Me переименована в Exchange.Moex
  • SecurityChangeTypes переименован в Level1Fields.
  • При использовании ContinuousSecurity в правилах проверяется только текущий инструмент.
  • При ошибке снятия заявки состояние не меняется.
  • Поддержка множества счетов в одном файле лицензии.
  • В Blackwood добавлены настройки для пути к логам.
  • Добавлен расширенный редактор настроек (Xaml.PropertyGrid).
  • Добавлена панель для поиска инструментов (Xaml.SecurityLookupPanel).

Баги:

Теги:


Спасибо: Bond pafnuty wkj risty




117 Ответов
1 2 3  > >>
Mikhail Sukhov

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


Немного про пункт:

Quote:
События обработки маркет данных коннекторов вызываются из одного потока.


За этим пунктом скрывается наша мажорная фича 4.2. Начиная с версии 4.2.0 в StockSharp появился новый уровень - Messages. Данный уровень позволяет работать с внешними торговыми системами, используя их диалектику через общией интерфейс Messages (Сообщения). Отличие от ITrader состоит в том, что ITrader скрывает детали работы с внешней системой, в то время как Messages (через IMessageAdapter) наоборот - позволяет работать с ними.

Уровень Messages более приспособлен к HFT роботам, так как он напрямую отдает данные во внешние системы. Он не потоко безопасен, поэтому все блокировки или очереди необходимо делать самому, если будет идти работа с этим уровнем напрямую (как это делает сейчас BaseTrader через MessageProcessor). Так же внутри максимально убраны различного уровня задержки ввиде коллекций или накапливаемых очередей. В MessageAdapter торговая система вызывается из того же потока, что и вызываемый код. Аналогично работает и с IMessageAdapter.NewMessage.

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

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

Адаптеры так же разделены на 2 типа. Для маркет-данных и для транзакций. Тоесть можно, к примеру, получать данные из одного датафида, а торговать через другой.

На месседжи пока переведены следующие коннекторы: Quik, SmartCOM, Plaza (оба режима), Fix, Fusion (Blackwood). В след релизе точно переведены будут Alfa, IB, OEC, Transaq. Остальное чуть позднее.

Просьба помочь с тестирование новой версии, так как переделки были значительные.

Обратная совместимость со старыми роботами практически полностью поддержана (нокоторые enum перекочевали из BusinessEntities в Messages). Использование BeginRead BeginUpdate у сущностей теперь не нужно, так как поток обновления используется в BaseTrader один.
Спасибо: Bond

transdex

Фотография
Дата: 14.11.2013


Михаил Сухов Go to

Нет, именно разделение датафида от транзакций - это извращение. Сделали буржуи, потому что у них бизнес разделен. Технологически - это самый что ни на есть обычный косяк в архитектуре. Практически сразу же добавляется геморрой с синхронизацией состояния заявок, получения своих позиций, сделок... Вообще сущий ад с рас синхронизацией данных, и меток времени. И которые решаются уплатой лишних пару тысяч в месяц, чтобы доапгрейдить readonly логин до нормального. Из-за пары то тысяч себе такие приключение? Увольте.



Михаил Сухов Go to

Адаптеры так же разделены на 2 типа. Для маркет-данных и для транзакций. Тоесть можно, к примеру, получать данные из одного датафида, а торговать через другой.


Прогресс, однако... BigGrin





Спасибо: Mikhail Sukhov

Mikhail Sukhov

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


transdex Go to


Тонкая работа!ThumpUp

Но я своего мнения не поменял. Те брокера, что дают датафид, имеют и новую инфраструктуру. А те, что не дают ДФ, имеют или устаревшее или сами пишут, что в переходном состоянии. Скорее уж решение было в сторону потребности. Против тренда стоять в технологиях накладно.

Забыл написать про еще одну причину, почему месседжи возникли. Универсальный клей для разных блоков. Например, есть коннекторы, есть стратегии, есть блок для риск менеджмента, есть блок расчета ПнЛ. Это все разные блоки, и необходимо их склеить одним единым интерфейсом. IMessageAdapter в этом случае подходит как нельзя лучше. Да, это не ООП, но для взаимодействия независимых систем такое решение является стандартом.
Спасибо:

esper

Фотография
Программист
Дата: 17.11.2013


Выложили 4.2.1

Фичи:
  • Interactive Brokers TWS API обновлено до версии 9.70.

Баги:
Автор топика
Спасибо:

alexan3010

Фотография
Дата: 18.11.2013


Что то у меня на коннекторе SmartCom вообще ничего не идет после обновления до 4.2.
Все подключается, портфели и инструменты получаются, а данные и изменения не идут. Примеры Samples тоже ни один не работает.
Какие уточнения прислать?

У меня есть простенькое приложение консольное, написанное на базе соответствующего вашего Sample.
В 4.1.19 оно писалось и работает.
В 4.2.1 оно затыкается на

_trader.RegisterSecurity(_ri);
waitHandle.WaitOne();

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

Mikhail Sukhov

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


alexan3010 Go to
Что то у меня на коннекторе SmartCom вообще ничего не идет после обновления до 4.2.
Все подключается, портфели и инструменты получаются, а данные и изменения не идут. Примеры Samples тоже ни один не работает.
Какие уточнения прислать?


Скажите сначала что вы запускаете? Пример под СмартКом называется SampleSmart, а не Samples.
Спасибо:

alexan3010

Фотография
Дата: 18.11.2013


Запускал я все по очереди.
Описывал свое приложение, на базе SampleSmart.

Сейчас с нуля набросал простенькое приложение в 4.1.19 которое коннектится, получает портфели и инструменты и начинает выводить в лист-бокс Close свечек. В 4.1.19 все нормально. Потом я выхожу из VS, подменяю библиотеку на 4.2.1, запускаю VS, открываю то приложение которое было написано 5 минут назад под 4.1.19, при компиляции ругается на отсутствие StockSharp.Messages, а также на команду _trader.ApplyWrapper(SmartComVersions.V3);
Добавляю ссылку на StockSharp.Messages, комментирую предыдущую команду, где я явно указывал на версию SmartCom,
приложение запускается, коннектится, получает портфель и нужные securities и дальше где по идее должна начать выкидывать обновления - ничего не происходит, то есть я так понимаю _trader.RegisterSecurity(_ri) - где то в этом месте не получает обновления по инструменту.

Может быть я что то делаю не так?
То есть ошибки то никакой не выкидывает, просто не происходит то, что раньше происходило - поток данных со свечками. Сейчас вернул библиотеку обратно на 4.1.19 - добавил _trader.ApplyWrapper(SmartComVersions.V3); и все работает опять нормально.
Вот кусок кода, который не отрабатывает в новой библиотеке:

_trader.RegisterSecurity(_ri);
_series = new CandleSeries(typeof(TimeFrameCandle), _ri, _timeFrame);
_candleManager = new CandleManager(_trader); //Заводим менеджер свечей
_series = new CandleSeries(typeof(TimeFrameCandle), _ri, _timeFrame);
_candleManager.Start(_series);
_trader.RegisterTrades(_ri);
_candleManager.Processing += (s, candle) =>
{
if (candle.State == CandleStates.Finished) this.GuiAsync(() => MyList.Items.Add(candle.CloseTime + " " + candle.ClosePrice));
};
Спасибо:

Mikhail Sukhov

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


alexan3010 Go to
Запускал я все по очереди.
Описывал свое приложение, на базе SampleSmart.


Давайте вернемся к стандартному примеру. Если запускать SampleSmart (без модификаций), то что в нем не работает? На каком тикере можно проверить поведение?
Спасибо:

alexan3010

Фотография
Дата: 18.11.2013


Ok.
Библиотека 4.2.1
Пример SampleSmart из нее же, без модификаций вообще.

Висит на записи:
Дожидаемся появления в программе инструмента Лукойл и портфеля BP....-MS-01

и ничего не происходит. Точками я забил свой номер договора, а так он там правильно высвечивается.

То есть коннектится, получает портфель, успешно получает инструмент, но не получает никаких изменений по нему. У меня все так же.
В примере SampleCandles тоже примерно так же - коннектится, появляется инструмент RTS-12.13 пытаемся вывести по нему либо он-лайн либо историю - пустой чарт в обоих случаях. Никаких ошибок при этом не возникает.
Спасибо:

Mikhail Sukhov

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


alexan3010 Go to
Ok.
Библиотека 4.2.1
Пример SampleSmart из нее же, без модификаций вообще.

Висит на записи:
Дожидаемся появления в программе инструмента Лукойл и портфеля BP....-MS-01


Этот пример не выводит подобную запись. Вы уверены, что запускаете SampleSmart?
Спасибо:

alexan3010

Фотография
Дата: 19.11.2013


Действительно перепутал, это вывод SampleSmartConsole.
SampleSmart выдает ошибку сразу при подключении с длинным текстом. Не знаю как вставить сюда скрин-шот, текст там длинный.
Спасибо:

Eskra

Фотография
Дата: 19.11.2013


У меня ругается на Order.State == OrderStates.Active. OrderStates не находит, они где сейчас находятся? Я давно не обновлялся, может вы их давно конечно переместили
Спасибо:

Mikhail Sukhov

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


alexan3010 Go to
Действительно перепутал, это вывод SampleSmartConsole.
SampleSmart выдает ошибку сразу при подключении с длинным текстом. Не знаю как вставить сюда скрин-шот, текст там длинный.


Ctrl+C на окно.
Спасибо:

Mikhail Sukhov

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


Eskra Go to
У меня ругается на Order.State == OrderStates.Active. OrderStates не находит, они где сейчас находятся? Я давно не обновлялся, может вы их давно конечно переместили


Перекочевало в Messages. Как и другие енумы.
Спасибо:

alexan3010

Фотография
Дата: 19.11.2013


Вот ошибку, которую выдает SampleSmart при запуске после нажатия кнопки "Подключится", с галочкой V3,
на библиотеке 4.2.1:


Ошибка обработки данных

System.Runtime.InteropServices.COMException (0x80040154): Не удалось получить фабрику класса COM для компонента с CLSID {99F5EA2E-0636-49BE-8100-8AE309B03331} из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

в System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)

в System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)

в System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj)

в System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)

в System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)

в System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)

в System.Activator.CreateInstance[T]()

в StockSharp.Smart.Wrapper.SmartComWrapper`1.Connect(String host, Int16 port, String login, String password)

в StockSharp.Smart.SmartComMessageAdapter.#=qLH0XZUtvNEIYz5CHR6NY4g==(ConnectMessage #=qgREprUunPmBsV8Qx7qDSNQ==)

в StockSharp.Smart.SmartComTransactionMessageAdapter.SendMessage(Message message)

в StockSharp.Algo.BaseTrader.#=qmjr2iOOuIRcGp51hPxnHCePOmtmPZaruxH8lvpV14EE=.#=q2odj0Hq4TdhRHtoVk33g$PlxCr4TPAtDtB_yfVc1WHA=.#=qPr7X1VbMuI4YnDkmCG9JA2NwLEAKtnKXL5swTJ8$bvI=()

ОК

Спасибо:

Eskra

Фотография
Дата: 19.11.2013


Михаил Сухов Go to
Eskra Go to
У меня ругается на Order.State == OrderStates.Active. OrderStates не находит, они где сейчас находятся? Я давно не обновлялся, может вы их давно конечно переместили


Перекочевало в Messages. Как и другие енумы.


Разобрался, спасибо)
Спасибо:

Mikhail Sukhov

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


alexan3010 Go to
Вот ошибку, которую выдает SampleSmart при запуске после нажатия кнопки "Подключится", с галочкой V3,
на библиотеке 4.2.1:


Судя по ошибке, не установлен SmartCOM.
Спасибо:

alexan3010

Фотография
Дата: 19.11.2013


Смартком то был установлен, но x86.
Сейчас обнаружил, что позавчера вышел новый смартком (.79) установил его (64bit), вроде заработало приложение SampleSmart - по крайней мере запускается и выводит инструменты и портфели, ту ошибку уже не выдает. Я так понял, именно этому приложению нужен обязательно смартком 64 бита, а остальным примерам - все равно на битность.

Но тем не менее, сейчас, когда SampleSmart запускается и выводит инструменты - у всех инструментов не зависимо от площадки я вижу NULL в таблице значений, то есть BID, ASK, последняя сделка и т.п. - все изменяющиеся данные NULL.



Спасибо:

Mikhail Sukhov

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


alexan3010 Go to

Но тем не менее, сейчас, когда SampleSmart запускается и выводит инструменты - у всех инструментов не зависимо от площадки я вижу NULL в таблице значений, то есть BID, ASK, последняя сделка и т.п. - все изменяющиеся данные NULL.


Изучайте пример. Все там есть.
Спасибо:

alexan3010

Фотография
Дата: 19.11.2013


В окне "Инструменты", после нажатия кнопки "Вид-Офер" вываливается вот это, причем куча окошек:


Ошибка обработки данных

System.InvalidCastException: Не удалось привести тип объекта "System.Decimal" к типу "StockSharp.BusinessEntities.Quote".

в StockSharp.Algo.Storages.Level1ChangeHelper.ApplyChanges(Security security, Level1ChangeMessage message)

в StockSharp.Algo.BaseTrader.#=qTJaw1X1C5ndS1CF6h_drqBTmvZn0r1qcAV7VXp8xss0=(Security #=qF1kBKE4Wg2s6xKyESoti7g==, Level1ChangeMessage #=qW3uLhjkl8greF8a3kdGXgw==)

в StockSharp.Algo.BaseTrader.#=qiWP8CaVPGApml_sRxReE395DviI2FRJIqJPOxDGS5Fs=[TMessage](TMessage #=qDUsyceBRGHz9BwUvIX0snw==, Func`2 #=qM9HZFQeHaxZcaWFJnE349Q==, Action`2 #=qcUgRaFhfuY3oNc8NA_xMQg==, Boolean #=qfq9iWYg4ysTS3YbMWVcZCXOzX_cJ4DMiToPaptxToFM=)

в StockSharp.Algo.BaseTrader.OnProcessMessage(Message message, MessageDirections direction)

в StockSharp.Smart.SmartTrader.OnProcessMessage(Message message, MessageDirections direction)

в StockSharp.Algo.BaseTrader.#=qmjr2iOOuIRcGp51hPxnHCePOmtmPZaruxH8lvpV14EE=.#=q2odj0Hq4TdhRHtoVk33g$PlxCr4TPAtDtB_yfVc1WHA=.#=qPr7X1VbMuI4YnDkmCG9JA2NwLEAKtnKXL5swTJ8$bvI=()

ОК
---------------------------
Спасибо:

Mikhail Sukhov

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


alexan3010 Go to
В окне "Инструменты", после нажатия кнопки "Вид-Офер" вываливается вот это, причем куча окошек:


А вот это уже ошибка версии 4.2. Будем лечить.
Спасибо:

alexan3010

Фотография
Дата: 19.11.2013


Дальше, пример SampleSmartCandles.

Подключается нормально, свечки не выводит не исторические, ни он-лайн. Просто пустой чарт, никаких ошибок.
Но это вроде как и на предыдущей версии библиотеки было.


UPD: Сейчас специально скачал версии 4.1.17 и 4.1.19 - там в SampleSmartCandles все работает, свечки выводятся как он-лайн, так и исторические!
Спасибо:

Rebelion

Фотография
Курсы
Дата: 22.11.2013


Та же петрушка с RealTimeEmulationTrader - не идёт экспорт данных, стакан через RegisterMarketDepth не регистрируется. Более того, Verifier определяет настройки корректными! В качестве терминала - Quik.
Т.е. подключаюсь, делаю

Code
realTimeTradeEmulation.RegisterSecurity(stock);
realTimeTradeEmulation.RegisterMarketDepth(stock);
realTimeTradeEmulation.RegisterTrades(stock);
realTimeTradeEmulation.RegisterPortfolio(instrument.portfolio);
,

но на чарте пусто, не появляется стакан в квике по инструменту. В 4.1.19 тот же код пашет без проблем.


P.S. Уточнение - какие-то проблемы с Фортсом, видимо, в 4.2.1, т.к. лукойл нормально отображается...
Спасибо:

Bond

Фотография
Курсы
Дата: 25.11.2013


Где документация по работе с новым API? Где примеры? Только один очень простой пример. Дока старая.
Или методом научного тыка нужно изучать как работает API?
Спасибо:

Rebelion

Фотография
Курсы
Дата: 25.11.2013


Bond Go to
Где документация по работе с новым API? Где примеры? Только один очень простой пример. Дока старая.
Или методом научного тыка нужно изучать как работает API?


Ну, или хотя бы рабочий пример по SampleSMA - текущий данные из квика не подтягивает.
Спасибо:
1 2 3  > >>

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

loading
clippy