Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5

Мастер MQL5 - Торговые сигналы свечных паттернов Morning/Evening Stars + CCI - эксперт для MetaTrader 5
- Просмотров:
- 3566
- Рейтинг:
- Опубликован:
- 2011.03.25 11:02
- Обновлен:
- 2016.11.22 07:33
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
С появлением Мастера MQL5 появилась возможность автоматической генерации кода советника на базе классов торговых сигналов, сопровождения позиций и управления капиталом. Помимо классов торговых сигналов из Стандартной библиотеки, вы можете создавать и тестировать свои собственные торговые системы, для этого достаточно написать модуль торговых сигналов.
В книге "Стратегии лучших трейдеров мира" описаны индикаторы и торговые стратегии для технического анализа с использованием программного пакета MetaStock. Наряду с традиционными, в ней рассмотрены торговые сигналы, основанные на совместном использовании разворотных свечных моделей с подтверждением от осцилляторов Stochastic, CCI, MFI и RSI.
Использование "разворотных" свечных моделей совместно с сигналами осцилляторов позволяет сократить количество ложных сигналов и повысить эффективность торговой системы.
В данной работе мы рассмотрим результаты использования моделей Morning Star (утренняя звезда) и Evening Star (вечерняя звезда) в комбинации с сигналами индикатора CCI (работа со свечными паттернами Morning Doji Star и Evening Doji Star производится по аналогии).
1. Паттерны "Morning Star" и "Evening Star" и их распознавание
1.1. Паттерн "Утренняя звезда" (Morning Star)
Паттерн "Утреняя звезда" состоит из трех свечей, возникает при нисходящем тренде (рис. 1). За длинной черной свечей идет свеча с маленьким телом (цвет не имеет значения), которое не пересекается с телом черной свечи. Маленькое тело второй свечи означает, что рынок перешел от нисходящей тенденции к равновесию сил быков и медведей.
Третьей свечей этой модели является бычья свеча, тело которой обычно не пересекается с телом второй свечи, а уровень закрытия располагается внутри тела первой (медвежьей) свечи. Для удобства на рис. 1 также приведена результирующая свеча данной модели.
В случае, если второй свечой утренней звезды является доджи, то такая модель называется "Morning Doji Star" (Утреняя звезда доджи).
Рисунок 1. Свечные паттерны "Morning Star" и "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" (Вечерняя звезда доджи).
Рисунок 2. Свечные паттерны "Evening Star" и "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. Торговые сигналы в комбинации с индикатором CCI
Сигналы для входа в рынок подаются при появлении соответствующей разворотной фигуры и достижением CCI уровня -50 для длинной и выше 50 для короткой позиции.
Сигналы выхода из позиций подаются только индикатором CCI. Это происходит в случае достижения им противоположного уровня (80 для длинной и -80 для короткой позиций) или же не подтверждает разворота и достигает нового минимума.
Рисунок 3. Торговые сигналы паттерна "Evening Star" с подтверждением от индикатора CCI
Реализация проверки условий входа и выхода в рынок осуществляется в методах:
- int CMS_ES_CCI::LongCondition() - проверка условий для открытия длинной позиции (ф-я возвращает 80) и закрытия короткой позиции (ф-я возвращает 40);
- int CMS_ES_CCI::ShortCondition() - проверка условий для открытия короткой позиции (ф-я возвращает 80) и закрытия длинной позиции (ф-я возвращает 40).
2.1. Открытие длинной позиции и закрытие короткой позиции
Сигналом к открытию длинной позиции является формирование свечной комбинации "Morning Star" ("Утренняя звезда") и выполнение условия CCI (1)<-50 (значение индикатора CCI на последнем завершенном баре меньше -50).
Сигналом к закрытию короткой позиции является пересечение индикатора CCI уровня -80 (сверху вниз) или уровня 80 (сверху вниз).
//+------------------------------------------------------------------+ //| Метод проверки условий для входа и выхода с рынка | //| Проверка условий для | //| 1) входа в рынок (открытие длинной позиции, result=80) | //| 2) выхода из рынка (закрытие короткой позиции, result=40) | //+------------------------------------------------------------------+ int CMS_ES_CCI::LongCondition() { int result=0; //--- idx можно использовать для того чтобы узнать режим работы эксперта //--- idx=0 - эксперт будет вызывать проверки выполнения торговых условий на каждом тике //--- idx=1 - эксперт будет вызывать проверки выполнения торговых условий только на новых барах int idx =StartIndex(); //--- проверка условий для открытия длинной позиции //--- формирование бычьей свечной комбинации Morning Star и выполнения условия CCI<-50 if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (CCI(1)<-50)) result=80; //--- проверка условий для закрытия короткой позиции if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80))) result=40; //--- возвращаем result return(result); }
2.2. Открытие короткой позиции и закрытие длинной позиции
Сигналом к открытию короткой позиции является формирование паттерна "Evening Star" ("Вечерняя звезда") и выполнение условия CCI(1)>50 (значение индикатора CCI на последнем завершенном баре больше 50).
Сигналом к закрытию длинной позиции является пересечение индикатором CCI уровня 80 (сверху вниз) или уровня -80 (сверху вниз).
//+------------------------------------------------------------------+ //| Метод проверки условий для входа и выхода с рынка | //| Проверка условий для | //| 1) входа в рынок (открытие короткой позиции, result=80) | //| 2) выхода из рынка (закрытие длинной позиции, result=40) | //+------------------------------------------------------------------+ int CMS_ES_CCI::ShortCondition() { int result=0; //--- idx можно использовать для того чтобы узнать режим работы эксперта //--- idx=0 - эксперт будет вызывать проверки выполнения торговых условий на каждом тике //--- idx=1 - эксперт будет вызывать проверки выполнения торговых условий только на новых барах int idx =StartIndex(); //--- проверка условий для открытия короткой позиции //--- формирование медвежьей свечной комбинации Evening Star и выполнения условия CCI>50 if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (CCI(1)>50)) result=80; //--- проверка условий для закрытия длинной позиции if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) result=40; //--- возвращаем result return(result); }
2.3. Создание эксперта на основе торговых сигналов разворотной модели "Morning/Evening Stars + CCI" при помощи Мастера MQL5
Класс CMS_ES_CCI не входит в Стандартную библиотеку классов торговых сигналов, поэтому для его использования нужно скачать файл acms_es_cci.mqh (прилагается) и сохранить его в каталог_данных_терминала\MQL5\Include\Expert\Signal\MySignals. Файл acandlepatterns.mqh следует скопировать в тот же каталог, что и файл acms_es_cci.mqh. После этого, перезапустив MetaEditor, вы получите
возможность его использования в Мастере MQL5.
Чтобы создать торгового робота по данной стратегии запустите Мастер MQL5:
Рис. 4. Создание советника в Мастере MQL5
Нажав на кнопку "Далее", укажем имя советника:
Рис. 5. Общие параметры советника
После этого нужно указать параметры сигналов.
Рис. 6. Параметры сигналов советника
В нашем случае мы будем использовать лишь один модуль торговых сигналов.
Добавляем модуль "Signals based on Morning/Evening Stars confirmed by CCI":
Рис. 7. Параметры сигналов советника
Модуль сигналов добавлен:
Рис. 8. Параметры сигналов советника
После этого можно выбрать модуль трейлинга, мы его использовать не будем. Выбираем "Trailing Stop not used":
Рис. 9. Выбор модуля трейлинга
Затем нужно выбрать модуль управления капиталом, мы будем использовать торговлю с фиксированным объемом (Trading with fixed trade volume):
Рис. 10. Выбор модуля управления капиталом
Нажав на кнопку "Готово", мы получим код сгенерированного советника - файл Expert_AMS_ES_CCI.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.16, PeriodCCI=25, MA_period=5).
В данном советнике использовался модуль торговли фиксированным объемом 0.1 лота (Trading Fixed Lot), трейлинг не использовался (Trailing not used).
Рис. 11. Результаты тестирования советника, построенного на базе генератора торговых сигналов "Morning/Evening Stars + CCI"
Наилучший набор параметров торговой системы можно найти при помощи Тестера Стратегий терминала MetaTrader 5.
Код советника, созданного Мастером MQL5, прилагается в файле expert_aes_ms_cci.mq5.

Торговые сигналы свечных моделей "Morning Star/Evening Star" (Утренняя звезда/Вечерняя звезда) с подтверждением от индикатора Stochastic.

Торговые сигналы свечных моделей "Bullish/Bearish Meeting Lines" (Бычья и медвежья модели встречающихся свечей) с подтверждением от индикатора RSI (Relative Strength Index).

Торговые сигналы свечных моделей "Morning Star/Evening Star" (Утренняя звезда/Вечерняя звезда) с подтверждением от индикатора MFI (Market Facilitation Index).

Торговые сигналы свечных моделей "Morning Star/Evening Star" (Утренняя звезда/Вечерняя звезда) с подтверждением от индикатора RSI (Relative Strength Index).