Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Мастер MQL5 - Класс для работы со свечными паттернами - библиотека для MetaTrader 5
- Просмотров:
- 7607
- Рейтинг:
- Опубликован:
- 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.
В дальнейших публикациях мы рассмотрим примеры реализации модулей торговых сигналов, основанных на указанных паттернах.
Пример создания фонового изображения на графике с помощью объекта OBJ_BITMAP.
Demo_Create_OBJ_BITMAP_LABEL_EAПример создания кнопки с помощью объекта OBJ_BITMAP_LABEL.
Торговые сигналы свечных моделей "3 Black Crows/3 White Soldiers" с подтверждением от индикатора Stochastic.
Demo_resource_EAПример создания кнопки с использованием ресурсов.