Смотри, как бесплатно скачать роботов
Ищи нас в Telegram!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Советники

Мастер MQL5 - Торговые сигналы по пересечению ценой средней с подтверждением от индикатора ADX - эксперт для MetaTrader 5

Просмотров:
5485
Рейтинг:
(30)
Опубликован:
2011.01.10 16:50
Обновлен:
2016.11.22 07:33
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

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

Здесь мы расскажем о трендовой стратегии, основанной на пересечении ценой скользящей средней c подтверждением при помощи индикатора ADX. Эта стратегия включена в стандартную поставку терминала и называется "Signals based on price crossover with MA confirmed by ADX".

Основные положения стратегии:

  • Покупка: цена закрытия завершенного бара выше скользящей средней, при этом скользящая средняя возрастает на предыдущем и текущем барах.
  • Продажа: цена закрытия завершенного бара ниже скользящей средней, при этом скользящая средняя убывает на предыдущем и текущем барах.
  • Дополнительно реализована фильтрация ложных сигналов путем анализа наличия направления (DI+, DI-) и силы трендового движения (ADX>ADXmin).

Торговая стратегия реализована в классе CSignalADX_MA.

Рисунок 1. Торговые сигналы стратегии пересечения ценой скользящей средней с подтверждением ADX

Рисунок 1. Торговые сигналы стратегии пересечения ценой скользящей средней с подтверждением ADX

Торговые сигналы

Модуль с торговыми сигналами по данной стратегии реализован в классе CSignalADX_MA, в нем есть несколько защищенных (protected) методов, которые используются для доступа к значениям цен и индикаторов:

double   PlusADX(int ind)     // возвращает значение линии DI+ на указанном баре
double   MainADX(int ind)     // возвращает значение основной линии на указанном баре
double   MinusADX(int ind)    // возвращает значение линии DI- на указанном баре
double   EMA(int ind)         // возвращает значение скользящей средней на указанном баре
double   Close(int ind)       // возвращает значение цены закрытия на указанном баре
double   StateADX(int ind)    // возвращает разность между линиями DI+ и DI-
double   StateEMA(int ind)    // возвращает положительное значение, если EMA возрастает и отрицательное, если убывает
double   StateClose(int ind)  // возвращает разность между ценой закрытия и скользящей средней
Особенность реализации данных торговых сигналов заключается в том, что при проверке торговых условий наряду с данными последнего сформировавшегося бара используются значения текущего бара. В данном случае основная фильтрация ложных сигналов производится при помощи анализа направленного движения (линий индикатора ADX).


1. Открытие длинной позиции

Условия открытия длинной позиции:

  1. StateEMA(0)<0 и StateEMA(1)>0: скользящая средняя возрастает на текущем и предыдущем баре;
  2. StateClose(1)>0: цена закрытия завершенного бара выше скользящей средней;
  3. MainADX(0)>minimum_ADX: значение ADX на текущем баре больше минимально заданного;
  4. StateADX(0)>0: на текущем баре значение DI+>DI-.
//+------------------------------------------------------------------+
//| Проверяет выполнение условий для покупки                         |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
//--- условие 1: скользящая средняя возрастает на текущем и предыдущем баре 
   bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0);
//--- условие 2: цена закрытия завершенного бара выше скользящей средней 
   bool Buy_Condition_2=(StateClose(1)>0);
//--- условие 3: значение ADX на текущем баре больше минимально заданного 
   bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- условие 4: на текущем баре значение DI+ больше, чем DI-
   bool Buy_Condition_4=(StateADX(0)>0);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- проверка одновременного выполнения всех 4 условий
   return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }


2. Закрытие длинной позиции

Условия закрытия длинной позиции:

  1. StateEMA(0)<0 и StateEMA(1)<0: скользящая средняя убывает на текущем и предыдущем баре;
  2. StateClose(1)<0: цена закрытия завершенного бара ниже скользящей средней;
  3. MainADX(0)>minimum_ADX: значение ADX на текущем баре больше минимально заданного;
  4. StateADX(0)<0: на текущем баре значение DI->DI+.
//+------------------------------------------------------------------+
//| Проверяет выполнение условий для закрытия длинной позиции        |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckCloseLong(double& price)
  {
//--- условие 1: скользящая средняя убывает на текущем и предыдущем баре 
   bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0);
