ForexGuru рекомендует:

БЕЗДЕПОЗИТНЫЙ БОНУС 100$

Мастер MQL5 - Торговые сигналы свечных паттернов Morning/Evening Stars + RSI


Материал Мастер MQL5 - Торговые сигналы свечных паттернов Morning/Evening Stars + RSI

InstaForex

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

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

В книге "Стратегии лучших трейдеров мира" описаны индикаторы и торговые стратегии для технического анализа с использованием программного пакета MetaStock. Наряду с традиционными, в ней рассмотрены торговые сигналы, основанные на совместном использовании разворотных свечных моделей с подтверждением от осцилляторов Stochastic, CCI, MFI и RSI.

Использование "разворотных" свечных моделей совместно с сигналами осцилляторов позволяет сократить количество ложных сигналов и повысить эффективность торговой системы.

В данной работе мы рассмотрим результаты использования моделей Morning Star (утренняя звезда) и Evening Star (вечерняя звезда) в комбинации с сигналами индикатора RSI (работа со свечными паттернами Morning Doji Star и Evening Doji Star производится по аналогии).

1. Паттерны "Morning Star" и "Evening Star" и их распознавание
1.1. Паттерн "Утренняя звезда" (Morning Star)


Паттерн "Утренняя звезда" состоит из трех свечей, возникает при нисходящем тренде (рис. 1). За длинной черной свечей идет свеча с маленьким телом (цвет не имеет значения), которое не пересекается с телом черной свечи. Маленькое тело второй свечи означает, что рынок перешел от нисходящей тенденции к равновесию сил быков и медведей.

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

В случае, если второй свечой утренней звезды является доджи, то такая модель называется "Morning Doji Star" (Утренняя звезда доджи).



Распознавание данных паттернов реализовано в методах CheckPatternMorningStar() и CheckPatternMorningDoji класса CCandlePattern:

Код
//+------------------------------------------------------------------+
//| Проверка формирования модели "Morning Star" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- Morning Star - проверка формирования модели "Утренняя звезда"
  if((Open(3)-Close(3)>AvgBody(1)) && // медвежья свеча, ее тело больше среднего
  (MathAbs(Close(2)-Open(2))<AvgBody(1)*0.5) && // тело второй свечи маленькое (меньше половины среднего размера тела)  
  (Close(2)<Close(3)) && // закрытие второй свечи ниже закрытия первой свечи  
  (Open(2)<Open(3)) && // открытие второй свечи ниже открытия первой свечи  
  (Close(1)>MidOpenClose(3))) // закрытие последней свечи выше центра первой (медвежьей) свечи  
  return(true);
//---
  return(false);
  }
//+------------------------------------------------------------------+
//| Проверка формирования модели "Morning Doji Star" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningDoji()
  {
//--- Morning Doji Star - проверка формирования модели "Утренняя звезда доджи"
  if((Open(3)-Close(3)>AvgBody(1)) && // медвежья свеча, ее тело больше среднего  
  (AvgBody(2)<AvgBody(1)*0.1) && // тело второй свечи доджи (меньше десятой части среднего размера тела)  
  (Close(2)<Close(3)) && // закрытие второй свечи ниже закрытия первой свечи  
  (Open(2)<Open(3)) && // открытие второй свечи ниже открытия первой свечи  
  (Open(1)>Close(2)) && // ценовой гэп вверх на последней свече
  (Close(1)>Close(2))) // закрытие последней свечи выше закрытия второй свечи  
  return(true);
//---
  return(false);
  }


Для проверки факта формирования моделей "Morning Star" и "Morning Doji Star" используется методы CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) и CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) класса CCandlePattern

1.2. Паттерн "Вечерняя звезда" (Evening Star)

Паттерн "Вечерняя звезда" также состоит из трех свечей, возникает при восходящем тренде (рис. 2). За длинной белой свечей идет свеча с маленьким телом (цвет не имеет значения), которое не пересекается с телом белой свечи. Маленькое тело второй свечи означает, что рынок перешел от восходящей тенденции к равновесию сил быков и медведей.

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

В случае, если второй свечой вечерней звезды является доджи, то такая модель называется "Evening Doji Star" (Вечерняя звезда доджи).



Методы распознавания моделей "Evening Star" и "Evening Doji Star":

