Стратегии:
- Добавил событийную модель для стратегий. Уж больно часто начал возникать вопрос на форумах, как не проверять по интервалу определенные значения в теле стратегии, а подписаться на события изменений. В добавок в моих проектах я осознал, что такая модель предоставила бы сокращения кода и сделала бы его понятнее... Вообщем, прошу всех встречать - ActionStrategy. Подробнее в документации.
- Добавил тейк-профит и стоп-лосс стратегии. Фактически, кросс-платформенные стоп заявки, не зависящие от торгового терминала. Плюс, в стоп-лосс добавил опцию слежения. Что характерно, все эти вещи я сделал на базе котирования, что еще раз доказывает мощный потенциал подобной стратегии (жаль, судя по форуму, никто не пошел дальше ее простой функции - выставить по рынку). Подробнее в документации.
- Переделал документацию в разделе Торговые алгоритмы. Очень много поменялось, читайте.
- Дочерние стратегии сделал параллельными (при указании опции IsParallel). Также, добавил BatchStrategy, которая указывает критерий завершения стратегий. Подробнее в документации.
- Новая концепция - конструктор у стратегий должен быть без параметров. Две причины. Первая, когда создается дочерняя стратегия выглядит несколько странно указывать у нее инструмент и порфтель. Они в любом случае должны быть как у родительской стратегии. Вторая причина. Я добавил в StrategyManager методы Load и Save, которые теперь умеют сохранять и восстанавливать стратегии из xml файла. А восстанавливать из файла можно только стратегии без параметров в конструкторе.
- StrategyManager теперь в конструкторе принимает ITrader, отслеживая его события соединения и потери связи (ошибочно или планово). В случае потери связи StrategyManager больше не вызывает Strategy.OnProcess до тех пор, пока не придет событие ITrader.Connected.
- В Strategy.ReRegisterOrder добавил параметр getNewVolume для логического единообразия с getNewPrice.
- Добавил методы Strategy.CancelActiveOrders и Strategy.ClosePosition. Использовать рекомендуется в случаях остановки стратегии.
- Котирование теперь учитывает значение Strategy.Volume. Так что, теперь можно котировать большие объемы, не боясь "собрать" стакан.
- Появилось свойство QuotingStrategy.MaxReRegisterCount, которое ограничивает котирование на максимальное количество изменений заявки. Если он превышен, то стратегия останавливается.
- Strategy теперь поддерживает стоп-заявки.
- У Strategy появились новые события: NewStopOrder, OrderChanged, StopOrderChanged,
OrderFailed, StopOrderFailed. Из-за появления данных событий я скрыл от использования многие виртуальные методы.
- Все свойства дочерних стратегий котирования сделал доступных для записи, как просили здесь.
Свечки:
- Добавил событие CandleManager.CandlesFinished, которое однозначно означает конец формирования свечки. Не нужно больше шаманить в коде и дожидаться самому окончанию свечек.
- Ввел понятие CandleFactory. Во-первых, теперь все стандартные свечки реализуют подобную фабрику. Во-вторых, появилось понятие "нестандартная" свечка. Тоесть, если понадобилась какая-то своя реализация (например, кресты-нули или кластер), то можно реализовать свой CandleFactory, и начать получать свои типы свечек.
- Для свечек добавил методы распознования паттернов: цвет, надгробье, стрекоза, молот и многое другое.
- Добавил TraderHelper.GetCandleTime для получения времени текущей TimeFrameCandle.
SmartCOM:
- SmartTrader , наконец-то, подружил с ReConnectionManager. Фу, насколько же не стабилен этот SmartCOM! Постоянно приходится вставлять экзотический код. Хорошо, что в SmartTrader, чтобы не портил красоту кода в роботе.
- Из-за предыдущего пункта добавил ReConnectionManager.IsReStartExport. Потому как в случае с переподключением к SmartCOM экспорт так же необходимо запускать.
- Добавил SmartTrader.RegisterRealTimeCandles. Отличается от SmartTrader.RegisterCandles тем, что возвращает не только исторические свечки, но и real-time свечки. И причем последние приходят постоянно по окончанию тайм-фрейма (тоесть, нет необходимости обращатся за ними на сервер из кода робота). Подробнее.
Quik:
- Изменил Verifier так, что он теперь может проверять правильность настроек таблиц в зависимости от торговой площадки, с которой идет работа. Поддерживаются РТС, ММВБ и ММВБ Срочный рынок.
- Для QuikTrader реализовал возможность перезапуска только активных DDE потоков. Например, когда в программе экспортируются все таблицы + дополнительно несколько стаканов. QuikTrader.ReStartExport сможет отследить экспорт для запущенных стаканов, и перезапустит их на равне со стандартными таблицами. Такое поведение справедливо и для ситуации, когда экспорт запущен только по нескольким таблицам (например, по таблице инструментов и заявок). Перезапуск экспорта запустит только эти несколько таблиц, не трогая другие (стоп заявки, сделки и т.д.).
- Появилась возможность посмотреть строку транзакции по ее номеру или по самой заявке. Это удобно для отладки, когда нужно посмотреть, какая транзакция был ассоциирована с заявкой, и детально углубиться в решение проблемы.
- 1. Добавил новое состояние для заявок - Failed. Заявка переходит в этой состояние, когда произошла какая-то ошибка при ее регистрации (в роботе, в шлюзе или не приняла биржа). Собственно, это как раз те заявки, которые приходят в событиях OrdersFailed и StopOrdersFailed. Подробнее, о состояниях заявок.
- Order.Account объявлен как устаревшим. Он все еще используется для обратной совместимости, но надо уже переходить на Order.Portfolio. Причина отмены Account банальна - не объектно-ориентированно. Как следствие, можно засунуть в счет все, что угодно.
- Из-за предыдущего пункта изменился и ITrader.CancelOrders, который раньше принимал номер счета.
- Из-за устаревания Account были переименованы и переделаны следующие менеджеры:
- AccountLatencyManager -> PortfolioLatencyManager
- AccountSlippageManager -> PortfolioSlippageManager
- AccountPositionManager -> PortfolioPositionManager
- AccountPnLManager -> PortfolioPnLManager
- Добавил новый менеджер PositionPnLManager.
- Переименовал свойства у базовых классов менеджеров в интуитивно понятные (нет больше Value или TotalValue, есть PnL и Position). Учтите при компилировании проектов.
- Добавил методы ITrader.GetOrders(Portfolio) и ITrader.GetMyTrades(Portfolio).
- TraderHelper.IsTradeTime теперь учитывает и дни недели. В субботу и воскресенье выдает, что время вне торгового диапазона.
- Добавил TraderHelper.GetPosition(ITrader trader, Portfolio portfolio), который возврашает целое число, означающее позицию по всему портфелю.
- Убрал QuikTrader.IsFullDdeExport. Теперь таблицы с позициями обязательны всегда (фактически, предыдущее введение этого свойства было сделано специально для облегчения миграции).
- Добавил TraderHelper.GetRealizedVolume для получения реализованного объема по заявке.
- Переименовал SyncTrader и SyncCandleManager в GuiTrader и GuiCandleManager.
- Удалил класс TraderManager. Даже не знаю, зачем его вообще вводил.
- Обсуждения несостоявшейся баги привело к тому, что я исправил IncrementTransactionIdGenerator (CurrentTransactionId по умолчанию равно количеству миллисекунд с начала дня) и MillisecondTransactionIdGenerator (разница в миллисекундах теперь учитывается не с начала дня, а с момента создания генератора).
- Как просили здесь добавил генерацию события при изменении ExntensionInfo (для всех сущностей, а не только для Security, о чем там говорилось).
Баги:
Продведем итог. 13 + 4 + 3 + 3 + 15 = 38 новых фич. Рекорд.
Комментариев нет:
Отправить комментарий