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

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

Просмотров:
7481
Рейтинг:
(83)
Опубликован:
2011.02.14 17:38
Обновлен:
2016.12.26 15:19
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу


Введение

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

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

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

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

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


Класс CCandlePattern

Класс CCandlePattern является наследником базового класса генератора торговых сигналов CExpertSignal:

class CCandlePattern : public CExpertSignal
  {
protected:
   //--- индикаторы
   CiMA              m_MA;
   //--- таймсерии
   CiOpen            m_open;
   CiHigh            m_high;
   CiLow             m_low;
   CiClose           m_close;
   //--- входные параметры
   int               m_ma_period;

public:
   //--- конструктор
                     CCandlePattern();
   //--- метод установки значений входного параметра
   void              MAPeriod(int period)             { m_ma_period=period;                 } 
   //--- методы инициализации
   virtual bool      ValidationSettings();
   virtual bool      InitIndicators(CIndicators *indicators);

   //--- метод проверки факта формирования конкретной свечной модели
   bool              CheckCandlestickPattern(ENUM_CANDLE_PATTERNS CandlePattern);
   //--- методы проверки факта формирования медвежьих/бычьих свечных моделей
   bool              CheckPatternAllBullish();
   bool              CheckPatternAllBearish();

protected:
   //--- методы инициализации индикаторов и таймсерий
   bool              InitMA(CIndicators *indicators);
   bool              InitOpen(CIndicators *indicators);
   bool              InitHigh(CIndicators *indicators);
   bool              InitLow(CIndicators *indicators);
   bool              InitClose(CIndicators *indicators);
   //--- служебные методы, используемые для проверки формирования свечных моделей
   double            AvgBodySize(int ind);
   double            MA(int ind)                const { return(m_MA.Main(ind));             }
   double            Open(int ind)              const { return(m_open.GetData(ind));        }
   double            High(int ind)              const { return(m_high.GetData(ind));        }
   double            Low(int ind)               const { return(m_low.GetData(ind));         }
   double            Close(int ind)             const { return(m_close.GetData(ind));       }
   double            CloseAvg(int ind)          const { return(MA(ind));                    }
   double            MidPoint(int ind)          const { return(0.5*(High(ind)+Low(ind)));   }
   double            MidOpenClose(int ind)      const { return(0.5*(Open(ind)+Close(ind))); }
   //--- методы проверки факта формирования моделей
   bool              CheckPatternThreeBlackCrows();
   bool              CheckPatternThreeWhiteSoldiers();
   bool              CheckPatternDarkCloudCover();
   bool              CheckPatternPiercingLine();
   bool              CheckPatternMorningDoji();
   bool              CheckPatternEveningDoji();
   bool              CheckPatternBearishEngulfing();
   bool              CheckPatternBullishEngulfing();
   bool              CheckPatternEveningStar();
   bool              CheckPatternMorningStar();
   bool              CheckPatternHammer();
   bool              CheckPatternHangingMan();
   bool              CheckPatternBearishHarami();
   bool              CheckPatternBullishHarami();
   bool              CheckPatternBearishMeetingLines();
   bool              CheckPatternBullishMeetingLines();
  };


Использование класса CCandlePattern в модулях торговых сигналов

Для использования класса CCandlePattern в модуле торговых сигналов нужно включить файл CandlePatterns.mqh, а класс торговых сигналов унаследовать от класса CCandlePattern, добавив в него (наряду с необходимыми индикаторами и методами работы с ними) методы проверки наступления торговых условий.

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

  • bool CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration) - Проверка условий для открытия длинной позиции;
  • bool CheckCloseLong(double &price)  - Проверка условий для закрытия длинной позиции;
  • bool CheckOpenShort(double &price,double &sl,double &tp,datetime &expiration) - Проверка условий для открытия короткой позиции;
  • bool CheckCloseShort(double &price) - Проверка условий для закрытия короткой позиции;
//+------------------------------------------------------------------+
//|                                          CSampleCandleSignal.mqh |
//+------------------------------------------------------------------+
// Включаем файл с классом CCandlePattern
// файл candlepatterns.mqh должен располагаться в том же каталоге
#include "CandlePatterns.mqh"
// wizard description start
//+------------------------------------------------------------------+
//| Description of the class                                         |
//| Title=Test signal                                                |
//| Type=Signal                                                      |
//| Name=CSampleCandleSignal                                         |
//| Class=CSampleCandleSignal                                        |
//| Page=                                                            |
//| Parameter=param1,int,9                                           |
....
//| Parameter=paramN,int,13                                          |
//| Parameter=MAPeriod,int,12                                        |
//+------------------------------------------------------------------+
// wizard description end
//+------------------------------------------------------------------+
class CSampleCandleSignal : public CCandlePattern
  {
protected:
   // --- индикаторы
   ....
   //--- входные параметры
   ...
public:
   //--- конструктор
                     CTestClass();
   //--- методы установки значений входных параметров
   ...
   //--- инициализация индикаторов и проверка значений
   virtual bool      ValidationSettings();
   virtual bool      InitIndicators(CIndicators *indicators);
   //--- методы проверки открытия/закрытия позиций
   virtual bool      CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration);
   virtual bool      CheckCloseLong(double &price);
   virtual bool      CheckOpenShort(double &price,double &sl,double &tp,datetime &expiration);
   virtual bool      CheckCloseShort(double &price);