Код
//+------------------------------------------------------------------+
//| Проверка формирования модели "Evening Star" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Evening Star - проверка формирования модели "Вечерняя звезда"
  if((Close(3)-Open(3)>AvgBody(1)) && // бычья свеча, ее тело больше среднего  
  (MathAbs(Close(2)-Open(2))<AvgBody(1)*0.5) && // тело второй маленькое (меньше половины среднего тела свечи)
  (Close(2)>Close(3)) && // закрытие второй свечи выше цены закрытия первой свечи
  (Open(2)>Open(3)) && // открытие второй свечи выше цены открытия первой свечи
  (Close(1)<MidOpenClose(3))) // закрытие последней свечи ниже центра первой (бычьей) свечи  
  return(true);
//---
  return(false);
  }
//+------------------------------------------------------------------+
//| Проверка формирования модели "Evening Doji Star" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Evening Doji Star - проверка формирования модели "Вечерняя звезда доджи"
  if((Close(3)-Open(3)>AvgBody(1)) && // бычья свеча, ее тело больше среднего  
  (AvgBody(2)<AvgBody(1)*0.1) && // тело второй свечи доджи (меньше десятой части среднего тела свечи)  
  (Close(2)>Close(3)) && // закрытие второй свечи выше закрытия первой свечи
  (Open(2)>Open(3)) && // открытие второй свечи выше открытия первой свечи  
  (Open(1)<Close(2)) && // ценовой гэп вниз на последней свече
  (Close(1)<Close(2))) // закрытие последней свечи ниже закрытия второй свечи  
  return(true);
//---
  return(false);
  }


Для проверки факта формирования моделей "Evening Star" и "Evening Doji Star" используются методы CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) и CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) класса CCandlePattern.

2. Торговые сигналы в комбинации с индикатором RSI

Сигналы входа в рынок подаются при сочетании разворотной фигуры на диаграмме со значением RSI ниже уровня 40 для длинных и выше 60 - для коротких позиций.

Сигналы выхода формируются при достижении RSI противоположного уровня (70 для длинной и 30 для короткой позиций) или же не подтверждает разворота, достигнув уровня 30 или 70 для длинной или короткой позиций соответственно.



Реализация проверки условий входа и выхода в рынок осуществляется в методах:

int CMS_ES_RSI::LongCondition() - проверка условий для открытия длинной позиции (ф-я возвращает 80) и закрытия короткой позиции (ф-я возвращает 40);
int CMS_ES_RSI::ShortCondition() - проверка условий для открытия короткой позиции (ф-я возвращает 80) и закрытия длинной позиции (ф-я возвращает 40).

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

1. Сигналом к открытию длинной позиции является формирование свечной комбинации Morning Star ("Утренняя звезда") и выполнение условия RSI(1)<40 (значение линии индикатора RSI на последнем завершенном баре меньше 40).

2. Сигналом к закрытию короткой позиции является пересечение индикатора RSI уровня 30 (снизу вверх) или уровня 70 (снизу вверх).

Код
//+------------------------------------------------------------------+
//| Метод проверки условий для входа и выхода с рынка |
//| Проверка условий для |
//| 1) входа в рынок (открытие длинной позиции, result=80) |
//| 2) выхода из рынка (закрытие короткой позиции, result=40) |
//+------------------------------------------------------------------+
int CMS_ES_RSI::LongCondition()
  {
  int result=0;
//--- idx можно использовать для того чтобы узнать режим работы эксперта
//--- idx=0 - эксперт будет вызывать проверки выполнения торговых условий на каждом тике
//--- idx=1 - эксперт будет вызывать проверки выполнения торговых условий только на новых барах
  int idx =StartIndex();
//--- проверка условий для открытия длинной позиции
//--- формирование бычьей свечной комбинации Morning Star и выполнения условия RSI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (RSI(1)<40))
  result=80;
//--- проверка условий для закрытия короткой позиции
  if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))
  result=40;
  result=40;
//--- возвращаем result
  return(result);
  }


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

1. Сигналом к открытию короткой позиции является формирование паттерна Evening Star ("Вечерняя звезда") и выполнение условия RSI(1)>60 (значение индикатора RSI на последнем завершенном баре больше 60).

2. Сигналом к закрытию длинной позиции является пересечение линией индикатора RSI уровня 70 (сверху вниз) или уровня 30 (сверху вниз).

Код
//+------------------------------------------------------------------+
//| Метод проверки условий для входа и выхода с рынка |
//| Проверка условий для |
//| 1) входа в рынок (открытие короткой позиции, result=80) |
//| 2) выхода из рынка (закрытие длинной позиции, result=40) |
//+------------------------------------------------------------------+
int CMS_ES_RSI::ShortCondition()
  {
  int result=0;
//--- idx можно использовать для того чтобы узнать режим работы эксперта
//--- idx=0 - эксперт будет вызывать проверки выполнения торговых условий на каждом тике
//--- idx=1 - эксперт будет вызывать проверки выполнения торговых условий только на новых барах
  int idx =StartIndex();
//--- проверка условий для открытия короткой позиции
//--- формирование медвежьей свечной комбинации Evening Star и выполнения условия RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (RSI(1)>60))
  result=80;
//--- проверка условий для закрытия длинной позиции
  if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))
  result=40;
