Обсуждение статьи "Универсальный торговый эксперт: Торговые режимы стратегий (Часть 1)"

 

Опубликована статья Универсальный торговый эксперт: Торговые режимы стратегий (Часть 1):

Каждый экспертописатель, независимо от уровня своей подготовки, ежедневно сталкивается с одними и теми же торговыми задачами и алгоритмическими проблемами, которые так или иначе приходится решать для организации надежного торгового процесса. Данная статья описывает возможности торгового движка CStrategy, способного взять на себя решение этих задач и предоставить пользователю удобные механизмы для описания своей торговой идеи.

Задачи, возникающие в процессе реализации автоматического торгового алгоритма, разнообразны. Это и анализ рыночного окружения с получением сигналов на вход в рынок, и закрытие уже существующей позиции. Это контроль корректности торговых действий эксперта и правильная обработка торговых ошибок. Наконец, это простой и удобный доступ к рыночным данным и торговым позициям самого эксперта. Все эти задачи реализуются непосредственно в исходном коде советника.

С другой стороны, следует разделять техническое обеспечение торгового процесса и саму идею, заложенную в пользовательский советник. Благодаря объектно-ориентированному подходу можно разделить эти две, по сути разные, торговые задачи и делегировать обеспечение торгового процесса специальному классу, общему для всех стратегий, который иногда также называют торговым движком.

Данная статья открывает серию статей, описывающих работу одного такого движка, который условно можно назвать "Универсальный эксперт". Это название объединяет набор классов, позволяющих писать торговые алгоритмы простым способом: обычным перечислением условий на вход и выход из позиции. При этом обеспечивать свой эксперт необходимыми данными и торговой логикой вроде перебора позиций не нужно — все это сделает за вас торговый движок.

Торговые режимы стратегии

Очень часто эксперт приходится ограничивать в его торговых действиях. Самый простой тому пример — запрещать эксперту совершать короткие или, наоборот, длинные сделки. В MetaTrader 4 имеется штатный переключатель таких режимов. Он находится непосредственно на вкладке окна свойств эксперта, появляющегося при его запуске:

Рис. 2. Режимы торговли в MetaTrader 4

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

Автор: Vasiliy Sokolov

 

Логично, интересно..но давно отказался от лишних наворотов в советниках (расписания, новости и прочее внешее)

Есть более красивое решение - режим работы советника удобнее задавать через переменные терминала. В параметры сове даётся несколько имён переменных, и он по их значениям ориентируется.

 
Maxim Kuznetsov:

Логично, интересно..но давно отказался от лишних наворотов в советниках (расписания, новости и прочее внешее)

Есть более красивое решение - режим работы советника удобнее задавать через переменные терминала. В параметры сове даётся несколько имён переменных, и он по их значениям ориентируется.

Идея в том, что бы как раз спрятать эти навороты во внутрь вспомогательных модулей. Пользователь делает формальное описание ТС, а все остальное делает за него торговый движок. 

Кстати "торговые режимы" - лишь следствие предложенной организации логики советника. Если описать торговую логику ТС с помощью четырех действий, торговые режимы сами собой получаются. Если научится писать ТС с помощью этих четырех действий, скорость написания советника возрастает в несколько раз, а количество ошибок стремится к нулю - проверенно неоднократно.

 
Vasiliy Sokolov:

Идея в том, что бы как раз спрятать эти навороты во внутрь вспомогательных модулей. Пользователь делает формальное описание ТС, а все остальное делает за него торговый движок. 

Кстати "торговые режимы" - лишь следствие предложенной организации логики советника. Если описать торговую логику ТС с помощью четырех действий, торговые режимы сами собой получаются. Если научится писать ТС с помощью этих четырех действий, скорость написания советника возрастает в несколько раз, а количество ошибок стремится к нулю - проверенно неоднократно.

То что торговые режимы появляются это бесспорно. Только задавать эти режимы лучше снаружи, вообще внешними средствами. Так из советника "уходит" лишний код, как ни крути, а он ест ресурсы (и вычислительные, и на разработку, и на поддержку и проч.). Зато вместо советника получается эдакий "торговый комплекс", где можно с одного пульта рулить несколькими совами.
 
Maxim Kuznetsov:
То что торговые режимы появляются это бесспорно. Только задавать эти режимы лучше снаружи, вообще внешними средствами. Так из советника "уходит" лишний код, как ни крути, а он ест ресурсы (и вычислительные, и на разработку, и на поддержку и проч.). Зато вместо советника получается эдакий "торговый комплекс", где можно с одного пульта рулить несколькими совами.

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

 
Идея мне показалась достаточно интересное, буду читать далее. Спасибо за статью.
 
Maxim Kuznetsov:
То что торговые режимы появляются это бесспорно. Только задавать эти режимы лучше снаружи, вообще внешними средствами. Так из советника "уходит" лишний код, как ни крути, а он ест ресурсы (и вычислительные, и на разработку, и на поддержку и проч.). Зато вместо советника получается эдакий "торговый комплекс", где можно с одного пульта рулить несколькими совами.

С чего вы взяли что лучше? Ваш подход отвратителен! Еще расскажите о том. какой вы реалист, и что тестером не пользуетесь.

Получается куча функций от которых зависит результат работы советника, но которые невозможно проверять в тестере.

Все, от чего меняется работа советника должно регулироваться через окно свойств советника. 

 

Только начал разбираться. Хотелось бы описания XML стратегии - что там где. И хотя бы какой либо XML файл. ИМХО, в архиве отсутствует.

Спасибо. 

 
Yuriy Asaulenko:

Только начал разбираться. Хотелось бы описания XML стратегии - что там где. И хотя бы какой либо XML файл. ИМХО, в архиве отсутствует.

Спасибо. 

Пример XML-сериализации стратегий:

<Global>
        <Strategies>
                <Strategy Name="MovingAverage" Magic="100" Timeframe="PERIOD_M1" Symbol="Si">
                        <TradeStateStart>Stop</TradeStateStart>
                        <Params>
                                <FastMA>1</FastMA>
                                <SlowMA>3</SlowMA>
                                <Shift>0</Shift>
                                <Method>MODE_SMA</Method>
                                <AppliedPrice>PRICE_CLOSE</AppliedPrice>
                        </Params>
                </Strategy>
                <Strategy Name="MovingAverage" Magic="101" Timeframe="PERIOD_M5" Symbol="SBRF">
                        <TradeStateStart>BuyOnly</TradeStateStart>
                        <Params>
                                <FastMA>15</FastMA>
                                <SlowMA>21</SlowMA>
                                <Shift>0</Shift>
                                <Method>MODE_SMA</Method>
                                <AppliedPrice>PRICE_CLOSE</AppliedPrice>
                        </Params>
                </Strategy>
                <Strategy Name="BollingerBands" Magic="102" Timeframe="PERIOD_M15" Symbol="GAZR">
                        <TradeStateStart>BuyAndSell</TradeStateStart>
                        <Params>
                                <Period>30</Period>
                                <StdDev>1.5</StdDev>
                        </Params>
                </Strategy>
                <Strategy Name="BollingerBands" Magic="103" Timeframe="PERIOD_M30" Symbol="ED">
                        <TradeStateStart>BuyAndSell</TradeStateStart>
                        <Params>
                                <Period>20</Period>
                                <StdDev>2.0</StdDev>
                        </Params>
                </Strategy>
        </Strategies>
</Global>

Вопрос серриализации стратегий разбирается в следующих частях. Там присутствует этот пример.

Причина обращения: