Обсуждение статьи "Универсальный торговый эксперт: работа с отложенными ордерами и поддержка хеджинга (часть 5)"
Просьба к Автору. Ваш подход крайне удобен при написании ТС. Все лишнее скрыто от глаз, что не может не радовать. Какова расплата за это?
Если написать impulse-ТС классическим методом и вашим, то насколько ваш метод будет медленнее в тестере?
То, что код вашего будет красивее, лаконичнее, удобнее и универсальнее - сомнений быть не может.
Мультисимвольные ТС уже поддерживаете (где мультисимвольный OnTick)?
//| Класс-контенер для управления стратегиями типа CStrategy |
Опечатка.
Мне увиделось недальновидным определение только CStrategyList::OnChartEvent, с дальнейшим вызовом только его в родной OnChartEvent.
Сделал бы базовый класс с виртуальной OnChartEvent. И абсолютно все классы CStrategyList, CStrategy и прочие (кстати, индикаторы у Вас вообще ни от чего не наследуются почему-то) делал бы производными базового. А в родном OnChartEvent прописал один раз вызов в цикле всех виртуальных OnChartEvent, что были созданы.
Смотрю, Вы вовсю используете написанные разработчиками библиотеки. Например, Arrays. Они нормально написаны?
У Вас везде в исходниках вот так
#include <Strategy\Message.mqh>
Это предполагает, что у меня нет папки Strategy под другие нужды. Почему в инклудниках не использовать кавычки, когда это допустимо? И почему не сделать
#include <Sokolov\Strategy\Message.mqh>
Мне увиделось недальновидным определение только CStrategyList::OnChartEvent, с дальнейшим вызовом только его в родной OnChartEvent.
Сделал бы базовый класс с виртуальной OnChartEvent. И абсолютно все классы CStrategyList, CStrategy и прочие (кстати, индикаторы у Вас вообще ни от чего не наследуются почему-то) делал бы производными базового. А в родном OnChartEvent прописал один раз вызов в цикле всех виртуальных OnChartEvent, что были созданы.
Да, наверное так будет правильнее. Сейчас событие OnChartEvent как бы игнорируется для экспертов. В следующей версии я внесу соответствующие изменения.
Смотрю, Вы вовсю используете написанные разработчиками библиотеки. Например, Arrays. Они нормально написаны?
Превосходно и к тому же они экстремально оптимизированы. За годы использования уже все алгоритмы в них отработаны и доработаны. Поэтому рекомендую.
У Вас везде в исходниках вот так
Это предполагает, что у меня нет папки Strategy под другие нужды. Почему в инклудниках не использовать кавычки, когда это допустимо? И почему не сделать
Исходники располагающиеся внутри папки Strategy как раз локально ссылаются друг на друга, может я чего просмотрел, не знаю, но должны быть локальные ссылки. Файлы эксперта и собственно модуль эксперта mq5 ссылается на движок глобально, и это тоже правильно, т.к. он является внешним по отношению к библиотеке модулем.
Посмотрел EventChartPBarChanged.mqh. Почему спошной игнор const, где он напрашивается?
Просьба к Автору. Ваш подход крайне удобен при написании ТС. Все лишнее скрыто от глаз, что не может не радовать. Какова расплата за это?
Если написать impulse-ТС классическим методом и вашим, то насколько ваш метод будет медленнее в тестере?
То, что код вашего будет красивее, лаконичнее, удобнее и универсальнее - сомнений быть не может.
Мультисимвольные ТС уже поддерживаете (где мультисимвольный OnTick)?
Основное время в тестере стратегий тратиться на работу его инфраструктуры (прокрутка баров, эмуляция торгового окружения и пр.) На сам код эксперта тратиться гораздо меньше времени.
С другой стороны профилирование показало, что основными ресурсоемкими методами CSTartegy являются методы BuyInit, SellInit, BuySupport и SellSupport - т.е. именно сама логика эксперта непосредственно. Все остальные обвязки успешно компилируются в плоский код оптимальным образом, либо просто вырезаются, если не используются. Поэтому высокоуровневое ООП программирование оправдано.
Замечу, что в более менее сложных экспертах, насчитывающих многие правила и имеющую тяжелую инфраструктуру, программирование в изначально плоском виде (без функций и ООП) приведет к неизбежным ошибкам программиста, и как следствие производительность такого эксперта будет даже меньше чем с ООП. Времена ассемблера прошли. Компилятор уже давно победил человека в определенных областях оптимизации. Человеку осталось задавать изначально грамотную и масштабируемую архитектуру с минимальным количеством интерфейсов и хорошей управляемостью.
А не лучше было бы добавить только один MqlTick?
Видео в статье не видно ни в одном браузере.
Интересная идея кстати. Мне почему-то об этом не подумалось.
С видео проблемы. В новой версии сайта отказались от флеша. Теперь только на ютебе видео можно смотреть. На публикацию видео уйдет некоторое время, но скоро исправим.
Исходники располагающиеся внутри папки Strategy как раз локально ссылаются друг на друга, может я чего просмотрел, не знаю, но должны быть локальные ссылки. Файлы эксперта и собственно модуль эксперта mq5 ссылается на движок глобально, и это тоже правильно, т.к. он является внешним по отношению к библиотеке модулем.
Просмотрели. Гляньте MoneyManagment.mqh.
Глобальный ссылки из mq5 - полностью понимаю необходимость. Но вы застолбили папку Include/Stategy своими решениями. А у меня эта папка используется под свои нужды. И чужие mqh в них видеть не хочется. Логично было бы, если бы Вы всю свою инфраструктуру перенесли в Include\Sokolov\Strategy, Include\Sokolov\Panel и т.д.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Универсальный торговый эксперт: работа с отложенными ордерами и поддержка хеджинга (часть 5):
Эта статья продолжает знакомить читателей с торговым движком CStrategy. По многочисленным просьбам пользователей в торговый движок были добавлены функции по работе с отложенными ордерами. Также последние версии MetaTrader 5 стали поддерживать счета с хеджингом. Теперь CStrategy поддерживает и их. В статье дается подробное описание алгоритмов по работе с отложенными ордерами и принципов работы CStrategy на хеджируемых типах счетов.
Мы рассмотрели работу с отложенными ордерами и теперь можем создать полноценный эксперт, использующий возможности торгового движка по работе с ними. Наша стратегия будет основана на входах в моменты сильного движения, в направлении этого движения, поэтому она будет называться CImpulse. На открытии каждого нового бара будет отмеряться некоторое расстояние от текущей цены, выраженное в процентах. На одинаковом расстоянии от текущей цены будут выставляться отложенные ордера BuyStop и SellStop. Расстояние задается в процентах. Если на протяжении одного бара произойдет исполнение одного из ордеров, то значит, цена в этот отрезок времени прошла достаточно большое расстояние, что сигнализирует о наличии импульса на рынке. Ордер будет исполнен и превратится в открытую позицию.
Открытые позиции будут сопровождаться по простой скользящей средней. Если цена вернется к ней, позиция будет закрыта. На скриншоте ниже показан типичный вход в длинную позицию при срабатывании отложенного ордера BuyStop:
Рис. 1. Длинная позиция стратегии CImpulse.
Автор: Vasiliy Sokolov