Библиотеки: Мастер MQL5 - Класс для работы со свечными паттернами

 

Мастер MQL5 - Класс для работы со свечными паттернами:

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

Схема создания класса торговых сигналов выглядит следующим образом: класс торговых сигналов наследуется от базового класса CExpertSignal, далее в нем (наряду со специфическими данными и методами доступа к индикаторам) определяются методы проверки условий открытия/закрытия длинных и коротких позиций CheckOpenLong(), CheckCloseLong(), CheckOpenShort() и CheckCloseShort().

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

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

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

Автор: MetaQuotes Software Corp.

 

Осторожно, в методах CheckPatternMorningDoji()  и CheckPatternEveningDoji() есть логические ошибки в строках 

 (AvgBody(2)<AvgBody(1)*0.1)   && 

должно быть так:

(MathAbs(Close(2)-Open(2)) <AvgBody(1)*0.1)   && 

 

Исправили

Было
Стало
//+------------------------------------------------------------------+
//| Checks formation of Morning Doji candlestick pattern             |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningDoji()
  {
//--- Morning Doji
   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);
  }
//+------------------------------------------------------------------+
//| Checks formation of Evening Doji candlestick pattern             |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Evening Doji
   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);
  }

//+------------------------------------------------------------------+
//| Checks formation of Morning Doji candlestick pattern             |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningDoji()
  {
//--- Morning Doji
   if((Open(3)-Close(3)>AvgBody(1))                             &&
      (MathAbs(Close(2)-Open(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);
  }
//+------------------------------------------------------------------+
//| Checks formation of Evening Doji candlestick pattern             |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Evening Doji
   if((Close(3)-Open(3)>AvgBody(1))                             &&
      (MathAbs(Close(2)-Open(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);
  }
Причина обращения: