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

 

Опубликована статья Универсальный торговый эксперт: работа с отложенными ордерами и поддержка хеджинга (часть 5):

Эта статья продолжает знакомить читателей с торговым движком CStrategy. По многочисленным просьбам пользователей в торговый движок были добавлены функции по работе с отложенными ордерами. Также последние версии MetaTrader 5 стали поддерживать счета с хеджингом. Теперь CStrategy поддерживает и их. В статье дается подробное описание алгоритмов по работе с отложенными ордерами и принципов работы CStrategy на хеджируемых типах счетов.

Мы рассмотрели работу с отложенными ордерами и теперь можем создать полноценный эксперт, использующий возможности торгового движка по работе с ними. Наша стратегия будет основана на входах в моменты сильного движения, в направлении этого движения, поэтому она будет называться CImpulse. На открытии каждого нового бара будет отмеряться некоторое расстояние от текущей цены, выраженное в процентах. На одинаковом расстоянии от текущей цены будут выставляться отложенные ордера BuyStop и SellStop. Расстояние  задается в процентах. Если на протяжении одного бара произойдет исполнение одного из ордеров, то значит, цена в этот отрезок времени прошла достаточно большое расстояние, что сигнализирует о наличии импульса на рынке. Ордер будет исполнен и превратится в открытую позицию.

Открытые позиции будут сопровождаться по простой скользящей средней. Если цена вернется к ней, позиция будет закрыта. На скриншоте ниже показан типичный вход в длинную позицию при срабатывании отложенного ордера BuyStop:


Рис. 1. Длинная позиция стратегии CImpulse.

Автор: Vasiliy Sokolov

 

Чтобы упростить работу пользователей, в класс CStrategy были введены три метода: Ask(), Bid() и Last()

А не лучше было бы добавить только один MqlTick

Видео в статье не видно ни в одном браузере. 

 

Просьба к Автору. Ваш подход крайне удобен при написании ТС. Все лишнее скрыто от глаз, что не может не радовать. Какова расплата за это?

Если написать impulse-ТС классическим методом и вашим, то насколько ваш метод будет медленнее в тестере?

То, что код вашего будет красивее, лаконичнее, удобнее и универсальнее - сомнений быть не может.

Мультисимвольные ТС уже поддерживаете (где мультисимвольный OnTick)? 

 
Посмотрел EventChartPBarChanged.mqh. Почему спошной игнор const, где он напрашивается?
 
//| Класс-контенер для управления стратегиями типа CStrategy         |

Опечатка.

 

Мне увиделось недальновидным определение только CStrategyList::OnChartEvent, с дальнейшим вызовом только его в родной OnChartEvent.

Сделал бы базовый класс с виртуальной OnChartEvent. И абсолютно все классы CStrategyList, CStrategy и прочие (кстати, индикаторы у Вас вообще ни от чего не наследуются почему-то) делал бы производными базового. А в родном OnChartEvent прописал один раз вызов в цикле всех виртуальных OnChartEvent, что были созданы.

Смотрю, Вы вовсю используете написанные разработчиками библиотеки. Например, Arrays. Они нормально написаны?

У Вас везде в исходниках вот так

#include <Strategy\Message.mqh>

Это предполагает, что у меня нет папки Strategy под другие нужды. Почему в инклудниках не использовать кавычки, когда это допустимо? И почему не сделать

#include <Sokolov\Strategy\Message.mqh>
 
Anton Zverev:

Мне увиделось недальновидным определение только CStrategyList::OnChartEvent, с дальнейшим вызовом только его в родной OnChartEvent.

Сделал бы базовый класс с виртуальной OnChartEvent. И абсолютно все классы CStrategyList, CStrategy и прочие (кстати, индикаторы у Вас вообще ни от чего не наследуются почему-то) делал бы производными базового. А в родном OnChartEvent прописал один раз вызов в цикле всех виртуальных OnChartEvent, что были созданы.