protected:
   //--- методы инициализации индикаторов
   ...
   //--- методы доступа к значениям индикаторов
   ...
  };

Подробности строения класса торговых сигналов можно найти в статье "Мастер MQL5: Как написать свой модуль торговых сигналов".

Обратите внимание на строку:

//| Parameter=MAPeriod,int,12                                        |

в шапке описания класса торговых сигналов.

Параметр MAPeriod используется в родительском классе CCandlePattern для вычисления скользящей средней цены закрытия и усредненных значений тела свечи. Значение по умолчанию m_ma_period=12 устанавливается в конструкторе CCandlePattern(). Тем не менее, данный период лучше задавать при помощи входного параметра, для установки значения m_ma_period предназначена функция MAPeriod(int period).

Это позволит проводить оптимизацию данного параметра в Тестере Стратегий.


Вызов родительских методов в ValidationSettings и InitIndicators

Следует помнить о необходимости вызова родительских методов CCandlePattern::ValidationSettings и CCandlePattern::InitIndicators в соответствующих методах класса.

Вызывать эти методы лучше в самом начале:

bool CSampleCandleSignal ::ValidationSettings()
  {
//--- вызов метода ValidationSettings класса CCandlePattern
   if(!CCandlePattern::ValidationSettings()) return(false);
..
//--- ok
   return(true);
  }

и в InitIndicators:

bool CSampleCandleSignal ::InitIndicators(CIndicators *indicators)
  {
//--- вызов метода InitIndicators класса CCandlePattern
   if(!CCandlePattern::InitIndicators(indicators)) return(false);   
...
//--- ok
   return(true);
  }


Методы проверки формирования свечных моделей

Проверка факта формирования свечной модели осуществляется при помощи вызова метода bool CheckCandlestickPattern(ENUM_CANDLE_PATTERNS CandlePattern) для модели, указанной в качестве параметра. Проверить формирование хотя бы одной из "бычьих"/"медвежьих" свечных моделей можно при помощи методов CheckPatternAllBullish() и CheckPatternAllBearish().

Для удобства и корректной работы с паттернами используется перечисление ENUM_CANDLE_PATTERNS:

enum ENUM_CANDLE_PATTERNS  // candlestick patterns
  {
   CANDLE_PATTERN_THREE_BLACK_CROWS     = 1,
   CANDLE_PATTERN_THREE_WHITE_SOLDIERS  = 2,
   CANDLE_PATTERN_DARK_CLOUD_COVER      = 3,
   CANDLE_PATTERN_PIERCING_LINE         = 4,
   CANDLE_PATTERN_MORNING_DOJI          = 5,
   CANDLE_PATTERN_EVENING_DOJI          = 6,
   CANDLE_PATTERN_BEARISH_ENGULFING     = 7,
   CANDLE_PATTERN_BULLISH_ENGULFING     = 8,
   CANDLE_PATTERN_EVENING_STAR          = 9,
   CANDLE_PATTERN_MORNING_STAR          = 10,
   CANDLE_PATTERN_HAMMER                = 11,
   CANDLE_PATTERN_HANGING_MAN           = 12,
   CANDLE_PATTERN_BEARISH_HARAMI        = 13,
   CANDLE_PATTERN_BULLISH_HARAMI        = 14,
   CANDLE_PATTERN_BEARISH_MEETING_LINES = 15,
   CANDLE_PATTERN_BULLISH_MEETING_LINES = 16
  };


Методы проверки формирования бычьих моделей:

///--- Проверка факта формирования модели "3 White Soldiers":
  CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS)

///--- Проверка факта формирования модели "Piercing Line":
  CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE)

///--- Проверка факта формирования модели "Morning Doji":
  CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI)

///--- Проверка факта формирования модели "Bullish Engulfing":
  CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING)

///--- Проверка факта формирования модели "Bullish Haramii":
  CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI)

///--- Проверка факта формирования модели "Morning Star":
  CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR)

///--- Проверка факта формирования модели "Bullish Meeting Lines":
  CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES)

///--- Проверка факта формирования модели "Hammer":
  CheckCandlestickPattern(CANDLE_PATTERN_HAMMER)

///--- Проверка факта формирования хотя бы одной из "бычьих" свечных моделей
  CheckPatternAllBullish();

Методы проверки формирования медвежьих моделей:

