Мастер MQL5: Новая версия

MetaQuotes | 27 апреля, 2011


В терминал MetaTrader 5 продолжают вноситься улучшения, добавляется новый функционал. В очередном (439) билде MetaTrader 5 обновился и Мастер MQL5, который позволяет создавать советники с еще более гибкими торговыми правилами. В этой статье мы покажем новые возможности Мастера MQL5 и расскажем об изменениях в архитектуре экспертов, получаемых при его использовании.


Предпосылки

С самого начала Мастер MQL5 задумывался как инструмент для удобного создания программ на MQL5. Уже в первой версия Мастера MQL5 была возможность быстро создать готовый к использованию эксперт как совокупность простых модулей в виде исходного кода на языке MQL5. Для этого даже не требовалось знания языка MQL5, достаточно было прочитать статью "Собери свой торговый советник в Мастере MQL5".

Всего в составе сгенерированного Мастером эксперта содержится три модуля:

Каждый модуль эксперта основан на собственном базовом классе и предоставляет массу возможностей для модификации поведения готового эксперта.

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

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

Еще один недостаток предыдущей версии Мастер MQL5 заключался в том, что для реализации немного измененного нового торгового алгоритма требовалось написание нового класса.

Учитывая полученный опыт и замечания пользователей, было решено создать более продвинутую и богатую по возможностям новую версию Мастера MQL5.


Новая концепция генерации торговых сигналов

Основным камнем преткновения при использовании предыдущей версии Мастера MQL5 стали сложности создания модуля собственных торговых сигналов. Поэтому при разработке новой версии Мастера MQL5 основной упор был сделан на упрощение создания комбинированных торговых сигналов на простых принципах.

Для этого в базовый класс генератора торговых сигналов (далее Сигнал ) внесены следующие изменения:

Таким образом, решения о входе в рынок в ту или другую сторону теперь могут приниматься "коллегиально", то есть с учётом "взвешенного мнения" каждого советчика.

Сигнал "голосует" по вопросам направления движения цены на основании встроенных алгоритмов определения рыночных моделей (характерных для данного Сигнала). Например, Сигнал на основе осциллятора Stochactic умеет идентифицировать разворот, дивергенцию с ценой и др.

В состав Стандартной библиотеки входит уже двадцать готовых Сигналов на основе различных индикаторов.


Новый механизм принятия торговых решений

Механизм принятия торговых решений Сигналом можно представить в виде следующих основных положений:

В настройках каждого сгенерированного эксперта присутствуют два параметра — пороговые значения для принятия решения об открытии или закрытии позиции (ThresholdOpen и ThresholdClose) которые могут иметь значение от 0 до 100. Если сила Сигнала преодолевает пороговое значение, принимается решение о совершении торговой операции в направлении, соответствующему знаку прогноза.

Вспомним, что собранный Мастером MQL5 эксперт состоит из трех частей, и самой важной является голова, в которой реализован модуль генерации торгового сигнала. Тогда процессы в модуле сигналов можно изобразить так:



На рисунке показано, что модуль Сигнал может содержать в себе два блока - блок рыночных моделей и блок советчиков. Блок моделей выдает прогноз каждой модели и из них выбирается самый сильный. Прогнозы советчиков (другие Сигналы) умножаются на соответствующие им веса и полученные прогнозы при голосовании складываются, чтобы получить среднеарифметический прогноз. В данном случае модуль Сигнал выдал для текущей ситуации прогноз -36,6 =(-100+60-54)/3. Это означает прогноз на продажу с абсолютной силой 36,6.

Рассмотрим механизм принятия решения на двух простых примерах.

Пусть существует некий советник с пороговыми значениями ThresholdOpen=20 и ThresholdClose=90. В принятии решений о торговых операциях участвуют модули сигналов на основе MA с весом 0.4 и Stochastic с весом 0.8. Рассмотрим два варианта полученных торговых сигналов:



Рисунок 1. Пример рыночных моделей на графике

На рисунке показаны рыночные модели, описанные в рассматриваемых примерах:

    a) Дивергенция цены и осциллятора Stochastic  используется в вариантах 1 и 2.
    b) Цена пересекла индикатор MA
снизу вверх -  используется в варианте 1.
    c) Цена пересекла индикатор MA сверху вниз -  используется в варианте 2.


Комбинирование сигналов в эксперте

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

Для примера предлагаются такие условия торговли:

  1. Торговля будет вестись на символе EURUSD. Таймфрейм M10,
  2. Используемые Сигналы:
    • EMA('EURUSD',M10,31) - сигналы на основе экспоненциальной скользящей средней;
    • Stochastic('EURUSD',M10,8,3,3) - сигналы на основе стохастического осциллятора;
    • EMA('EURUSD',H1,24) - сигналы на основе экспоненциальной скользящей средней с другого таймфрейма;
    • Stochastic('EURJPY',H4,8,3,3) - сигналы на основе стохастического осциллятора с другого символа и таймфрейма;
    • IntradayTimeFilter - фильтр по времени суток и номеру дня недели.