//--- возвращаем result
  return(result);
  }


2.3. Создание эксперта на основе торговых сигналов разворотной модели "Morning/Evening Stars + RSI" при помощи Мастера MQL5

Класс CMS_ES_RSI не входит в Стандартную библиотеку классов торговых сигналов, поэтому для его использования нужно скачать файл acms_es_rsi.mqh (прилагается) и сохранить его в каталог_данных_терминала\Include\Expert\Signal\MySignals. Файл acandlepatterns.mqh следует скопировать в тот же каталог, что и файл acms_es_rsi.mqh. После этого, перезапустив MetaEditor, вы получите возможность его использования в Мастере MQL5.

Чтобы создать торгового робота по данной стратегии запустите Мастер MQL5:



Нажав на кнопку "Далее", укажем имя советника:



После этого нужно указать параметры сигналов.



В нашем случае мы будем использовать лишь один модуль торговых сигналов.

Добавляем модуль "Signals based on Morning/Evening Stars confirmed by RSI":



Модуль сигналов добавлен:



После этого можно выбрать модуль трейлинга, мы его использовать не будем. Выбираем "Trailing Stop not used":



Затем нужно выбрать модуль управления капиталом, мы будем использовать торговлю с фиксированным объемом (Trading with fixed trade volume):



Нажав на кнопку "Готово", мы получим код сгенерированного советника - файл Expert_AMS_ES_RSI.mq5, который будет сохранен в папке: каталог_данных_терминала\MQL5\Experts\.

Входные параметры (по умолчанию) советника:

Код
//--- 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)


заменяем на:

Код
//--- inputs for main signal
input int Signal_ThresholdOpen =40; // Signal threshold value to open [0...100]
input int Signal_ThresholdClose =20; // Signal threshold value to close [0...100]
input double Signal_PriceLevel =0.0; // Price level to execute a deal
input double Signal_StopLevel =0.0; // Stop Loss level (in points)
input double Signal_TakeLevel =0.0; // Take Profit level (in points)
Параметры Signal_ThresholdOpen и Signal_ThresholdClose позволяют задать пороги для открытия и закрытия позиций.


В коде функций LongCondition() и ShortCondition() модуля торговых сигналов мы указали фиксированные значения порогов:

Для открытия позиций: 80;
Для закрытия позиций: 40.

Советник, сгенерированный при помощи Мастера MQL5, принимает решение об открытии или закрытии позиции на основании результатов "голосования" модулей торговых сигналов, добавленных в процессе создания советника. При этом основной модуль (содержащий все добавленные модули) торговых сигналов также принимает участие в "голосовании", однако его методы LongCondition() и ShortCondition() всегда возвращают 0.

Поскольку при расчете "голосов" производится усреднение по количеству присутствующих модулей (основной + один добавленный модуль), то значения порогов следует указывать с учетом данного обстоятельства. По этой причине значения величин Signal_ThresholdOpen и Signal_ThresholdClose должны быть установлены в 40=(0+80)/2 и 20=(0+40)/2 соответственно.

Значения входных параметров Signal_StopLevel и Signal_TakeLevel устанавливаем в 0, это означает, что закрытие позиций будет осуществляться только при поступлении торговых сигналов на закрытие позиций.

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

Результаты тестирования советника на исторических данных (EURUSD H1, период тестирования: 2009.01.01-2011.03.03, PeriodRSI=47, MA_period=3).

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



Наилучший набор параметров торговой системы можно найти при помощи Тестера Стратегий терминала MetaTrader 5.

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

Наилучший набор параметров торговой системы можно найти при помощи Тестера Стратегий терминала MetaTrader 5.

С появлением режима 3D-визуализации результатов тестирования, исследование пространства параметров торговых систем значительно упрощается:



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


Скачать с сервера
Размер на сервере: 6.15Kb

Коментарии
Зарегистрируйтесь или войдите что бы оставлять коментарии
ForexGuru - портал для форекс трейдеров

ForexGuru - крупный портал с ПО для MT4 и MT5. Форекс советники, индикаторы, скрипты, стратегии, все это представлено в большом количестве на нашем сайте. Все файлы находятся на нашем сервере и Вам не придется ждать что бы скачать нужный файл.