Да, наверное так будет правильнее. Сейчас событие OnChartEvent как бы игнорируется для экспертов. В следующей версии я внесу соответствующие изменения.

Anton Zverev:

Смотрю, Вы вовсю используете написанные разработчиками библиотеки. Например, Arrays. Они нормально написаны?

Превосходно и к тому же они экстремально оптимизированы. За годы использования уже все алгоритмы в них отработаны и доработаны. Поэтому рекомендую.

Anton Zverev:
У Вас везде в исходниках вот так

Это предполагает, что у меня нет папки Strategy под другие нужды. Почему в инклудниках не использовать кавычки, когда это допустимо? И почему не сделать

Исходники располагающиеся внутри папки Strategy как раз локально ссылаются друг на друга, может я чего просмотрел, не знаю, но должны быть локальные ссылки. Файлы эксперта и собственно модуль эксперта mq5 ссылается на движок глобально, и это тоже правильно, т.к. он является внешним по отношению к библиотеке модулем.

 
Anton Zverev:
Посмотрел EventChartPBarChanged.mqh. Почему спошной игнор const, где он напрашивается?
Предвзятость в отношении const методов. Становление меня как программиста было связано с C# - а там его нет, т.к. ограничение накладываемое модификатором не эффективно.
 
Anton Zverev:

Просьба к Автору. Ваш подход крайне удобен при написании ТС. Все лишнее скрыто от глаз, что не может не радовать. Какова расплата за это?

Если написать impulse-ТС классическим методом и вашим, то насколько ваш метод будет медленнее в тестере?

То, что код вашего будет красивее, лаконичнее, удобнее и универсальнее - сомнений быть не может.

Мультисимвольные ТС уже поддерживаете (где мультисимвольный OnTick)? 

Основное время в тестере стратегий тратиться на работу его инфраструктуры (прокрутка баров, эмуляция торгового окружения и пр.) На сам код эксперта тратиться гораздо меньше времени.

С другой стороны профилирование показало, что основными ресурсоемкими методами CSTartegy являются методы BuyInit, SellInit, BuySupport и SellSupport - т.е. именно сама логика эксперта непосредственно. Все остальные обвязки успешно компилируются в плоский код оптимальным образом, либо просто вырезаются, если не используются. Поэтому высокоуровневое ООП программирование оправдано.

Замечу, что в более менее сложных экспертах, насчитывающих многие правила и имеющую тяжелую инфраструктуру, программирование в изначально плоском виде (без функций и ООП) приведет к неизбежным ошибкам программиста, и как следствие производительность такого эксперта будет даже меньше чем с ООП. Времена ассемблера прошли. Компилятор уже давно победил человека в определенных областях оптимизации. Человеку осталось задавать изначально грамотную и масштабируемую архитектуру с минимальным количеством интерфейсов и хорошей управляемостью.

 
Anton Zverev:

А не лучше было бы добавить только один MqlTick

Видео в статье не видно ни в одном браузере. 

Интересная идея кстати. Мне почему-то об этом не подумалось.

С видео проблемы. В новой версии сайта отказались от флеша. Теперь только на ютебе видео можно смотреть. На публикацию видео уйдет некоторое время, но скоро исправим.

 
Vasiliy Sokolov:

Исходники располагающиеся внутри папки Strategy как раз локально ссылаются друг на друга, может я чего просмотрел, не знаю, но должны быть локальные ссылки. Файлы эксперта и собственно модуль эксперта mq5 ссылается на движок глобально, и это тоже правильно, т.к. он является внешним по отношению к библиотеке модулем.

Просмотрели. Гляньте MoneyManagment.mqh.

 

Глобальный ссылки из mq5 - полностью понимаю необходимость. Но вы застолбили папку Include/Stategy своими решениями. А у меня эта папка используется под свои нужды. И чужие mqh в них видеть не хочется. Логично было бы, если бы Вы всю свою инфраструктуру перенесли в Include\Sokolov\Strategy,  Include\Sokolov\Panel и т.д.

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