пятница, 3 сентября 2010 г.

Stock# 2.4

Вышла внеочередная версия S#. Внеочередная, потому, что перескочили 2.3, и в новость выходит 2.4. Получилось это в следствии непрерывных фидбеков и баг реквестов, за что отдельное спасибо Alexander и Tauler. Не успела зарелизиться версия 2.3, как поступили дополнительный запросы, и пришлось переделывать сразу на 2.4.

Очень хорошо, что поступает такое количество отзывов. Потому как это сильно помогает улучшать S#, делая его и быстрее и стабильнее. Тем более, что основная черта S# от тех технологий, что он оборачивает в себя (напомню, это и Trans2Quik.api и DDE и SmartCOM), это быстрая реакция. Согласитесь, на рынке ПО для трейдинга не так много подобных библиотек для роботов, которые развиваются такими же темпами, как S#.

Но у быстрого развития есть и обратная медаль - это ошибки, которые могут возникнуть (и возникают) при разработке. Поэтому, этот релиз посвящен именно стабильности S#, а не функциональному расширению. Все как в трейдинге, есть импульс, и есть коррекция. Сегодня у нас коррекция.

Поэтому, традиционный список изменений начинается именно с устраненных ошибок.
  1. Улучшена производительность StrategyLogger (который теперь называется FileStrategyLogger) и исправлена ошибка с параллельной записью в файл разными стратегиями.
    Огромная благодарность Иванову Андрею, который далее в топике расписал все особенности работы с файлами. Можно смело утверждать, что в S# завелся профи. Жаль, появляется только по ночам =).
  2. Переделан экспорт портфелей. Теперь информация о счетах берется не из таблиц с позициями, а напрямую из Quik в разделе управление счетами. Это предотвратило ошибку, когда при отсутствии позиций не экспортировалась информация по портфелям.
  3. Исправлена ошибка с необновлением нетокорых параметров Security. Теперь Security обновляется всегда.
  4. Исправлена ошибка при регистрации заявки через MultiTrader
  5. Исправлена ошибка в методе Strategy.CancelActiveOrders.
  6. Исправлена ошибка в определении времени задержки заявки (TraderHelper.GetLatency).
  7.  Исправлена ошибка в получении времени биржи через Quik при отсутствии соединения.
  8. Исправлена ошибка, когда исполненная заявка на время возврашалась в активное состояние.
  9. Исправлена ошибка в обработке стратегий, превыщающее количество потоков в StrategyManager.
  10. Исправлена ошибка, когда для исполненной заявки менялся баланс. Кстати, очень интересная ошибка, потому как она тянется своими корнями к некорректной передаче данных Quik. Когда он извещает о том, что заявка исполнена, но в то же самое время баланс отличен от 0. Поэтому, в QuikTrader была введена специальная проверка такой ситуации.
  11. Исправлена ошибка в дублировании тиков, получаемых через MultiTrader.Trades.
  12. Исправлена ошибка в ExcelStrategyReport при генерации отчета под Office 2010 (сейчас генерация файлов происходит без использования Excel API).

И, конечно же, есть и нововведения, которые привели к отдельной версии, а не фиксу 2.3.
  1. S# и его примеры переведены на VS 2010. Пока не осуществлен переход на .NET 4.0 по причине не совсем стабильной работы SmartCOM под этой новой версий .NET. Но использовать новое все равно необходимо. Да и скачивать бесплатную среду разработки VS 2008 Express теперь стало проблематичнее. Везде предлагают VS 2010 Exress.
  2. Удалено свойство Order.Account. Все, теперь оно в прошлом. И необходимо использовать Order.Portfolio.
  3. В QuikTrader реализованы методы RegisterTrades и UnRegisterTrades. Эти методы служат для фильтрации потока тиков по инструментам. Проблема в том, что Quik не дает программно управлять этим потоком. Поэтому, данные методы напрямую в Quik-е меняют фильтр инструментов. Сама по себе операция смены инструмента очень тяжелая, и Quik "просыпается" не быстро. Так что, настоятельно рекомендуется менять фильтр перед запуском торговых стратегий. Дополнительно, данные методы по-умолчанию не работают (ничего не делают). Чтобы они начали функционировать, необходимо включить флаг QuikTrader.EnableFiltering. Это специальная защита для тех ситуаций, если кто-то уже в своем роботе вызывал данные методы (например, сделал вызов и забыл про него).
  4. Добавлен метод TraderHelper.GetAveragePrice для вычисления средневзвешанной цены исполнения заявки как просили здесь.
  5. Как уже упомянуто выше, StrategyLogger стал базовым абстрактным классом, и вся его логика работы с текстовым файлом перенесена в FileStrategyLogger. По умомчанию, класс создает синхронизированный текстовый поток TextWriter. Если его скорости будет недостаточно, можно передавать не синхронизированный поток через конструктор FileStrategyLogger(TextWriter). Но это чревато ошибками вида.
  6. Добавлен GuiStrategyLogger, который записывает сообщения от стратегии в специальный класс LogWindow. Может работать в двух режимах: писать все сообщения в одно окно или создавать на каждую стратегию по отдельному LogWindow. Подробнее, в обновленной документации по логированию.
  7. Метод Strategy.Process сделан невидимым из вне, чтобы не было желания его вызвать.
  8. Убран у многих методов TraderHelper аргумент ITrader. Теперь передаваемых параметров стало меньше, и, значит, удобнее использовать.
  9. Метод StrategyLogger.WriteMessage сделан виртуальным, чтобы его можно было перегружать своей реализацией. Например, сейчас в файл не пишется информация о типе сообщения (StrategyErrorStates). Если вдруг кому-нибудь это потребуется, всегда будет возможность это сделать.
  10. Добавлен виртуальный метод StrategyReport.FormatTime для переопределения формата времени в отчетах.
  11. Добавлен адрес демо сервера SmartCOM - SmartAddresses.Demo.
  12. Для предыдущего пункта добавлен специальный визуальный контрол SmartAddressComboBox для выбора сервера. Он уже используется в примерах. Вот как выглядит теперь SmartSample:
  13. SmartTrader.RegisterPortfolio теперь вызывается автоматически при появлении в системе портфеля.
  14. Добавлена дополнительная проверка на Security.MinStepSize в метод TraderHelper.ShrinkPrice, чтобы предотвратить ситуацию, аналогичную этой.
  15. Добавлен метод QuikTrader.Initialize, который инициализирует соединение с окном Quik, чтобы позволить работать с экспорт DDE без подключения к серверу торгов. Такое соединение позволяет манипулировать Quik-ом, запуская, к примеру, экспорт DDE.
  16. Переделан метод QuikTrader.ReRegisterOrder, чтобы стало возможным перерегистрировать заявки на ММВБ через снятие и новую регистрацию.
  17. Переделано событие ITrader.QuotesChanged, чтобы он передавал коллекцию стаканов. Для аналогии с другими событиями, а так же для будущих систем, передающие потоком данные сразу по нескольким стаканам.
  18. Добавлены два события MarketDepth.UpdatingStarted и MarketDepth.UpdatingFinished для определения, когда стакан начал обновляться, и когда закончил. Имеет смысл использовать в работе с SmartTrader, так как там стакан обновляется построчно.  
Вот так, исправлена дюжина ошибок и 18 нововведений.

2 комментария:

  1. Спасибо огромное за проделанную работу, начал изучать C#, надеюсь получится использовать вашу разработку.

    ОтветитьУдалить