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

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

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

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

Здесь мы расскажем о трендовой стратегии, основанной взаимном расположении трех скользящих средних.

Определение тренда производится путем анализа взаимного расположения быстрой (FastEMA), средней (MediumEMA) и медленной (Slow EMA) экспоненциально сглаженными скользящими средними:

  • Покупка: FastEMA>MediumEMA>SlowEMA (тренд вверх).
  • Продажа: FastEMA<MediumEMA<SlowEMA (тренд вниз).

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

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

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

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

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

double  FastEMA(int ind)      // возвращает значение быстрой EMA на указанном баре
double  MediumEMA(int ind)    // возвращает значение средней EMA на указанном баре
double  SlowEMA(int ind)      // возвращает значение медленной EMA на указанном баре
Проверка торговых условий на нулевом (незавершенном) баре очень часто приводит к ложным сигналам, поскольку цена (и значения индикаторов) могут меняться.

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

Наличие трендового движения вверх определяется взаимным расположением скользящих средних (FastEMA>MediumEMA>SlowEMA):

  • FastEMA(1)>MediumEMA(1): быстрая EMA выше средней EMA (на последнем сформированном баре);
  • MediumEMA(2)>SlowEMA(1): средняя EMA выше медленной EMA (на последнем сформированном баре);
//+------------------------------------------------------------------+
//| Проверяет выполнение условий для покупки                         |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- проверка наличия тренда вверх (на последнем завершенном баре): FastEMA(1)>MediumEMA(1)>SlowEMA(1)
    return(FastEMA(1)>medium && medium>SlowEMA(1));
  }


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

Наличие трендового движения вниз определяется взаимным расположением скользящих средних (FastEMA<MediumEMA<SlowEMA):

  • FastEMA(1)<MediumEMA(1): быстрая EMA ниже средней EMA (на последнем сформированном баре);
  • MediumEMA(2)<SlowEMA(1): средняя EMA ниже медленной EMA (на последнем сформированном баре);
//+------------------------------------------------------------------+
//| Проверяет выполнение условий для закрытия длинной позиции        |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseLong(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- проверка наличия тренда вниз (на последнем завершенном баре): FastEMA(1)<MediumEMA(1)<SlowEMA(1)
   return(FastEMA(1)<medium && medium<SlowEMA(1));
  }
Для улучшения выхода из сделки правило закрытия длинной позиции можно улучшить: вместо того, чтобы дожидаться появления трендового движения вниз, можно закрывать длинные позиции при появлении флета, который можно идентифицировать неравенством: FastEMA<MediumEMA>SlowEMA.
3. Открытие короткой позиции

//+------------------------------------------------------------------+
//| Проверяет выполнение условий для продажи                         |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- проверка наличия тренда вниз (на последнем завершенном баре): FastEMA(1)<MediumEMA(1)<SlowEMA(1)
   return(FastEMA(1)<medium && medium<SlowEMA(1));

  }

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

//+------------------------------------------------------------------+
//| Проверяет выполнение условий для закрытия короткой позиции       |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseShort(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- проверка наличия тренда вверх (на последнем завершенном баре): FastEMA(1)>MediumEMA(1)>SlowEMA(1)
   return(FastEMA(1)>medium && medium>SlowEMA(1));
  }

Для улучшения выхода из сделки правило закрытия короткой позиции также можно улучшить: вместо того, чтобы дожидаться появления трендового движения вверх, можно закрывать короткие позиции при появлении флета, который можно идентифицировать неравенством: FastEMA>MediumEMA<SlowEMA.


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

Чтобы создать торгового робота по данной стратегии при помощи Мастера MQL5, выберите на втором шаге тип сигналов "Signals based on three EMA":

Рисунок 2. Выбор модуля сигналов на основе трех скользящих средних в Мастере MQL5

Рисунок 2. Выбор модуля сигналов на основе трех скользящих средних в Мастере MQL5

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


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

Результаты тестирования советника на исторических данных (EURUSD H1, период тестирования: 1.1.2010-05.01.2011, FastPeriod=5, MediumPeriod=12, SlowPeriod=24, StopLoss=400, TakeProfit=900).

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

Рисунок 3. Результаты тестирования советника, использующего стратегию трех скользящих средних

Рисунок 3. Результаты тестирования советника, использующего стратегию трех скользящих средних

Файл Signal3EMA.mqh, содержащий класс торговых сигналов CSignal3EMA нужно разместить в каталог_данных_терминала\MQL5\Include\Expert\Signal.

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

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

Торговые сигналы по пересечению ценой скользящей средней из модуля сигналов "Signals based on price crossover with MA" (класс CSignalMA из Стандартной библиотеки).

Линейно регрессионный канал Линейно регрессионный канал

Индикатор строит канал по уравнению линейной регрессии y=b+a*x.

DXMA DXMA

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

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

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