///--- Проверка факта формирования модели "3 Black Crows":
  CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS)

///--- Проверка факта формирования модели "Dark Cloud Cover":
  CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER)

///--- Проверка факта формирования модели "Evening Doji":
  CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI)

///--- Проверка факта формирования модели "Bearish Engulfing":
  CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING)

///--- Проверка факта формирования модели "Evening Star":
  CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR)

///--- Проверка факта формирования модели "Hanging Man":
  CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN)

///--- Проверка факта формирования модели "Bearish Harami":
  CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI)

///--- Проверка факта формирования модели "Bearish Meeting Lines":
  CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES)

///--- Проверка факта формирования хотя бы одной из "медвежьих" свечных моделей
  CheckPatternAllBearish();

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

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

//-------------------------------------------------------------------+
//| Метод проверки выполнения условий для открытия длинной позиции   |
//| Возвращает: true, если условия выполнены                         |
//|           : false, если условия не выполнены                     |
//+------------------------------------------------------------------+
bool CSampleCandleSignal::CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration)
  {
//--- проверка условий открытия длинной позиции
//--- в них наряду с вашими индикаторами можно использовать методы
//--- проверки факта формирования свечных моделей
//--- например, проверяем формирование модели "3 белых солдата":
   if CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) return(true):
//--- иначе нет сигнала на открытие длинной позиции
   return(false);
  }

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

//-------------------------------------------------------------------+
//| Метод проверки выполнения условий для закрытия длинной позиции   |
//| Возвращает: true, если условия выполнены                         |
//|           : false, если условия не выполнены                     |
//+------------------------------------------------------------------+
bool CSampleCandleSignal::CheckCloseLong(double &price)
  {
/--- проверка условий закрытия длинной позиции
//--- в них наряду с вашими индикаторами можно использовать методы
//--- проверки факта формирования свечных моделей
//--- например, проверяем формирование хотя бы одной из "медвежьих" свечных моделей:
   if CheckPatternAllBearish() return(true):
//--- иначе нет сигнала на закрытие длинной позиции
   return(false);
  }

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

//-------------------------------------------------------------------+
//| Метод проверки выполнения условий для открытия короткой позиции  |
//| Возвращает: true, если условия выполнены                         |
//|           : false, если условия не выполнены                     |
//+------------------------------------------------------------------+
bool CSampleCandleSignal::CheckOpenShort(double &price,double &sl,double &tp,datetime &expiration)
  {
//--- проверка условий открытия короткой позиции
//--- в них наряду с вашими индикаторами можно использовать методы
//--- проверки факта формирования модели "3 черные вороны":
    if CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) return(true):
//--- иначе нет сигнала на открытие короткой позиции
   return(false);
  }

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

//-------------------------------------------------------------------+
//| Метод проверки выполнения условий для закрытия короткой позиции  |
//| Возвращает: true, если условия выполнены                         |
//|           : false, если условия не выполнены                     |
//+------------------------------------------------------------------+
bool CSampleCandleSignal::CheckCloseShort(double &price)
  {
//--- проверка условий закрытия короткой позиции
//--- в них наряду с вашими индикаторами можно использовать методы
//--- проверки факта формирования свечных моделей
//--- например, проверяем формирование хотя бы одной из "бычьих" свечных моделей:
   if CheckPatternAllBullish() return(true):
//--- иначе нет сигнала на закрытие короткой позиции
   return(false);
  }


Рекомендации

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

В книге "Стратегии лучших трейдеров мира" предлагается использовать следующие паттерны японских свечей (бычьи/медвежьи):

  • 3 Black Crows/3 White Soldiers
  • Dark Cloud Cover/Piercing Line
  • Morning Doji/Evening Doji
  • Bearish Engulfing/Bullish Engulfing
  • Evening Star/Morning Star
  • Hammer/Hanging Man
  • Bearish Harami/Bullish Harami
  • Bearish Meeting Lines/Bullish Meeting Lines

с подтверждением торговых сигналов от осцилляторов Stochastic, CCI, MFI и RSI.

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

Demo_Create_OBJ_BITMAP_Script Demo_Create_OBJ_BITMAP_Script

Пример создания фонового изображения на графике с помощью объекта OBJ_BITMAP.

Demo_Create_OBJ_BITMAP_LABEL_EA Demo_Create_OBJ_BITMAP_LABEL_EA

Пример создания кнопки с помощью объекта OBJ_BITMAP_LABEL.

Мастер MQL5 - Торговые сигналы свечных паттернов 3 Black Crows/3 White Soldiers + Stochastic Мастер MQL5 - Торговые сигналы свечных паттернов 3 Black Crows/3 White Soldiers + Stochastic

Торговые сигналы свечных моделей "3 Black Crows/3 White Soldiers" с подтверждением от индикатора Stochastic.

Demo_resource_EA Demo_resource_EA

Пример создания кнопки с использованием ресурсов.