Скачать MetaTrader 5

Смотри, как бесплатно скачать роботов

Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят

Понравился скрипт?
Оцени его работу в терминале MetaTrader 5

2011.03.10 15:31
Советники

Мастер MQL5 - Торговые сигналы свечных паттернов Bullish Harami/Bearish Harami + Stochastic - эксперт для MetaTrader 5

| Russian English 中文 Español Deutsch 日本語 Português

Просмотров:
2318
Рейтинг:
голосов: 13
\MQL5\Include\Expert\Signal\MySignals\

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

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

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

В данной работе мы рассмотрим результаты использования моделей Bullish Harami (бычья модель харами) и Bearish Harami (медвежья модель харами) в комбинации с сигналами индикатора Stochastic.


1. Паттерны "Bullish Harami" и "Bearish Harami" и их распознавание

"Харами" (Harami) представляет собой комбинацию длинного тела и следующего за ним малого тела, находящимся целиком в пределах первого. Модель "Харами" - это противоположность модели Поглощения (Engulfing). В модели Поглощения длинная свеча охватывает предыдущее тело, а в модели "Харами" за очень длинным телом следует очень маленькое тело.

1.1. Паттерн "Бычья модель Харами" (Bullish Harami)

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

Отметим, что цена открытия второй свечи происходит с разрывом от закрытия первой свечи, более того, этот разрыв обращен в противоположную сторону от движения цены в первой свече (это ключевой момент фигуры Харами).

"Бычья модель Харами" является сигналом к развороту нисходящего тренда, чем меньше тело бычьей свечи, тем более вероятен разворот.

Рис. 1. Свечной паттерн "Bullish Harami"

Рис. 1. Свечной паттерн "Bullish Harami"

Распознавание паттерна "Bullish Harami" реализовано в методе CheckPatternBullishHarami класса CCandlePattern:

//+------------------------------------------------------------------+
//| Метод проверки формирования свечной модели "Bullish Harami"      |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami()
  {
//--- Bullish Harami- распознавание модели "Бычья модель Харами"
   if((Close(1)>Open(1))              && // последняя завершенная свеча является бычьей (white day)
     ((Open(2)-Close(2))>AvgBody(1))  && // предыдущая свеча медвежья, при этом размер ее тела больше среднего (long black)
     ((Close(1)<Open(2))              && // цена закрытия бычьей свечи ниже цены открытия медвежьей свечи 
      (Open(1)>Close(2)))             && // цена открытия бычьей свечи выше цены закрытия медвежьей свечи (engulfment)
      (MidPoint(2)<CloseAvg(2)))         // нисходящий тренд (down trend)
      return(true);
//---
   return(false);
  }

Для проверки факта формирования модели "Bullish Harami" используется метод CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) класса CCandlePattern.


1.2. Паттерн "Медвежья модель Харами" (Bearish Harami)

Разворотная модель "Медвежья модель Харами" возникает в случае, когда при восходящем тренде после длинной бычьей свечи появляется медвежья свеча с телом, полностью расположенным внутри тела бычьей свечи.

Отметим, что цена открытия второй свечи происходит с разрывом от закрытия первой свечи, более того, этот разрыв обращен в противоположную сторону от движения цены в первой свече (это ключевой момент фигуры Харами).

"Медвежья модель Харами" является сигналом к развороту восходящего тренда, чем меньше тело медвежьей свечи, тем более вероятен разворот.

Рис. 2. Свечной паттерн "Bearish Harami"

Рис. 2. Свечной паттерн "Bearish Harami"

Метод распознавания модели "Bearish Harami":

//+------------------------------------------------------------------+
//| Метод проверки формирования свечной модели "Bearish Harami"      |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami()
  {
//--- Bearish Harami- распознавание модели "Медвежья модель Харами"
   if((Close(1)<Open(1))              && // последняя завершенная свеча является медвежьей (black day)
     ((Close(2)-Open(2))>AvgBody(1))  && // предыдущая свеча бычья, размер ее тела больше среднего (long white)
     ((Close(1)>Open(2))              && // цена закрытия медвежьей свечи выше цены открытия бычьей свечи 
      (Open(1)<Close(2)))             && // цена открытия медвежьей свечи ниже цены закрытия бычьей свечи (engulfment)
      (MidPoint(2)>CloseAvg(2)))         // восходящий тренд (up trend)
      return(true);
//---
   return(false);
  }

Для проверки факта формирования модели "Bearish Harami" используется метод CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) класса CCandlePattern.


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

Сигналы входа в длинную или короткую позицию подаются только при условии, что разворотная фигура на диаграмме свечей подтверждается положением стохастического осциллятора. Значение сигнальной линии %D должно быть выше, или ниже соответствующего критического уровня (30 и 70).

