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

 

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

В заключительной части серии статей о торговом движке CStrategy мы рассмотрим одновременную работу нескольких торговых алгоритмов, научимся загружать стратегии из XML-файлов, а также представим простую панель для выбора экспертов, находящихся внутри одного исполняемого модуля, и управления их торговыми режимами.

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

Торговый движок CStrategy включает в себя набор алгоритмов, реализующих совместную работу двух и более торговых стратегий. В четвертой части данной серии статей мы подробно опишем их. Также мы создадим торговый портфель — совокупность экспертов, торгующих одновременно — с целью диверсификации торговых рисков. К алгоритмам, обеспечивающим одновременную работу стратегий, относится класс CStrategyList — контейнер стратегий типа CStrategy. Он позволяет загружать XML-представление стратегий и динамически создавать их с помощью соответствующего метода — фабрики стратегий.

С помощью видео-демонстрации показывается процесс тестирования нескольких стратегий в тестере стратегий MetaTrader 5. Также все стратегии на основе описываемого торгового движка по умолчанию комплектуются пользовательской панелью, с помощью которой достаточно легко управлять конкретными стратегиями прямо на графике.

 

Менеджер стратегий CStrategyList

Вторая статья из серии "Универсальный торговый эксперт" была посвящена базовому классу CStrategy и основным модулям, из которых он состоит. Благодаря этому классу и его функционалу, заключенному в этих модулях, каждая наследуемая от него торговая стратегия обладает унифицированной торговой логикой. Однако организация торгового процесса с помощью роботов — это не только исполнение торговых приказов. Крайне важно обеспечить их совместную работу, в том числе работу нескольких алгоритмов в одном исполняющем модуле ex5.

Рис. 3. Список загруженных экспертов

Рис. 3. Список загруженных экспертов

Автор: Vasiliy Sokolov

 
Большое спасибо Vasiliy Sokolov за столь обстоятельную работу.
Прошу ответить на пару вопросов:
1. Автор в первых статьях писл о платформонезависимости... Что нужно сделать для приспособления этого кода к МТ4 ?
2. При торговле 10-ю инструментами, по 2-3 системы на каждом, у каждой системы 10 параметров, XML-портфель станет очень обширным файлом, который будет сложно без ошибок редактировать руками. Может быть, в этом случае было бы целесообразно хранить XML-портфель в разных файлах - один файл на каждый инструмент, в котором содержится информация о торгуемым на нем системах и их параметрах ? Тогда проще было бы включать/отключать (установкой флажков в файле) как торговлю по инструменту, так и по отдельным ТС на этом инструменте.
 
Mike:
Большое спасибо Vasiliy Sokolov за столь обстоятельную работу.
Прошу ответить на пару вопросов:
1. Автор в первых статьях писл о платформонезависимости... Что нужно сделать для приспособления этого кода к МТ4 ?
2. При торговле 10-ю инструментами, по 2-3 системы на каждом, у каждой системы 10 параметров, XML-портфель станет очень обширным файлом, который будет сложно без ошибок редактировать руками. Может быть, в этом случае было бы целесообразно хранить XML-портфель в разных файлах - один файл на каждый инструмент, в котором содержится информация о торгуемым на нем системах и их параметрах ? Тогда проще было бы включать/отключать (установкой флажков в файле) как торговлю по инструменту, так и по отдельным ТС на этом инструменте.

На первый вопрос к сожалению не так просто ответить. В реальности довольно много нужно еще дописать что бы заставить движок работать в МТ4. В ближайшее время займусь. Когда портирую движок под МТ4 опубликую соответствующую статью.

По поводу второго вопроса - лучше все хранить в одном файле. XML тем и хорош, что позволяет организовывать древовидные секции, и не позволяет запутаться даже в большом объеме тегов. Другое дело, что ручное редактирование XML не приветствуется самим стандартом. Это промышленный формат для общения алгоритмов друг с другом. В идеале, каждому xml-файлу должна соответствовать Гуи мордочка в виде обычного приложения, позволяющего редактировать параметры стратегии. Но это хотя и достаточно просто (с алгоритмической точки зрения) потребует достаточно много времени, поэтому пока редактируем xml напрямую.

 
Vasiliy Sokolov:
 

каждому xml-файлу должна соответствовать Гуи мордочка в виде обычного приложения, позволяющего редактировать параметры стратегии. Но это хотя и достаточно просто (с алгоритмической точки зрения) потребует достаточно много времени, поэтому пока редактируем xml напрямую.

Идеальным решением была бы конпка "Edit" на Пользовательской Панели, которая открывала бы окно для редактирования соответствующей секции <Strategy> ... </Strategy>  :)
 
Mike:
Идеальным решением была бы конпка "Edit" на Пользовательской Панели, которая открывала бы окно для редактирования соответствующей секции <Strategy> ... </Strategy>  :)
Да, было бы круто. Осталось найти того, кто бы впрягся и сделал. Делается не сложно, могу даже подсказать что делать нужно.
 
Vasiliy Sokolov:
Да, было бы круто. Осталось найти того, кто бы впрягся и сделал. Делается не сложно, могу даже подсказать что делать нужно.
Я ешё только учусь ... :)
 

Добрый день, Василий!

 

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

 

у меня вот какой вопрос возник... Почему-то не закрывается позиция при вызове метода m_trade.PositionClose()... при закрытии позиции возникает ошибка 10030, 10015.

я так понимаю по сравнению с MQL4 в части закрытия ордеров/позиций всё очень сильно поменялось...хочется понять в чём проблема...

 

Vasiliy Sokolov, следует заметить что вы проделали громадную работу по созданию универсального движка, и продемонстрировали просто виртуозное владения ООП. Так что изучения данного материала полезно даже само по себе с целью повышения навыков программирования на MQL5.

Движок содержит в себе много нужных и полезных моментов и будет востребован полагаю многими трейдерами.

Так я сейчас провожу миграцию на MT5 своих роботов с движка S#.Shell, и должен сказать что созданный вами торговый движок реализует многие фишки, которых мне не хватало когда я познакомился тут со стандартными шаблонами экспертов, представленных в Codebase. Более того, многие моменты реализованы на том же уровне, и даже круче, хотя упомянутый продукт творчество целой команды программистов.

В связи с этим после ознакомления, решил остановить работы над своим кодом и провести портирование на ваш движок. 

 
Сергей Лебедев:

Vasiliy Sokolov, следует заметить что вы проделали громадную работу по созданию универсального движка, и продемонстрировали просто виртуозное владения ООП. Так что изучения данного материала полезно даже само по себе с целью повышения навыков программирования на MQL5.

Движок содержит в себе много нужных и полезных моментов и будет востребован полагаю многими трейдерами.

Так я сейчас провожу миграцию на MT5 своих роботов с движка S#.Shell, и должен сказать что созданный вами торговый движок реализует многие фишки, которых мне не хватало когда я познакомился тут со стандартными шаблонами экспертов, представленных в Codebase. Более того, многие моменты реализованы на том же уровне, и даже круче, хотя упомянутый продукт творчество целой команды программистов.

В связи с этим после ознакомления, решил остановить работы над своим кодом и провести портирование на ваш движок. 

Спасибо за высокую оценку предложенного мной подхода.

Отмечу, что сам торговый движок CStrategy базируется на стандартной библиотеке, начиная от классов организации данных и заканчивая торговым классом CTrade. Стандартная библиотека хороша, робаста и эффективна, однако не все ее классы действительно являются ОО. Многие из них лишь обертки для стандартных функций. Цель ОО-подхода не в том, что бы вызвать стандартную функцию еще одним более сложным способом, а в том, что бы выполнить полезную задачу наиболее эффективным способом, скрывая при этом сложность реализации. Но это уже философия...

 
Vasiliy Sokolov:

Спасибо за высокую оценку предложенного мной подхода.

Отмечу, что сам торговый движок CStrategy базируется на стандартной библиотеке, начиная от классов организации данных и заканчивая торговым классом CTrade. Стандартная библиотека хороша, робаста и эффективна, однако не все ее классы действительно являются ОО. Многие из них лишь обертки для стандартных функций. Цель ОО-подхода не в том, что бы вызвать стандартную функцию еще одним более сложным способом, а в том, что бы выполнить полезную задачу наиболее эффективным способом, скрывая при этом сложность реализации. Но это уже философия...

Расскажите как пользоваться модулем MoneyManagement. Нигде в примерах не показано. Для каждой стратегии предполагается свои настройки MM или настройки общие для всего портфеля?

Зачем в MoneyManagement.mqh эти внешние переменные? Не пойму где они используются.

input ENUM_MM_TYPE TypeMM;           // Тип управления MM

input double       FixLotOrPercent;  // Фикс. лот или % 

 

Привет.

Интересный материал. Прочитал и решил попробовать на практике. Пытаюсь откомпилировать приложенный эксперт Agent.mq5 в MT5 Build 1295. Все файлы без ошибок, а в конце "Internal compiler error." :( Подскажите где копать?

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