вторник, 11 мая 2010 г.

Stock# 2.0



Сайт проекта располагается по адресу StockSharp.Com

Вот она - долгожданная версия 2.0. Сразу оговорка, пока это beta версия. Релиз будет после фидбеков о стабильности и корректности работы.

Прежде чем сказать, что появилось новое, хочу процитировать словами Нейла Армстронга новый релиз "Это один маленький шаг для человека и гигантский прыжок для человечества". В самом релизе появилось только одно важное, но бесспорно очень полезное нововведение - поддержка Smart. Это сделало Stock# тем, чем он разрабатывался с самого начала - платформо независимой библиотекой для разработки торговых программ (роботы, МТС, помощники - всего). Зачем все это нужно:
  1. Увеличивает комьюнити. Я думаю, не секрет, что пользователей на Quik в разы больше, чем на Smart. Тем не менее, Smart технически продвинутый. Итого, обмен знаниями привнесет плюсы обеим сторонам.

  2. Миграция. Ни Quik, ни Smart не идеален (идеала нет вообще). Жизнь - она ведь не стоит на месте. Поэтому и возникают потребности переходить с одной платформы на другую. Если это делать на Stock#, то переход будет менее затратным. Фактически, если все сделано правильно, то заменить в нескольких местах код робота. Если делать не на Stock#, то все будет, конечно же, значительно затруднительнее.

  3. Для тех, кто разрабатывает (и продает) роботов такая платформа расширяет клиентуру.

  4. Smart - это не последнее. Впереди планы и на другие платформы, что еще сильнее расширит предыдущие пункты.
Как работать со SmartTrader (собрат QuikTrader), я описал в документации. Она, в свою очередь, тоже претерпела изменения. Появились разделы специфичные для Quik и Smart. И по этим примерам как раз можно сразу понять, насколько разработка под Quik похожа на Smart. Помимо Smart в 2.0 есть и обычные изменения:
  1. Добавил свойство ITrader.Portfolios. Данное свойство пока не поддерживается QuikTrader и сделано в первую очередь для SmartTrader.

  2. Теперь нет такого события как QuikTrader.DdeError. Вместо него есть ITrader.ProcessDataError. Я вынес в базовый интерфейс данное событие для унификации - в любом шлюзе есть ошибки.

  3. Опять же, для унификации добавил в ITrader методы StartExport и StopExport. Для QuikTrader оно вызывает запуск экспорта DDE. Для SmartTrader - подписка на COM события.

  4. Появилось событие ITrader.NewDataExported. Оно позволяет узнать, продолжает ли работать экспорт (если это Quik - то DDE экспорт, если Smart - то COM события). Кстати, Smart довольно часто любит тихо умирать, не говоря об этом никому. Данное событие позволяет реагировать программе (или человеку) на такую особенную ситуацию.

  5. Чтобы проще управлять событием ITrader.NewDataExported, ReConnectionManager может самостоятельно отслеживать ситуацию подвисания экспорта. Для этого у него есть метод SetExportTimeOut, где задается максимально допустимое время простоя. Если в течении него программе не придут новые значения, то ReConnectionManager расценивает такую ситуацию однозначно как зависания экспорта, и перезапускает экспорт через ITrader.ReStartExport.

  6. Добавил событие ITrader.Connected. Именно после данного события можно начинать работать с шлюзом (запускать экспорт, выставлять заявки и т.д.).

  7. Добавил событие ITrader.Disconnected. Оно нужно для ReConnectionManager, чтобы сигнализировать о корректном разрыве подключения, и предотвратить ненужное переподключение.

  8. Добавил событие ReConnectionManager.AttemptError. Оно позволяет узнать ошибку, которая произошла при неуспешной попытке восстановить соединение.

  9. Добавил метод ITrager.GetOrders(string account) для получения списка заявок по конкретному торговому счету.

  10. Добавил в QuikTrader поддержку одновременной работы с несколькими Quik. Я показал это в примере SampleFewQuik и в документации.

  11. Реализовывая предыдущий пункт, я сделал возможность задавать путь к библиотеке TRANS2QUIK.dll (полезно, когда есть несколько роботов). Если при создании QuikTrader по указанному пути не была найдена данная DLL, то она создается автоматически.

  12. Разрабатывая SmartTrader, я добавил свойство Security.Id. Для SmartTrader оно присылается SmartCOM, для QuikTrader оно генерируется из кода инструмента и его класса.

  13. Делая предыдущий релиз 1.8, я ввел понятие генерация идентификаторов транзакций. Я чуть модернизировал данный механизм. Теперь есть базовый класс TransactionIdGenerator. По умолчанию используется его реализация MillisecondTransactionIdGenerator, которое позволяет генерировать уникальные идентификаторы, особенно когда идет работа с несколькими Quik.

  14. С появлением SmartTrader и возможностью работать с несколькими Quik, появился класс MultiTrader. Мега удобная вещь. Позволяет работать с несколькими шлюзами как с одним единым подключением. Это позволяет реализовать в роботе концепцию, когда ему не нужно определять, в какую систему он отсылает заявку. Я показался в примере SampleQuikSmart и в документации как работать с данным классом.

  15. Добавил свойство Strategy.Name. Для удобства.

  16. Order.TransactionId теперь long, что устраняет ошибку с переполнением номера транзакции в Quik.

  17. Добавил свойство QuikTrader.MarketDepthDelimiter для изменения символа разделителя в заголовке окна стакана. По умолчанию, используется '-', но оно не всегда подходит.

  18. Реорганизовал конструкторы QuikTrader. Теперь часть параметров задается через соответствующие свойства.

  19. Ввел сущность Exchange. Показывает информацию по бирже (название + время работы).

  20. Расширил класс Security свойствами Trader и Exchange. Первое позволяет узнать, из какой торговой системы была получена информация по инструменту, второе - к какой бирже принадлежит инструмент.

  21. Добавил использование amCharts в примере работа с историческими данными SampleSmartCandles. До этого использовался Visifire. Разница на лицо (первая картинка - Visifire, вторая amCharts):





На сегодня все.

5 комментариев: