понедельник, 26 июля 2010 г.

Stock# 2.2

Не успел пройти и месяц с предыдущего релиза, как выходит новый. На этот раз основные изменения коснулись очень интересной части S# - алгоритмы, стратегии и все, что с ними связано. Традиционный список фич я решил сгруппировать по областям для упрощения их запоминания.


Стратегии:

  1. Добавил событийную модель для стратегий. Уж больно часто начал возникать вопрос на форумах, как не проверять по интервалу определенные значения в теле стратегии, а подписаться на события изменений. В добавок в моих проектах я осознал, что такая модель предоставила бы сокращения кода и сделала бы его понятнее... Вообщем, прошу всех встречать - ActionStrategy. Подробнее в документации.
  2. Добавил тейк-профит и стоп-лосс стратегии. Фактически, кросс-платформенные стоп заявки, не зависящие от торгового терминала. Плюс, в стоп-лосс добавил опцию слежения. Что характерно, все эти вещи я сделал на базе котирования, что еще раз доказывает мощный потенциал подобной стратегии (жаль, судя по форуму, никто не пошел дальше ее простой функции - выставить по рынку). Подробнее в документации.
  3. Переделал документацию в разделе Торговые алгоритмы. Очень много поменялось, читайте.
  4. Дочерние стратегии сделал параллельными (при указании опции IsParallel). Также, добавил BatchStrategy, которая указывает критерий завершения стратегий. Подробнее в документации.
  5. Новая концепция - конструктор у стратегий должен быть без параметров. Две причины. Первая, когда создается дочерняя стратегия выглядит несколько странно указывать у нее инструмент и порфтель. Они в любом случае должны быть как у родительской стратегии. Вторая причина. Я добавил в StrategyManager методы Load и Save, которые теперь умеют сохранять и восстанавливать стратегии из xml файла. А восстанавливать из файла можно только стратегии без параметров в конструкторе.
  6. StrategyManager теперь в конструкторе принимает ITrader, отслеживая его события соединения и потери связи (ошибочно или планово). В случае потери связи StrategyManager больше не вызывает Strategy.OnProcess до тех пор, пока не придет событие ITrader.Connected.
  7. В Strategy.ReRegisterOrder добавил параметр getNewVolume для логического единообразия с getNewPrice.
  8. Добавил методы Strategy.CancelActiveOrders и Strategy.ClosePosition. Использовать рекомендуется в случаях остановки стратегии.
  9. Котирование теперь учитывает значение Strategy.Volume. Так что, теперь можно котировать большие объемы, не боясь "собрать" стакан.
  10. Появилось свойство QuotingStrategy.MaxReRegisterCount, которое ограничивает котирование на максимальное количество изменений заявки. Если он превышен, то стратегия останавливается.
  11. Strategy теперь поддерживает стоп-заявки.
  12. У Strategy появились новые события: NewStopOrder, OrderChanged, StopOrderChanged,
    OrderFailed, StopOrderFailed. Из-за появления данных событий я скрыл от использования многие виртуальные методы.
  13. Все свойства дочерних стратегий котирования сделал доступных для записи, как просили здесь.

Свечки:

  1. Добавил событие CandleManager.CandlesFinished, которое однозначно означает конец формирования свечки. Не нужно больше шаманить в коде и дожидаться самому окончанию свечек.
  2. Ввел понятие CandleFactory. Во-первых, теперь все стандартные свечки реализуют подобную фабрику. Во-вторых, появилось понятие "нестандартная" свечка. Тоесть, если понадобилась какая-то своя реализация (например, кресты-нули или кластер), то можно реализовать свой CandleFactory, и начать получать свои типы свечек.
  3. Для свечек добавил методы распознования паттернов: цвет, надгробье, стрекоза, молот и многое другое.
  4. Добавил TraderHelper.GetCandleTime для получения времени текущей TimeFrameCandle.

