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

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

Просмотров:
6079
Рейтинг:
(33)
Опубликован:
2011.01.14 18:35
Обновлен:
2016.11.22 07:33
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

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

Мы рассмотрим стратегию, основанную на пересечении линий технического индикатора Alligator, описанного в книге Б. Вилльямса "Торговый хаос". Эта стратегия включена в стандартную поставку терминала, в Мастере MQL5 она называется "Signals based on the Alligator".

Эта система представляет собой комбинацию трех смещенных скользящих средних (линии Lips, Teeth и Jaw) и осцилляторов, построенных на их основе. Линии индикатора Alligator генерируют сигнал на открытие позиции, когда они пересекаются в одной точке и выходят из нее, расположившись в соответствии со своими периодами.

При движении рынка вверх самой верхней скользящей средней будет средняя с минимальным периодом (линия Lips), затем идет средняя с коротким периодом (линия Teeth) и ниже всех располагается средняя с самым большим периодом (линия Jaw). Аналогичным образом при движении рынка вниз самой нижней будет линия Lips, затем следует линия Teeth, и самой высокой будет линия Jaw.

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

  • Открытие длинной позиции: пересечение линий Аллигатора и их расхождение после пересечения при движении вверх;
  • Закрытие длинной позиции: линия Lips пересекает линию Jaw снизу вверх;
  • Открытие короткой позиции: пересечение линий Аллигатора и их расхождение после пересечения при движении вниз;
  • Закрытие короткой позиции: Lips линия пересекает линию Jaw сверху вниз.

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

Рисунок 1. Торговые сигналы стратегии, торгующей по пересечению линий индикатора Alligator

Рисунок 1. Торговые сигналы стратегии, торгующей по пересечению линий индикатора Alligator


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

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

double   Jaw(int ind)              // возвращает значение линии Jaw (челюсть Аллигатора) на заданном баре
double   Teeth(int ind)            // возвращает значение линии Teeth (зубы Аллигатора) на заданном баре
double   Lips(int ind)             // возвращает значение линии Lips (губы Аллигатора) на заданном баре
double   LipsTeethDiff(int ind)    // возвращает разность между линиями Lips и Teeth заданном баре
double   TeethJawDiff(int ind)     // возвращает разность между линиями Teeth и Jaw на заданном баре
double   LipsJawDiff(int ind)      // возвращает разность между линиями Lips и Jaw на заданном баре
bool     CheckCross();            // используется для проверки факта пересечения линий


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

Поскольку индикаторные линии строятся со смещениями (индикаторные линии сдвинуты в будущее), то проверка условий имеет особенности.

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

  • При помощи метода CheckCross проверяется факт "расхождения" линий;
  • LipsTeethDiff(-2)>=LipsTeethDiff(-1) и  LipsTeethDiff(-1)>=LipsTeethDiff(0); проверка монотонности "расхождения" между линиями Lips и Teeth;
  • LipsTeethDiff(0)>=0.0;  линия Lips располагается выше линии Teeth;
  • TeethJawDiff(-2) >=TeethJawDiff(-1)  и TeethJawDiff(-1) >=TeethJawDiff(0) ; проверка монотонности "расхождения" между линиями Teeth и Jaw;
  • TeethJawDiff(0) >=0.0; линия Teeth располагается выше линии Jaw.
//+------------------------------------------------------------------+
//| Проверяет выполнение условий для покупки                         |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(CheckCross()) return(false);
//---
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   if(LipsTeethDiff(-2)>=LipsTeethDiff(-1) && LipsTeethDiff(-1)>=LipsTeethDiff(0) && LipsTeethDiff(0)>=0.0 &&
      TeethJawDiff(-2) >=TeethJawDiff(-1)  && TeethJawDiff(-1) >=TeethJawDiff(0)  && TeethJawDiff(0) >=0.0)
      m_crossed=true;
//---
   return(m_crossed);
  }


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