Сигналы выхода из позиций формируются в зависимости от дальнейшего поведения %D. Если %D достигает противоположной рынку отметки (80 в длинной и 20 в короткой позициях) или если %D не подтверждает сигнала разворота и достигает уровня 20 в длинной и 80 в короткой позициях.

Рис. 3. Торговые сигналы паттерна "Bearish Harami" с подтверждением от индикатора Stochastic

Рис. 3. Торговые сигналы паттерна "Bearish Harami " с подтверждением от индикатора Stochastic


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

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

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

  1. Сигналом к открытию длинной позиции является формирование свечной комбинации Bullish Harami (бычья модель харами) и выполнение условия StochSignal(1)<30 (значение сигнальной линии индикатора Stochastic на последнем завершенном баре меньше 30):
  2. Сигналом к закрытию короткой позиции является пересечение сигнальной линией индикатора Stochastic уровня 20 (снизу вверх) или уровня 80 (снизу вверх).

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

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

  1. Сигналом к открытию короткой позиции является формирование паттерна Bearish Harami (медвежья модель Харами) и выполнение условия StochSignal(1)>70 (значение сигнальной линии индикатора Stochastic на последнем завершенном баре больше 70):
  2. Сигналом к закрытию длинной позиции является пересечение сигнальной линией индикатора Stochastic уровня 80 (сверху вниз) или уровня 20 (сверху вниз).

//+------------------------------------------------------------------+
//| Метод проверки условий для входа и выхода с рынка                |
//| Проверка условий для                                             |
//| 1) входа в рынок (открытие короткой позиции, result=80)          |
//| 2) выхода из рынка (закрытие длинной позиции, result=40)         |
//+------------------------------------------------------------------+
int CBH_BH_Stoch::ShortCondition()
  {
   int result=0;
//--- idx можно использовать для того чтобы узнать режим работы эксперта
//--- idx=0 - эксперт будет вызывать проверки выполнения торговых условий на каждом тике
//--- idx=1 - эксперт будет вызывать проверки выполнения торговых условий только на новых барах
   int idx   =StartIndex();
//--- проверка условий для открытия короткой позиции
//--- формирование медвежьей свечной комбинации  Bearish Harami и выполнения условия signal line>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (StochSignal(1)>70))
     result=80;
//--- проверка условий для закрытия длинной позиции
//--- пересечение сигнальной линией уровней (сверху вниз 80, сверху вниз 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
//--- возвращаем result
   return(result);
  }


2.3. Создание эксперта на основе торговых сигналов разворотной модели "Bullish Harami/Bearish Harami + Stochastic" при помощи Мастера MQL5

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

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

Рис. 4. Создание советника в Мастере MQL5

Рис. 4. Создание советника в Мастере MQL5

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

Рис. 5. Общие параметры советника

Рис. 5. Общие параметры советника

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

Рис. 6. Параметры сигналов советника

Рис. 6. Параметры сигналов советника

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

Добавляем модуль "Signals based on Bullish Harami/Bearish Harami confirmed by Stochastic":

Рис. 7. Параметры сигналов советника

Рис. 7. Параметры сигналов советника

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

Рис. 8. Параметры сигналов советника

Рис. 8. Параметры сигналов советника

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

Рис. 9. Параметры трейлинга советника

Рис. 9. Выбор модуля трейлинга

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

Рис. 10. Выбор модуля управления капиталом

Рис. 10. Выбор модуля управления капиталом

Нажав на кнопку "Готово", мы получим код сгенерированного советника - файл Expert_BH_BH_Stoch.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, период тестирования: 1.1.2010-04.03.2011, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).

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

Рис. 11. Результаты тестирования советника, построенного на базе генератора торговых сигналов "Bullish/Bearish Harami + Stochastic"

Рис. 11. Результаты тестирования советника, построенного на базе генератора торговых сигналов "Bullish/Bearish Harami + Stochastic"

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

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


YURAZ_RSAXEL Скрипт рисует уровни Рудолфа Акселя YURAZ_RSAXEL Скрипт рисует уровни Рудолфа Акселя

Скрипт рисует уровни Рудолфа Акселя

YURAZ_CLOSEPRC_V1 YURAZ_CLOSEPRC_V1

Закрытие всех открытых позиций одним кликом либо закрытие всех позиций при достижении указанного профита в процентах от депозита

Мультипериодный индикатор MK_LaguerreMultiPeriodV2 Мультипериодный индикатор MK_LaguerreMultiPeriodV2

Обычный Laguerre на нескольких таймфреймах одновременно.

AskBid Line AskBid Line

AskBid Line — простейший индикатор, отображающий цену Ask или Bid в виде пунктирной линии на истории.