Создание торгового робота в новом Мастере MQL5

Конструирование кода советника производится при помощи Мастера MQL5 редактора MetaEditor.

Базовые классы торговых стратегий расположены в каталоге папка_данных_терминала\MQL5\Include\Expert\. Готовые алгоритмы классов торговых сигналов, классов сопровождения открытых позиций и классов управления капиталом и рисками находятся в подкаталогах Signal, Trailing и Money. Мастер MQL5 анализирует файлы в этих каталогах и использует их для генерации кода советника.

Базовые классы для Мастера MQL5

Рисунок 2. Базовые классы для Мастера MQL5

Для вызова Мастера MQL5 нужно нажать кнопку "Создать" в панели инструментов, либо выбрать пункт "Создать" в меню "Файл" главного меню (или при помощи Ctrl+N):


Рисунок 3. Запуск Мастера MQL5

Далее следует выбрать тип создаваемой программы. В нашем случае выбираем пункт генерации кода советника "Советник (сгенерировать)":

Рисунок 4. Выбор типа создаваемой программы


Шаг 1. Общие параметры советника

Появляется диалог настройки общих параметров советника:


Рисунок 5. Общие параметры советника

Задаем наименование советника, имя автора и ссылку на сайт в полях "Имя", "Автор" и "Ссылка".

В советнике также присутствуют входные параметры:

По-умолчанию оба параметра имеют значение "current" (то есть советник будет тестироваться и торговать на любом символе/таймфрейме).

Но задумаемся, всегда ли это хорошо. Например, советник, отлаженный для внутридневной торговли на EURUSD (да если ещё, как у нас, используется подтверждение от кроссовой пары), вы по ошибке запустите на недельном графике AUDNZD. Думается, ничего хорошего.

Поэтому лучше будет установить необходимые значения параметров. Следующим шагом определим набор торговых сигналов, по которым эксперт будет торговать. Для перехода к выбору сигналов, нажмём кнопку "Далее"


Шаг 2. Выбор модулей торговых сигналов

Алгоритм открытия и закрытия позиций определяется модулями торговых сигналов. Модули торговых сигналов содержат правила открытия/закрытия/переворота позиций.

Советник может одновременно использовать до 64-х различных (или одинаковых, но с разными настройками) модулей торговых сигналов.



Рисунок 6. Параметры сигналов советника (начало).

В Стандартной библиотеке есть готовые модули торговых сигналов:

  1. Signals of indicator 'Accelerator Oscillator' (сигналы по рыночным моделям индикатора AC);
  2. Signals of indicator 'Adaptive Moving Average' (сигналы по рыночным моделям индикатора AMA);
  3. Signals of indicator 'Awesome Oscillator' (сигналы по рыночным моделям индикатора AO);
  4. Signals of oscillator 'Bears Power' (сигналы по рыночным моделям осциллятора Bears Power);
  5. Signals of oscillator 'Bulls Power' (сигналы по рыночным моделям осциллятора Bulls Power);
  6. Signals of oscillator 'Commodity Channel Index' (сигналы по рыночным моделям осциллятора CCI);
  7. Signals of oscillator 'DeMarker' (сигналы по рыночным моделям осциллятора DeM);
  8. Signals of indicator 'Double Exponential Moving Average' (сигналы по рыночным моделям индикатора DEMA);
  9. Signals of indicator 'Envelopes' (сигналы по рыночным моделям индикатора Envelopes);
  10. Signals of indicator 'Fractal Adaptive Moving Average' (сигналы по рыночным моделям индикатора FrAMA);
  11. Signals of intraday time filter (сигналы внутридневного временного фильтра);
  12. Signals of oscillator 'Moving Average Convergence/Divergence' (сигналы по рыночным моделям осциллятора MACD);
  13. Signals of indicator 'Moving Average' (сигналы по рыночным моделям индикатора MA);
  14. Signals of indicator 'Parabolic SAR' (сигналы по рыночным моделям индикатора PSAR);
  15. Signals of oscillator 'Relative Strength Index' (сигналы по рыночным моделям осциллятора RSI);
  16. Signals of oscillator 'Relative Vigor Index' (сигналы по рыночным моделям осциллятора RVI);
  17. Signals of oscillator 'Stochastic' (сигналы по рыночным моделям осциллятора Stochastic);
  18. Signals of oscillator 'Triple Exponential Average' (сигналы по рыночным моделям осциллятора TriX);
  19. Signals of indicator  'Triple Exponential Moving Average' (сигналы по рыночным моделям индикатора TEMA);
  20. Signals of oscillator 'Williams Percent Range' (сигналы по рыночным моделям осциллятора WPR).



