Мастер MQL5: Создание эксперта без программирования
Введение
При создании автоматических торговых систем возникает необходимость написания алгоритмов анализа рыночной ситуации и генерации торговых сигналов, алгоритмов сопровождения открытых позиций, систем управления капиталом и контроля риска торговли.
После того как код модулей написан самой сложной задачей является компоновка всех частей и отладка кода полученного торгового робота. Ключевую роль играет архитектура взаимодействия модулей: если она построена неудачно, то большая часть времени будет потрачена на поиск и исправление ошибок, а замена алгоритма любого из модулей будет приводить к переписыванию всего кода.
В MQL5 использование объектно-ориентированного подхода позволяет значительно упростить задачу написания и тестирования автоматических торговых систем.
MetaQuotes Software Corp. разработала классы для реализации торговых стратегий, теперь код советников можно генерировать автоматически прямо в редакторе MetaEditor путем выбора необходимых модулей торговых сигналов (на текущий момент их 20), трейлинга (4) и управления капиталом (5). Комбинируя эти модули, можно получать множество вариантов готовых торговых систем.
Также вы можете использовать свои собственные классы с реализацией любого из модулей, их можно написать самостоятельно или заказать через сервис "Работа".
В этой статье мы рассмотрим процесс автоматической генерации кода советника с использованием Мастера MQL5. И при этом ничего программировать не придется!
1. Создание торгового робота при помощи Мастера MQL5
Конструирование кода советника производится при помощи Мастера MQL5 редактора MetaEditor.
Базовые классы торговых стратегий расположены в каталоге \папка терминала\MQL5\Include\Expert\. Готовые алгоритмы классов торговых сигналов, классов сопровождения открытых позиций и классов управления капиталом и рисками находятся в подкаталогах Signal, Trailing и Money. Мастер MQL5 анализирует файлы в этих каталогах и использует их для генерации кода советника.
Для вызова Мастера MQL5 нужно нажать кнопку "Создать" в панели инструментов, либо выбрать пункт "Создать" в меню "Файл" главного меню (или при помощи Ctrl+N):
Рис. 1. Запуск Мастера MQL5
Далее следует выбрать тип создаваемой программы. В нашем случае выбираем пункт генерации кода советника "Советник (сгенерировать)":
Рис. 2. Выбор типа создаваемой программы
Шаг 1. Общие параметры советника
Появляется диалог настройки общих параметров советника:
Рис. 3. Общие параметры советника
Задаем наименование советника, имя автора и ссылку на сайт в полях "Имя", "Автор" и "Ссылка".
В советнике также присутствуют входные параметры:
- Symbol (тип string) - рабочий символ советника (по умолчанию - текущий символ, на котором запущен советник);
- TimeFrame (тип timeframe) - рабочий таймфрейм советника (по умолчанию - текущий таймфрейм, на котором запущен советник);
Следующим шагом выберем модуль торговых сигналов, по которым эксперт будет торговать.
Шаг 2. Выбор модуля торговых сигналов
Алгоритм открытия и закрытия позиций определяется модулем торговых сигналов. Модули торговых сигналов содержат правила открытия/закрытия/переворота позиций.
В Стандартной библиотеке есть готовые модули торговых сигналов:
- CSignalAC - Модуль сигналов на основе рыночных моделей индикатора Accelerator Oscillator;
- CSignalAMA - Модуль сигналов на основе рыночных моделей индикатора Adaptive Moving Average;
- CSignalAO - Модуль сигналов на основе рыночных моделей индикатора Awesome Oscillator;
- CSignalBearsPower - Модуль сигналов на основе рыночных моделей осциллятора Bears Power;
- CSignalBullsPower - Модуль сигналов на основе рыночных моделей осциллятора Bulls Power;
- CSignalCCI - Модуль сигналов на основе рыночных моделей осциллятора Commodity Channel Index;
- CSignalDeM - Модуль сигналов на основе рыночных моделей осциллятора DeMarker;
- CSignalDEMA - Модуль сигналов на основе рыночных моделей индикатора Double Exponential Moving Average;
- CSignalEnvelopes - Модуль сигналов на основе рыночных моделей индикатора Envelopes;
- CSignalFrAMA - Модуль сигналов на основе рыночных моделей индикатора Fractal Adaptive Moving Average;
- CSignalITF - Модуль фильтрации сигналов по времени;
- CSignalMACD - Модуль сигналов на основе рыночных моделей осциллятора MACD;
- CSignalMA - Модуль сигналов на основе рыночных моделей индикатора Moving Average;
- CSignalSAR - Модуль сигналов на основе рыночных моделей индикатора Parabolic SAR;
- CSignalRSI - Модуль сигналов на основе рыночных моделей осциллятора Relative Strength Index;
- CSignalRVI - Модуль сигналов на основе рыночных моделей осциллятора Relative Vigor Index;
- CSignalStoch - Модуль сигналов на основе рыночных моделей осциллятора Stochastic;
- CSignalTRIX - Модуль сигналов на основе рыночных моделей осциллятора Triple Exponential Average;
- CSignalTEMA - Модуль сигналов на основе рыночных моделей индикатора Triple Exponential Moving Average;
- CSignalWPR - Модуль сигналов на основе рыночных моделей осциллятора Williams Percent Range.
После нажатия на кнопку "Далее" появится окно выбора набора сигналов, по которым будет торговать советник.
Рис. 4. Выбор сигналов для советника
Для того чтобы добавить модуль торговых сигналов в советник, нужно нажать "Добавить". Тип торговых сигналов указывается в пункте "Имя".
Добавим модуль сигналов на основе рыночных моделей индикатора Moving Average;
Рис. 5. Добавление модуля торговых сигналов и настройка параметров
Каждый тип торговых сигналов имеет свои параметры, которые можно указать в разделе "Параметры". Можно использовать значения, предлагаемые по умолчанию.
Существует два режима создания параметров, переключение между которыми происходит по двойному нажатию левой кнопкой мыши на иконке. Если параметр имеет подсвеченную иконку , то он будет доступен как входная переменная эксперта. Такие параметры могут быть в последующем использованы для оптимизации эксперта в Тестере стратегий. Если параметр имеет серую иконку , то ему будет задано фиксированное значение, недоступное для изменения из свойств эксперта.
После добавления модуля он появится в списке:
Рис. 6. Модуль торговых сигналов добавлен в советник
Шаг 3. Выбор модуля сопровождения открытых позиций
Следующим шагом является выбор алгоритма сопровождения открытых позиций (Trailing Stop). Использование трейлинга позволяет сохранить заработанную прибыль.
В Стандартной библиотеке имеется несколько способов сопровождения открытых позиций:
- Trailing Stop not used (отсутствие Trailing Stop)
- Trailing Stop based on fixed Stop Level (подтяжка защитного стопа на фиксированном "расстоянии");
- Trailing Stop based on MA (установка защитного стопа по значениям скользящей средней);
- Trailing Stop based on Parabolic SAR (трейлинг открытой позиции по значениям индикатора Parabolic SAR).
В нашем советнике выберем "Trailing Stop based on fixed Stop Level":
Рис. 7. Выбор алгоритма сопровождения открытых позиций
Данный тип трейлинга подразумевает два параметра: уровни StopLevel и ProfitLevel (в пунктах для котировок с 2-мя и 4-мя знаками после запятой), которые будут использоваться в процессе сопровождения открытых позиций:
Рис. 8. Установка параметров выбранного алгоритма сопровождения открытых позиций
Шаг 4. Выбор модуля управления капиталом и рисками
На последнем шаге нужно определиться с выбором системы управления капиталом и рисками, которая будет использоваться в советнике.
Предназначение данного алгоритма - определение величины торгового объема (в лотах) для торговых операций, а также риск-менеджмент. При возникновении убытков, величина которых превышает допустимые значения (например, 10% от капитала), модуль управления капиталом и рисками принудительно закроет убыточную позицию.
В Стандартной библиотеке предлагается несколько готовых реализаций алгоритмов управления капиталом и рисками:
- Trading with fixed trade volume (торговля фиксированным количеством лотов);
- Trading with fixed margin (объем операций с фиксированным уровнем использования свободной маржи);
- Trading with fixed risk (вход в рынок с фиксированным уровнем риска);
- Trading with minimal allowed trade volume (торговые операции с минимальным количеством лотов);
- Trading with optimized trade volume (оптимизация торгового объема по результатам предыдущих сделок).
Рис. 9. Выбор алгоритма управления капиталом и рисками
Выберем алгоритм торговли фиксированным количеством лотов (Trading with fixed trade volume).
Выбранный нами модуль имеет два параметра:
- Lots - торговый объем в лотах;
- Percent - максимально допустимый процент риска.
Рис. 10. Установка параметров выбранного алгоритма управления капиталом и рисками
После нажатия кнопки "Готово" в папке \каталог терминала\MQL5\Experts\ появится файл TestExpert.mq5, его имя соответствует наименованию, заданному при создании советника.
2. Структура советника, созданного при помощи Мастера MQL5
Код эксперта, сгенерированный Мастером MQL5, выглядит следующим образом:
//+------------------------------------------------------------------+ //| TestExpert.mq5 | //| Copyright 2012, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Include | //+------------------------------------------------------------------+ #include <Expert\Expert.mqh> //--- available signals #include <Expert\Signal\SignalMA.mqh> //--- available trailing #include <Expert\Trailing\TrailingFixedPips.mqh> //--- available money management #include <Expert\Money\MoneyFixedLot.mqh> //+------------------------------------------------------------------+ //| Inputs | //+------------------------------------------------------------------+ //--- inputs for expert input string Expert_Title ="TestExpert"; // Document name ulong Expert_MagicNumber =23320; // bool Expert_EveryTick =false; // //--- inputs for main signal input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =50.0; // Stop Loss level (in points) input double Signal_TakeLevel =50.0; // Take Profit level (in points) input int Signal_Expiration =4; // Expiration of pending orders (in bars) input int Signal_MA_PeriodMA =85; // Moving Average(85,0,...) Period of averaging input int Signal_MA_Shift =0; // Moving Average(85,0,...) Time shift input ENUM_MA_METHOD Signal_MA_Method =MODE_SMA; // Moving Average(85,0,...) Method of averaging input ENUM_APPLIED_PRICE Signal_MA_Applied =PRICE_CLOSE; // Moving Average(85,0,...) Prices series input double Signal_MA_Weight =1.0; // Moving Average(85,0,...) Weight [0...1.0] //--- inputs for trailing input int Trailing_FixedPips_StopLevel =30; // Stop Loss trailing level (in points) input int Trailing_FixedPips_ProfitLevel=50; // Take Profit trailing level (in points) //--- inputs for money input double Money_FixLot_Percent =10.0; // Percent input double Money_FixLot_Lots =0.1; // Fixed volume //+------------------------------------------------------------------+ //| Global expert object | //+------------------------------------------------------------------+ CExpert ExtExpert; //+------------------------------------------------------------------+ //| Initialization function of the expert | //+------------------------------------------------------------------+ int OnInit() { //--- Initializing expert if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- failed printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(-1); } //--- Creating signal CExpertSignal *signal=new CExpertSignal; if(signal==NULL) { //--- failed printf(__FUNCTION__+": error creating signal"); ExtExpert.Deinit(); return(-2); } //--- ExtExpert.InitSignal(signal); signal.ThresholdOpen(Signal_ThresholdOpen); signal.ThresholdClose(Signal_ThresholdClose); signal.PriceLevel(Signal_PriceLevel); signal.StopLevel(Signal_StopLevel); signal.TakeLevel(Signal_TakeLevel); signal.Expiration(Signal_Expiration); //--- Creating filter CSignalMA CSignalMA *filter0=new CSignalMA; if(filter0==NULL) { //--- failed printf(__FUNCTION__+": error creating filter0"); ExtExpert.Deinit(); return(-3); } signal.AddFilter(filter0); //--- Set filter parameters filter0.PeriodMA(Signal_MA_PeriodMA); filter0.Shift(Signal_MA_Shift); filter0.Method(Signal_MA_Method); filter0.Applied(Signal_MA_Applied); filter0.Weight(Signal_MA_Weight); //--- Creation of trailing object CTrailingFixedPips *trailing=new CTrailingFixedPips; if(trailing==NULL) { //--- failed printf(__FUNCTION__+": error creating trailing"); ExtExpert.Deinit(); return(-4); } //--- Add trailing to expert (will be deleted automatically)) if(!ExtExpert.InitTrailing(trailing)) { //--- failed printf(__FUNCTION__+": error initializing trailing"); ExtExpert.Deinit(); return(-5); } //--- Set trailing parameters trailing.StopLevel(Trailing_FixedPips_StopLevel); trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel); //--- Creation of money object CMoneyFixedLot *money=new CMoneyFixedLot; if(money==NULL) { //--- failed printf(__FUNCTION__+": error creating money"); ExtExpert.Deinit(); return(-6); } //--- Add money to expert (will be deleted automatically)) if(!ExtExpert.InitMoney(money)) { //--- failed printf(__FUNCTION__+": error initializing money"); ExtExpert.Deinit(); return(-7); } //--- Set money parameters money.Percent(Money_FixLot_Percent); money.Lots(Money_FixLot_Lots); //--- Check all trading objects parameters if(!ExtExpert.ValidationSettings()) { //--- failed ExtExpert.Deinit(); return(-8); } //--- Tuning of all necessary indicators if(!ExtExpert.InitIndicators()) { //--- failed printf(__FUNCTION__+": error initializing indicators"); ExtExpert.Deinit(); return(-9); } //--- ok return(0); } //+------------------------------------------------------------------+ //| Deinitialization function of the expert | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ExtExpert.Deinit(); } //+------------------------------------------------------------------+ //| "Tick" event handler function | //+------------------------------------------------------------------+ void OnTick() { ExtExpert.OnTick(); } //+------------------------------------------------------------------+ //| "Trade" event handler function | //+------------------------------------------------------------------+ void OnTrade() { ExtExpert.OnTrade(); } //+------------------------------------------------------------------+ //| "Timer" event handler function | //+------------------------------------------------------------------+ void OnTimer() { ExtExpert.OnTimer(); } //+------------------------------------------------------------------+
Код советника состоит из нескольких секций.
Секция, описывающая свойства программы:
#property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00"
Включаемые файлы:
#include <Expert\Expert.mqh> //--- available signals #include <Expert\Signal\SignalMA.mqh> //--- available trailing #include <Expert\Trailing\TrailingFixedPips.mqh> //--- available money management #include <Expert\Money\MoneyFixedLot.mqh>
Код класса CExpert, экземпляр которого используется в советнике, располагается в файле Expert.mqh.
В файле SignalCrossEMA.mqh содержится код выбранного нами класса торговых сигналов CSignalMA, в файле TrailingFixedPips.mqh находится код используемого нами класса алгоритма сопровождения открытых позиций CTrailingFixedPips, управление капиталом и рисками будет осуществляться при помощи класса CMoneyFixedLot, содержащегося в файле MoneyFixedLot.mqh.
Далее следуют входные параметры советника:
//--- inputs for expert input string Expert_Title ="TestExpert"; // Document name ulong Expert_MagicNumber =23320; // bool Expert_EveryTick =false; // //--- inputs for main signal input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =50.0; // Stop Loss level (in points) input double Signal_TakeLevel =50.0; // Take Profit level (in points) input int Signal_Expiration =4; // Expiration of pending orders (in bars) input int Signal_MA_PeriodMA =85; // Moving Average(85,0,...) Period of averaging input int Signal_MA_Shift =0; // Moving Average(85,0,...) Time shift input ENUM_MA_METHOD Signal_MA_Method =MODE_SMA; // Moving Average(85,0,...) Method of averaging input ENUM_APPLIED_PRICE Signal_MA_Applied =PRICE_CLOSE; // Moving Average(85,0,...) Prices series input double Signal_MA_Weight =1.0; // Moving Average(85,0,...) Weight [0...1.0] //--- inputs for trailing input int Trailing_FixedPips_StopLevel =30; // Stop Loss trailing level (in points) input int Trailing_FixedPips_ProfitLevel=50; // Take Profit trailing level (in points) //--- inputs for money input double Money_FixLot_Percent =10.0; // Percent input double Money_FixLot_Lots =0.1; // Fixed volume
Первые три параметра (Expert_Title, Expert_MagicNumber и Expert_EveryTick) являются общими, они присутствуют всегда вне зависимости от выбранных алгоритмов торговых сигналов, трейлинга и управления капиталом и риском.
Строковой параметр Expert_Title определяет наименование советника, Expert_MagicNumber задает идентификатор советника (это значение будет использоваться в параметрах торговых запросов), при помощи параметра Expert_EveryTick задается режим работы советника. При Expert_EveryTick=true эксперт будет осуществлять вызов функции обработки (проверка торговых условий, проведение торговых операций, сопровождение открытой позиции) каждый раз при поступлении нового тика по рабочему символу.
После общих параметров советника располагаются входные параметры выбранного алгоритма торговых сигналов, они имеют префикс "Signal_". Например, в выбранном нами модуле CSignalMA период скользящей средней определяется значением параметра Signal_MA_PeriodMA.
Выбранный нами способ сопровождения открытых позиций СTrailingStopFixedPips осуществляет сопровождение открытой позиции на фиксированном расстоянии, определяемом уровнями Stop Loss и Take Profit, значения которых задаются в "обычных" 2/4 знаковых пунктах. При движении цены в направлении открытой позиции на расстояние, большее чем количество пунктов, заданных уровнем Trailing_FixedPips_StopLevel, эксперт модифицирует значение ценовых уровней Stop Loss и Take Profit (при Trailing_FixedPips_ProfitLevel>0).
Входные параметры Money_FixLot_Percent и Money_FixLot_Lots соответствуют параметрам алгоритма торговли с фиксированным лотом, реализованного в классе CMoneyFixedLot. В нашем случае торговля будет производится с фиксированным объемом, равным значению параметра Money_FixLot_Lots.
В классе CMoneyFixedLot также реализован алгоритм управления риском: при получении убытка (в процентах от текущего количества средств), указанного в параметре Money_FixLot_Percent, класс CMoneyFixedLot порекомендует классу эксперта произвести принудительное закрытие убыточной позиции, что и будет сделано.
После входных параметров советника декларируется объект ExtExpert класса CExpert:
CExpert ExtExpert;
Это экземпляр класса торговой стратегии.
Объект ExtExpert, будучи экземпляром класса CExpert, содержит ссылки на объекты-потомки классов CExpertSignal (базовый класс торговых сигналов), CExpertMoney (базовый класс управления капиталом и рисками) и CExpertTrailing (базовый класс сопровождения открытых позиций). Помимо этого, класс CExpert содержит экземпляры классов CExpertTrade, СSymbolInfo, CAccountInfo, CPositionInfo, COrderInfo, а также контейнер CIndicators.
Настройка параметров советника заключается в создании экземпляров соответствующих классов и указании классу ExtExpert ссылок на созданные объекты.
Рассмотрим подробнее функцию инициализации советника OnInit, в которой производится инициализация и настройка свойств класса ExtExpert.
1. Инициализация класса ExtExpert:
//--- Initializing expert if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- failed printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(-1); }
Инициализация объекта ExtExpert производится вызовом метода Init, в котором устанавливается символ, таймфрейм, флаг вызова методов обработки на каждом тике, идентификатор эксперта, а также создаются и инициализируются внутренние объекты классов (на этом этапе в качестве объектов сигналов, трейлинга и управления капиталом используются базовые классы CExpertSignal, CExpertMoney, CExpertTrailing).
В случае неудачной инициализации объекта ExtExpert советник закончит работу с кодом возврата -1.
Далее следует инициализация объекта CExpertSignal. В случае ошибки инициализации советник закончит работу с кодом возврата -2.
2. Создание и настройка свойств объекта Signal
//--- Creating signal CExpertSignal *signal=new CExpertSignal; if(signal==NULL) { //--- failed printf(__FUNCTION__+": error creating signal"); ExtExpert.Deinit(); return(-2); } //--- ExtExpert.InitSignal(signal); signal.ThresholdOpen(Signal_ThresholdOpen); signal.ThresholdClose(Signal_ThresholdClose); signal.PriceLevel(Signal_PriceLevel); signal.StopLevel(Signal_StopLevel); signal.TakeLevel(Signal_TakeLevel); signal.Expiration(Signal_Expiration); //--- Creating filter CSignalMA CSignalMA *filter0=new CSignalMA; if(filter0==NULL) { //--- failed printf(__FUNCTION__+": error creating filter0"); ExtExpert.Deinit(); return(-3); } signal.AddFilter(filter0); //--- Set filter parameters filter0.PeriodMA(Signal_MA_PeriodMA); filter0.Shift(Signal_MA_Shift); filter0.Method(Signal_MA_Method); filter0.Applied(Signal_MA_Applied); filter0.Weight(Signal_MA_Weight);
Настройка объекта торговых сигналов состоит из нескольких этапов:
- Создание объекта торговых сигналов и установка его параметров;
- Создание объекта модуля торговых сигналов, установка его параметров и добавление в экземпляр класса CExpertSignal;
В случае неудачной инициализации объекта торговых сигналов советник закончит работу с кодом возврата (от -2 до -3), зависящем от этапа, на котором произошла ошибка.
В зависимости от того как были заданы параметры при создании советника через Мастер MQL5, генерируется соответствующий код.
//--- Set signal parameters filter0.PeriodMA(85); //--- параметр был задан фиксированным в Мастере MQL5 //--- (серая иконка - фиксированное значение, равное 85) filter0.SlowPeriod(Signal_MA_Shift; //--- параметр был задан input-переменной //--- (голубая иконка - входной параметр эксперта)
Если параметр фиксированный и при этом его значение не отличается от значения по умолчанию, то он не будет прописываться в сгенерированном коде. В таком случае будет использовано значение параметра по умолчанию, заданное в соответствующем классе.
3. Создание и настройка свойств объекта Trailing
//--- Creation of trailing object CTrailingFixedPips *trailing=new CTrailingFixedPips; if(trailing==NULL) { //--- failed printf(__FUNCTION__+": error creating trailing"); ExtExpert.Deinit(); return(-4); } //--- Add trailing to expert (will be deleted automatically)) if(!ExtExpert.InitTrailing(trailing)) { //--- failed printf(__FUNCTION__+": error initializing trailing"); ExtExpert.Deinit(); return(-5); } //--- Set trailing parameters trailing.StopLevel(Trailing_FixedPips_StopLevel); trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);
Настройка объекта трейлинга также состоит из 4 этапов:
- Создание объекта трейлинга (Creation of trailing object);
- Инициализация созданного объекта трейлинга в объекте ExtExpert (Add trailing to expert);
- Установка параметров объекта трейлинга (Set trailing parameters);
В случае неудачной инициализации объекта трейлинга советник закончит работу с кодом возврата (от -4 до -5), зависящем от этапа, на котором произошла ошибка.
4. Создание и настройка свойств объекта money
//--- Creation of money object CMoneyFixedLot *money=new CMoneyFixedLot; if(money==NULL) { //--- failed printf(__FUNCTION__+": error creating money"); ExtExpert.Deinit(); return(-6); } //--- Add money to expert (will be deleted automatically)) if(!ExtExpert.InitMoney(money)) { //--- failed printf(__FUNCTION__+": error initializing money"); ExtExpert.Deinit(); return(-7); } //--- Set money parameters money.Percent(Money_FixLot_Percent); money.Lots(Money_FixLot_Lots);
Настройка объекта управления капиталом и рисками также состоит из 4 этапов:
- Создание объекта money (Creation of money object);
- Инициализация созданного объекта money в объекте ExtExpert (Add money to expert);
- Установка параметров объекта money (Set money parameters);
В случае неудачной инициализации объекта money советник закончит работу с кодом возврата (от -6 до -7), зависящем от этапа, на котором произошла ошибка.
5. Инициализация всех индикаторов, используемых в классах
//--- Check all trading objects parameters if(!ExtExpert.ValidationSettings()) { //--- failed ExtExpert.Deinit(); return(-8); } //--- Tuning of all necessary indicators if(!ExtExpert.InitIndicators()) { //--- failed printf(__FUNCTION__+": error initializing indicators"); ExtExpert.Deinit(); return(-9); } //--- ok return(0);
После создания и инициализации объектов торговых сигналов, трейлинга и управления капиталом вызывается метод ValidationSettings() объекта ExtExpert, в котором производится проверка настроек и метод InitIndicators(), в котором производится инициализация индикаторов, используемых в объектах signal, trailing и money.
Обработка событий OnDeinit, OnTick, OnTrade и OnTimer осуществляется вызовом соответствующих методов класса ExtExpert.
С подробностями реализации методов класса CExpert можно ознакомится в коде индикатора, расположенном в файле \папка терминала\MQL5\Include\Expert\expert.mqh
3. Проверка созданного советника в тестере стратегий MetaTrader 5
Если все компоненты Стандартной библиотеки присутствуют, код сгенерированного эксперта успешно компилируется:
Рис. 11. Успешная компиляция кода эксперта, созданного Мастером MQL5
Полученный советник будет торговать в соответствии с выбранными алгоритмами торговых сигналов, сопровождения открытых позиций и управления капиталом и рисками.
Работу построенной торговой системы можно проверить при помощи Тестера стратегий терминала MetaTrader 5. На рис. 11 приведены результаты тестирования на исторических данных с параметрами по умолчанию (EURUSD, H1, период тестирования: 2010.01.01-2011.06.01):
Рис. 12. Результаты тестирования советника на исторических данных (EURUSD, H1)
Наилучший набор параметров советника можно найти при помощи оптимизации в тестере стратегий терминала MetaTrader 5.
Заключение
Использование классов торговых стратегий значительно упрощает создание и проверку торговых идей. Теперь код эксперта можно конструировать прямо в редакторе MetaEditor при помощи Мастера MQL5 на базе готовых модулей Стандартной библиотеки либо при помощи своих собственных модулей.
Если же вы не хотите или не можете написать собственный модуль торговых сигналов, то всегда можно обратиться в сервис Работа и заказать даже не сам код торгового робота, а только необходимый модуль. Такой подход дает дополнительные преимущества:
- стоимость разработки модуля должна быть ниже, чем стоимость разработки эксперта в целом;
- при этом полученный модуль можно использовать многократно не только для создания одного конкретного эксперта, а для генерации с помощью Мастера MQL5 целого семейства торговых роботов, базирующихся на данном модуле;
- заказываемый модуль должен строго соответствовать дополнительным требованиям Мастера MQL5, а это дает дополнительный контроль качества кода.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вот и я про то...
GBPUSD, H1, верно.
Вот на другом компе, тоже самое.
Виноват. Нашли ошибку. Результаты улучшения кода. Исправлено. Скоро будет.
Наверное правильнее так:
"Обработка событий Deinit, NewTick, Trade и Timer осуществляется вызовом соответствующих методов класса ExtExpert."
Добрый!
Для начинающих, расшифруйте, пожалуйста, вот этот способ инициализации переменной:
CExpertSignal *signal=new CExpertSignal;
а то плаваю много...Спасибо!
Почитайте статью Порядок создания и уничтожения объектов в MQL5.