//--- условие 2: цена закрытия завершенного бара ниже скользящей средней 
   bool Sell_Condition_2=(StateClose(1)<0);
//--- условие 3: значение ADX на текущем баре больше минимально заданного 
   bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- условие 4: на текущем баре DI- больше, чем DI+
   bool Sell_Condition_4=(StateADX(0)<0);
//---
   price=0.0;
//--- проверка одновременного выполнения всех 4 условий
   return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4);
  }


3. Открытие короткой позиции

Правила открытия короткой позиции аналогичны правилам закрытия длинной позиции.

//+------------------------------------------------------------------+
//| Проверяет выполнение условий для продажи                         |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
//--- условие 1: скользящая средняя убывает на текущем и предыдущем баре 
   bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0);
//--- условие 2: цена закрытия завершенного бара ниже скользящей средней 
   bool Sell_Condition_2=(StateClose(1)<0);
//--- условие 3: значение ADX на текущем баре больше минимально заданного 
   bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- условие 4: на текущем баре DI- больше, чем DI+
   bool Sell_Condition_4=(StateADX(0)<0);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- проверка одновременного выполнения всех 4 условий
   return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4);
  }


4. Закрытие короткой позиции

Правила закрытия короткой позиции аналогичны правилам открытия длинной позиции.

//+------------------------------------------------------------------+
//| Проверяет выполнение условий для закрытия короткой позиции       |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckCloseShort(double& price)
  {
//--- условие 1: скользящая средняя возрастает на текущем и предыдущем баре
   bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0);
//--- условие 2: цена закрытия завершенного бара выше скользящей средней 
   bool Buy_Condition_2=(StateClose(1)>0);
//--- условие 3: значение ADX на текущем баре больше минимально заданного
    bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- условие 4: на текущем баре значение DI+ больше, чем DI-
   bool Buy_Condition_4=(StateADX(0)>0);
//---
   price=0.0;
//--- проверка одновременного выполнения всех 4 условий
  return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }

Создание эксперта на основе торговых сигналов при помощи Мастера MQL5

Чтобы создать торгового робота по данной стратегии при помощи Мастера MQL5, выберите на втором шаге тип сигналов "Signals based on price crossover with MA confirmed by ADX":

Рисунок 2. Выбор модуля сигналов пересечения ценой скользящей средней с подтверждением от ADX в Мастере MQL5

Рисунок 2. Выбор модуля сигналов пересечения ценой скользящей средней с подтверждением от ADX в Мастере MQL5

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


Результаты тестирования

Результаты тестирования советника на исторических данных (EURUSD H1, период тестирования: 1.1.2010-05.01.2011,  PeriodADX=33, MinimumADX=22, PeriodMA=39, StopLoss=400, TakeProfit=900).

В данном советнике использовался модуль торговли фиксированным объемом 0.1 лота (Trading Fixed Lot), трейлинг не использовался (Trailing not used).

Рисунок 3. Результаты тестирования советника, использующего стратегию пересечения ценой скользящей средней с подтверждением от ADX

Рисунок 3. Результаты тестирования советника, использующего стратегию пересечения ценой скользящей средней с подтверждением от ADX


Файл SignalADX-MA.mqh, содержащий класс торговых сигналов CSignalADX_MA нужно скопировать в папку каталог_данных_терминала\MQL5\Include\Expert\Signal.

Код советника, созданного Мастером MQL5, прилагается в файле ma_crossover_adx.mq5.


DXMA DXMA

Индикатор скользящей средней с учетом DMI (Directional Movement Index).

Мастер MQL5 - Торговые сигналы по взаимному расположению трех скользящих средних Мастер MQL5 - Торговые сигналы по взаимному расположению трех скользящих средних

Торговые сигналы по взаимному расположению трех экспоненциально сглаженных скользящих средних "Signals based on three EMA".

SelfGenerator SelfGenerator

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

Мастер MQL5 - Торговые сигналы по пересечению двух экспоненциальных скользящих средних Мастер MQL5 - Торговые сигналы по пересечению двух экспоненциальных скользящих средних

Торговые сигналы по пересечению двух экспоненциально сглаженных скользящих средних "Signals based on crossover of two EMA".