S#.API 4.2 (Locked)
Atom
11/14/2013
esper


Выложили 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).

Баги:

Tags:


Thanks: Bond pafnuty wkj risty


1 2 3  > >>
Mikhail Sukhov

Avatar
Date: 11/14/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 один.
Thanks: Bond

transdex

Avatar
Date: 11/14/2013


Михаил Сухов

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



Михаил Сухов

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


Прогресс, однако... [biggrin]





Thanks: Mikhail Sukhov

Mikhail Sukhov

Avatar
Date: 11/16/2013


transdex


Тонкая работа![thumbup]

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

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

esper

Avatar
Date: 11/17/2013


Выложили 4.2.1

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

Баги:
Thanks:

alexan3010

Avatar
Date: 11/18/2013


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

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

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

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

Mikhail Sukhov

Avatar
Date: 11/18/2013


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


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

alexan3010

Avatar
Date: 11/18/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));
};
Thanks:

Mikhail Sukhov

Avatar
Date: 11/18/2013


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


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

alexan3010

Avatar
Date: 11/18/2013


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

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

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

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

Mikhail Sukhov

Avatar
Date: 11/18/2013


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

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


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

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

loading
clippy