SmartCOM:

  1. SmartTrader , наконец-то, подружил с ReConnectionManager. Фу, насколько же не стабилен этот SmartCOM! Постоянно приходится вставлять экзотический код. Хорошо, что в SmartTrader, чтобы не портил красоту кода в роботе.
  2. Из-за предыдущего пункта добавил ReConnectionManager.IsReStartExport. Потому как в случае с переподключением к SmartCOM экспорт так же необходимо запускать.
  3. Добавил SmartTrader.RegisterRealTimeCandles. Отличается от SmartTrader.RegisterCandles тем, что возвращает не только исторические свечки, но и real-time свечки. И причем последние приходят постоянно по окончанию тайм-фрейма (тоесть, нет необходимости обращатся за ними на сервер из кода робота). Подробнее.

Quik:
  1. Изменил Verifier так, что он теперь может проверять правильность настроек таблиц в зависимости от торговой площадки, с которой идет работа. Поддерживаются РТС, ММВБ и ММВБ Срочный рынок.
  2. Для QuikTrader реализовал возможность перезапуска только активных DDE потоков. Например, когда в программе экспортируются все таблицы + дополнительно несколько стаканов. QuikTrader.ReStartExport сможет отследить экспорт для запущенных стаканов, и перезапустит их на равне со стандартными таблицами. Такое поведение справедливо и для ситуации, когда экспорт запущен только по нескольким таблицам (например, по таблице инструментов и заявок). Перезапуск экспорта запустит только эти несколько таблиц, не трогая другие (стоп заявки, сделки и т.д.).
  3. Появилась возможность посмотреть строку транзакции по ее номеру или по самой заявке. Это удобно для отладки, когда нужно посмотреть, какая транзакция был ассоциирована с заявкой, и детально углубиться в решение проблемы.
Общее:
  1. 1. Добавил новое состояние для заявок - Failed. Заявка переходит в этой состояние, когда произошла какая-то ошибка при ее регистрации (в роботе, в шлюзе или не приняла биржа). Собственно, это как раз те заявки, которые приходят в событиях OrdersFailed и StopOrdersFailed. Подробнее, о состояниях заявок.
  2. Order.Account объявлен как устаревшим. Он все еще используется для обратной совместимости, но надо уже переходить на Order.Portfolio. Причина отмены Account банальна - не объектно-ориентированно. Как следствие, можно засунуть в счет все, что угодно.
  3. Из-за предыдущего пункта изменился и ITrader.CancelOrders, который раньше принимал номер счета.
  4. Из-за устаревания Account были переименованы и переделаны следующие менеджеры:

  5. Добавил новый менеджер PositionPnLManager
  6. Переименовал свойства у базовых классов менеджеров в интуитивно понятные (нет больше Value или TotalValue, есть PnL и Position). Учтите при компилировании проектов.
  7. Добавил методы ITrader.GetOrders(Portfolio) и ITrader.GetMyTrades(Portfolio).
  8. TraderHelper.IsTradeTime теперь учитывает и дни недели. В субботу и воскресенье выдает, что время вне торгового диапазона.
  9. Добавил TraderHelper.GetPosition(ITrader trader, Portfolio portfolio), который возврашает целое число, означающее позицию по всему портфелю.
  10. Убрал QuikTrader.IsFullDdeExport. Теперь таблицы с позициями обязательны всегда (фактически, предыдущее введение этого свойства было сделано специально для облегчения миграции).
  11. Добавил TraderHelper.GetRealizedVolume для получения реализованного объема по заявке.
  12. Переименовал SyncTrader и SyncCandleManager в GuiTrader и GuiCandleManager.
  13. Удалил класс TraderManager. Даже не знаю, зачем его вообще вводил.
  14. Обсуждения несостоявшейся баги привело к тому, что я исправил IncrementTransactionIdGenerator (CurrentTransactionId по умолчанию равно количеству миллисекунд с начала дня) и MillisecondTransactionIdGenerator (разница в миллисекундах теперь учитывается не с начала дня, а с момента создания генератора).
  15. Как просили здесь добавил генерацию события при изменении ExntensionInfo (для всех сущностей, а не только для Security, о чем там говорилось).

Баги:

  1. MarketQuotingStrategy не передает управление?
  2. Стоп заявки, Срок 'До отмены', тип DateTime

Продведем итог. 13 + 4 + 3 + 3 + 15 = 38 новых фич. Рекорд.

Комментариев нет:

Отправить комментарий