Рисунок 7. Выбор сигналов

Согласно нашему "Техническому заданию", первым мы выберем сигнал "Signals of indicator 'Moving Average''.

Настроим необходимые параметры (PeriodMA и Method). Двойным щелчком мышки по полю "Имя", отстраним от участия в оптимизации (по умолчанию все параметры сигнала помечены как input-параметры) все параметры, кроме Weight.

Отдельно остановимся на полях "Symbol" и "TimeFrame". Эти поля нужно заполнять, если соответствующие настройки сигнала отличаются от текущих. Текущими настройками сигнал считает настройки "вышестоящего разума" (в данном случае советника).


Рисунок 8. Настройка параметров сигнала

Добавим остальные сигналы, проведя необходимые настройки. Для оптимизации всем сигналам оставляем только параметр Weight.

Настройка сигналов закончена. Можно нажать кнопку "Далее" для продолжения.


Рисунок 9. Параметры сигналов советника (конец)


Шаг 3. Выбор модуля сопровождения открытых позиций

Следующим шагом является выбор алгоритма сопровождения открытых позиций (Trailing Stop). Использование трейлинга позволяет сохранить заработанную прибыль.

Настройки этого модуля подробно описаны в статье Мастер MQL5: Создание эксперта без программирования. В нашем случае трейлинг использоваться не будет.


Рисунок 10. Выбор алгоритма сопровождения позиции


Шаг 4. Выбор модуля управления капиталом и рисками

На последнем шаге нужно определиться с выбором системы управления капиталом и рисками, которая будет использоваться в советнике. Настройки этого модуля подробно описаны в статье Мастер MQL5: Создание эксперта без программирования. В нашем случае торговля будет вестись фиксированным лотом.


Рисунок 11. Выбор алгоритма управления капиталом

Вот и всё. Нажимаем кнопку "Готово".


Проверка созданного советника в тестере стратегий MetaTrader 5

Если все компоненты Стандартной библиотеки присутствуют, код сгенерированного эксперта успешно компилируется. Наилучший набор параметров советника можно найти при помощи оптимизации в тестере стратегий терминала MetaTrader 5.

Оптимизацию советника проведём на периоде с 01.01.10 по 01.01.11, в два этапа.

Первый этап: "Подбор весовых коэффициентов сигналов, пороговых значений срабатывания условий входа/выхода и торговых уровней".


Рисунок 12. Параметры оптимизации советника

Вот результат лучшего "прогона" оптимизации.


Рисунок 13. Результаты оптимизации советника

Как видим, мы уже получили неплохие результаты (с точки зрения прибыли и максимальной просадки). Не нужно забывать, что мы "торговали" фиксированным лотом.

Но давайте попробуем ещё улучшить результаты. Для этого у нас в припасён ещё один сигнал (настройки которого мы пока не использовали). Найденные в результате оптимизации значения параметров однозначно описывают некую рыночную модель, которую распознаёт советник.

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

Для этого проведём оптимизацию эксперта по параметру "Bad hours" Сигнала "IntradayTimeFilter". Параметр "Bad hours" представляет собой битовую карту размером 24 бита (по количеству часов в сутках). Каждый бит битовой маски однозначно соответствует одному из часов в сутках (номер бита в маске и номер часа в сутках совпадают). Значение любого бита равное 1 аннулирует любые результату голосования, если номер текущего часа в сутках равен номеру этого бита (то есть этот час считается неудачным для совершения торговых операций).

Для перебора всех возможных комбинаций "хороших" и "плохих" часов, проведём оптимизацию параметра с 0 до 2^24-1 (в натуральном виде 16 777 215) с шагом 1.


Рисунок 14. Параметры оптимизации советника

В результате оптимизации параметра, получилось число 11 665 415. Чтобы понять, что это означает, выразим его в двоичном виде:

Вот параметры советника после всех оптимизаций.


Рисунок 15. Параметры советника

Отчёт одиночного тестирования с наилучшими параметрами прилагается. Прибыль увеличилась, а просадка уменьшилась. Можно сделать вывод, что в результате временной фильтрации результаты торговой системы на историческом периоде улучшились.


Заключение

Использование классов торговых стратегий значительно упрощает создание роботов для проверки торговых идей прямо в редакторе MetaEditor при помощи Мастера MQL5. Теперь код эксперта можно конструировать на базе комбинаций готовых модулей Стандартной библиотеки либо при помощи своих собственных модулей.