Условия закрытия длинной позиции (см. выше примечание о смещении линий):

  • LipsTeethDiff(-1)<0; линия Lips для следующего бара (за счет сдвига) располагается ниже линии Teeth;
  • LipsTeethDiff(0)>=0; линия Lips на текущем баре располагается выше или на линии Teeth;
  • LipsTeethDiff(1)>0; линия Lips предыдущего (сформированного) бара находится выше линии Teeth.
//+------------------------------------------------------------------+
//| Проверяет выполнение условий для закрытия длинной позиции        |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseLong(double& price)
  {
   price=0.0;
//---
   return(LipsTeethDiff(-1)<0 && LipsTeethDiff(0)>=0 && LipsTeethDiff(1)>0);
  }


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

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

  • При помощи метода CheckCross проверяется факт "расхождения" линий;
  • LipsTeethDiff(-2)<=LipsTeethDiff(-1) и LipsTeethDiff(-1)<=LipsTeethDiff(0); проверка монотонности "расхождения" между линиями Lips и Teeth;
  • LipsTeethDiff(0)<=0.0; линия Lips располагается ниже линии Teeth;
  • TeethJawDiff(-2)<=TeethJawDiff(-1) и TeethJawDiff(-1)<=TeethJawDiff(0); проверка монотонности "расхождения" между линиями Teeth и Jaw;
  • TeethJawDiff(0) <=0.0; линия Teeth располагается ниже линии Jaw;
//+------------------------------------------------------------------+
//| Проверяет выполнение условий для продажи                         |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(CheckCross()) return(false);
//---
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   if(LipsTeethDiff(-2)<=LipsTeethDiff(-1) && LipsTeethDiff(-1)<=LipsTeethDiff(0) && LipsTeethDiff(0)<=0.0 &&
      TeethJawDiff(-2) <=TeethJawDiff(-1)  && TeethJawDiff(-1) <=TeethJawDiff(0)  && TeethJawDiff(0) <=0.0)
      m_crossed=true;
//---
   return(m_crossed);
  }


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

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

  • LipsTeethDiff(-1)>0; линия Lips для следующего бара (за счет сдвига) располагается выше линии Teeth;
  • LipsTeethDiff(0)<=0; линия Lips на текущем баре располагается ниже или на линии Teeth;
  • LipsTeethDiff(1)<0; линия Lips предыдущего (сформированного) бара находится ниже линии Teeth.
//+------------------------------------------------------------------+
//| Проверяет выполнение условий для закрытия короткой позиции       |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseShort(double& price)
  {
   price=0.0;
//---
   return(LipsTeethDiff(-1)>0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(1)<0);
  }

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

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

Рисунок 2. Выбор модуля сигналов, основанный на пересечении линий индикатора Alligator

Рисунок 2. Выбор модуля сигналов, основанный на пересечении линий индикатора Alligator

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


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

Результаты тестирования советника на исторических данных (EURUSD H1, период тестирования: 1.1.2010-05.01.2011, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod=2, Applied=5, CrossMeasure=5).

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

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

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

Результаты торговли советника могут быть значительно улучшены, если в торговой системе учитывать временные особенности рынка. Класс CSignalITF предоставляет функционал по реализации фильтрации сделок по времени. Наиболее удачные времена для торговли можно найти при помощи Тестера стратегий терминала MetaTrader 5.

Пример реализации временного фильтра см. в Мастер MQL5 - Торговые сигналы по пересечению двух EMA с фильтрацией сделок по времени.

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

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


Профессиональный ZigZag Профессиональный ZigZag

ZigZag, лишенный большинства недостатков типового.

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

Торговые сигналы по пересечению основной и сигнальной линий индикатора MACD "Signals based on crossover of main and signal MACD lines" (класс CSignalMACD из Стандартной библиотеки).

sChartsSynchroScroll_v2 sChartsSynchroScroll_v2

Новая версия скрипта sChartsSynchroScroll.

Мастер MQL5 - Торговые сигналы по факту формирования Разворотной свечной модели Мастер MQL5 - Торговые сигналы по факту формирования Разворотной свечной модели

Торговые сигналы по факту формирования "разворотной" свечной модели "Signals based on reversal candlestick patterns".