preview
Разбираем примеры торговых стратегий в клиентском терминале

Разбираем примеры торговых стратегий в клиентском терминале

MetaTrader 5Примеры | 9 августа 2024, 16:14
124 0
Artyom Trishkin
Artyom Trishkin

Содержание


Введение

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

С некоторых пор в клиентском терминале в каталоге советников появилась новая папка Free Robots:


В этой папке находятся 28 советников — примеров торговых стратегий для самостоятельного изучения и применения принципов, заложенных в стратегии, для собственных разработок. Торговые стратегии, представленные в папке Free Robots, — это советники, торгующие по свечным паттернам, подкрепляемым сигналами от индикаторов.

Для подтверждения сигналов, поступающих от свечных паттернов, используются значения одного из четырёх индикаторов-осцилляторов: CCI, MFI, RSI и Stochastic Oscillator. Таким образом, для изучения представлены 7 советников, торгующих по свечным паттернам (в каждом по два паттерна — один паттерн для длинных, и один — для коротких позиций), и каждый из этих советников представлен в четырёх экземплярах — по количеству подтверждающих индикаторов.


Обзор торговых стратегий

Каждая из торговых стратегий использует по два однотипных, но разных по направлению и названию, паттерна:

1. BlackCrows WhiteSoldiers


3 White Soldiers: Паттерн на покупку "Три белых солдата" — 3 подряд идущие белые свечи с телом достаточного размера. Являются сигналом о возможном развороте нисходящего (медвежьего) тренда.

3 Black Crows: Паттерн на продажу "Три черные вороны" — 3 подряд идущие черные свечи с телом достаточного размера. Являются сигналом о возможном развороте восходящего (бычьего) тренда.

На основе свечных паттернов, описанных выше, в терминале представлены четыре учебных советника:

  • BlackCrows WhiteSoldiers CCI.mq5 — советник, торгующий по паттернам 3 White Soldiers и 3 Black Crows с подтверждением сигналов по индикатору CCI.
  • BlackCrows WhiteSoldiers MFI.mq5 — советник, торгующий по паттернам 3 White Soldiers и 3 Black Crows с подтверждением сигналов по индикатору MFI.
  • BlackCrows WhiteSoldiers RSI.mq5 — советник, торгующий по паттернам 3 White Soldiers и 3 Black Crows с подтверждением сигналов по индикатору RSI.
  • BlackCrows WhiteSoldiers Stoch.mq5 — советник, торгующий по паттернам 3 White Soldiers и 3 Black Crows с подтверждением сигналов по индикатору Stochastic Oscillator.

2. BullishBearish Engulfing


Bullish Engulfing: Паттерн на покупку "Бычье поглощение" возникает в случае, когда при нисходящем тренде после медвежьей свечи появляется бычья свеча, тело которой полностью поглощает тело медвежьей свечи. Является сигналом о возможном развороте нисходящего (медвежьего) тренда.

Bearish Engulfing: Паттерн на продажу "Медвежье поглощение" возникает в случае, когда при восходящем тренде после бычьей свечи появляется медвежья свеча, тело которой полностью поглощает тело бычьей свечи. Является сигналом о возможном развороте восходящего (бычьего) тренда.

На основе свечных паттернов, описанных выше, в терминале представлены четыре учебных советника:

  • BullishBearish Engulfing CCI.mq5 — советник, торгующий по паттернам Bullish Engulfing и Bearish Engulfing с подтверждением сигналов по индикатору CCI.
  • BullishBearish Engulfing MFI.mq5 — советник, торгующий по паттернам Bullish Engulfing и Bearish Engulfing с подтверждением сигналов по индикатору MFI.
  • BullishBearish Engulfing RSI.mq5 — советник, торгующий по паттернам Bullish Engulfing и Bearish Engulfing с подтверждением сигналов по индикатору RSI.
  • BullishBearish Engulfing Stoch.mq5 — советник, торгующий по паттернам Bullish Engulfing и Bearish Engulfing с подтверждением сигналов по индикатору Stochastic Oscillator.


3. BullishBearish Harami


Bullish Harami: Паттерн на покупку "Бычья модель Харами" возникает в случае, когда при нисходящем тренде после длинной медвежьей свечи появляется бычья свеча с телом, полностью расположенным внутри тела медвежьей свечи. Является сигналом о возможном развороте нисходящего (медвежьего) тренда.

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

На основе свечных паттернов, описанных выше, в терминале представлены четыре учебных советника:

  • BullishBearish Harami CCI.mq5 — советник, торгующий по паттернам Bullish Harami и Bearish Harami с подтверждением сигналов по индикатору CCI.
  • BullishBearish Harami MFI.mq5 — советник, торгующий по паттернам Bullish Harami и Bearish Harami с подтверждением сигналов по индикатору MFI.
  • BullishBearish Harami RSI.mq5 — советник, торгующий по паттернам Bullish Harami и Bearish Harami с подтверждением сигналов по индикатору RSI.
  • BullishBearish Harami Stoch.mq5 — советник, торгующий по паттернам Bullish Harami и Bearish Harami с подтверждением сигналов по индикатору Stochastic Oscillator.


4. BullishBearish MeetingLines


Bullish Meeting Lines: Паттерн на покупку "Бычьи встречающиеся свечи" представляет собой комбинацию медвежьей и бычьей свечей, у которых совпадают (или очень близки) цены закрытия. Длина тел обеих свечей больше средней.  Является сигналом о возможном развороте нисходящего (медвежьего) тренда.

Bearish Meeting Lines: Паттерн на продажу "Медвежьи встречающиеся свечи" представляет собой комбинацию бычьей и медвежьей свечей, у которых совпадают (или очень близки) цены закрытия. Длина тел обеих свечей больше средней. Является сигналом о возможном развороте восходящего (бычьего) тренда.

На основе свечных паттернов, описанных выше, в терминале представлены четыре учебных советника:

  • BullishBearish MeetingLines CCI.mq5 — советник, торгующий по паттернам Bullish Meeting Lines и Bearish Meeting Lines с подтверждением сигналов по индикатору CCI.
  • BullishBearish MeetingLines MFI.mq5 — советник, торгующий по паттернам Bullish Meeting Lines и Bearish Meeting Lines с подтверждением сигналов по индикатору MFI.
  • BullishBearish MeetingLines RSI.mq5 — советник, торгующий по паттернам Bullish Meeting Lines и Bearish Meeting Lines с подтверждением сигналов по индикатору RSI.
  • BullishBearish MeetingLines Stoch.mq5 — советник, торгующий по паттернам Bullish Meeting Lines и Bearish Meeting Lines с подтверждением сигналов по индикатору Stochastic Oscillator.


5. DarkCloud PiercingLine


Piercing Line: Паттерн на покупку "Просвет в облаках" представляет собой комбинацию медвежьей и бычьей свечей. Является противоположным аналогом паттерна Dark Cloud Cover (Завеса из темных облаков).  Сначала идет большая черная свеча, следующая имеет низкое открытие (ниже минимума предыдущей) и закрытие выше середины первой свечи.  Является сигналом о возможном развороте нисходящего (медвежьего) тренда.

Dark Cloud Cover: Паттерн на продажу "Завеса из темных облаков" представляет собой комбинацию бычьей и медвежьей свечей. Сначала идет большая белая свеча, следующая свеча имеет высокое открытие (выше максимума предыдущей) и закрытие ниже середины первой свечи. Это один из немногих случаев, когда учитываются максимум и минимум. Является сигналом о возможном развороте восходящего (бычьего) тренда.

На основе свечных паттернов, описанных выше, в терминале представлены четыре учебных советника:

  • DarkCloud PiercingLine CCI.mq5 — советник, торгующий по паттернам PiercingLine и Dark Cloud Cover с подтверждением сигналов по индикатору CCI.
  • DarkCloud PiercingLine MFI.mq5 — советник, торгующий по паттернам PiercingLine и Dark Cloud Cover с подтверждением сигналов по индикатору MFI.
  • DarkCloud PiercingLine RSI.mq5 — советник, торгующий по паттернам PiercingLine и Dark Cloud Cover с подтверждением сигналов по индикатору RSI.
  • DarkCloud PiercingLine Stoch.mq5 — советник, торгующий по паттернам PiercingLine и Dark Cloud Cover с подтверждением сигналов по индикатору Stochastic Oscillator.


6. HangingMan Hammer


Hammer: Паттерн на покупку "Молот" представляет из себя свечу с маленьким телом и длинной нижней тенью, появившейся после нисходящей тенденции. Появление "Молота" – это сильный сигнал того, что господство медвежьего рынка подходит к концу.

Hanging Man: Паттерн на продажу "Повешенный" представляет из себя свечу с маленьким телом и длинной нижней тенью, появившейся после восходящей тенденции. Появление "Повешенного" сигнализирует об окончании повышательной тенденции.

На основе свечных паттернов, описанных выше, в терминале представлены четыре учебных советника:

  • HangingMan Hammer CCI.mq5 — советник, торгующий по паттернам Hammer и Hanging Man с подтверждением сигналов по индикатору CCI.
  • HangingMan Hammer MFI.mq5 — советник, торгующий по паттернам Hammer и Hanging Man с подтверждением сигналов по индикатору MFI.
  • HangingMan Hammer RSI.mq5 — советник, торгующий по паттернам Hammer и Hanging Man с подтверждением сигналов по индикатору RSI.
  • HangingMan Hammer Stoch.mq5 — советник, торгующий по паттернам Hammer и Hanging Man с подтверждением сигналов по индикатору Stochastic Oscillator.


7. MorningEvening StarDoji 


Morning Star: Паттерн на покупку "Утренняя звезда" состоит из трех свечей, возникает при нисходящем тренде:
1. За длинной черной свечей идет свеча с маленьким телом (цвет не имеет значения), которое не пересекается с телом черной свечи.
2. Маленькое тело второй свечи означает, что рынок перешел от нисходящей тенденции к равновесию сил быков и медведей.
3. Третьей свечей этой модели является бычья свеча, тело которой обычно не пересекается с телом второй свечи, а уровень закрытия располагается внутри тела первой (медвежьей) свечи.
Паттерн является сигналом о возможном развороте нисходящего (медвежьего) тренда.

Morning Doji Star: Паттерн на покупку "Утренняя звезда доджи" является частным случаем паттерна "Утренняя звезда" (Morning Star). В этом случае вторая свеча паттерна имеет одинаковые цены открытия и закрытия — то есть вторая свеча не имеет тела. Паттерн является сигналом о возможном развороте нисходящего (медвежьего) тренда.

Evening Star: Паттерн на продажу "Вечерняя звезда" также состоит из трех свечей, возникает при восходящем тренде:
1. За длинной белой свечей идет свеча с маленьким телом (цвет не имеет значения), которое не пересекается с телом белой свечи.
2. Маленькое тело второй свечи означает, что рынок перешел от восходящей тенденции к равновесию сил быков и медведей.
3. Третьей свечей этой модели является черная свеча, тело которой обычно не пересекается с телом второй свечи, а уровень закрытия располагается внутри тела первой (бычьей) свечи.
Паттерн является сигналом о возможном развороте восходящего (бычьего) тренда.

Evening Doji Star: Паттерн на продажу "Вечерняя звезда доджи" является частным случаем паттерна "Вечерняя звезда" (Evening Star). В этом случае вторая свеча паттерна имеет одинаковые цены открытия и закрытия — то есть вторая свеча не имеет тела. Паттерн является сигналом о возможном развороте нисходящего (медвежьего) тренда.

На основе свечных паттернов, описанных выше, в терминале представлены четыре учебных советника:

  • MorningEvening StarDoji CCI.mq5 — советник, торгующий по паттернам Morning Star (Morning Doji Star) и Evening Star (Evening Doji Star) с подтверждением сигналов по индикатору CCI.
  • MorningEvening StarDoji MFI.mq5 — советник, торгующий по паттернам Morning Star (Morning Doji Star) и Evening Star (Evening Doji Star) с подтверждением сигналов по индикатору MFI.
  • MorningEvening StarDoji RSI.mq5 — советник, торгующий по паттернам Morning Star (Morning Doji Star) и Evening Star (Evening Doji Star) с подтверждением сигналов по индикатору RSI.
  • MorningEvening StarDoji Stoch.mq5 — советник, торгующий по паттернам Morning Star (Morning Doji Star) и Evening Star (Evening Doji Star) с подтверждением сигналов по индикатору Stochastic Oscillator.


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

В таблицах ниже представлены используемые значения индикаторов для подтверждения входов в позицию и для закрытия открытых позиций:

Индикатор
Покупка
Продажа
 CCI
CCI (1)<-50 — значение индикатора CCI на последнем завершенном баре меньше -50
CCI(1)>50 — значение индикатора CCI на последнем завершенном баре больше 50
 MFI
MFI(1)<40 — значение индикатора MFI на последнем завершенном баре меньше 40
MFI(1)>60 — значение индикатора MFI на последнем завершенном баре больше 60
 RSI
RSI(1)<40 — значение линии индикатора RSI на последнем завершенном баре меньше 40
RSI(1)>60 — значение индикатора RSI на последнем завершенном баре больше 60
 Stochastic
Stochastic Signal(1)<30 — значение сигнальной линии индикатора Stochastic на последнем    завершенном баре меньше 30
Stochastic Signal(1)>70 — значение сигнальной линии индикатора Stochastic на последнем завершенном баре больше 70

Сигналы технических индикаторов для закрытия позиций возникают, когда значение индикатора пересекает границу экстремальной зоны, а именно – вход или выход в/из зоны перекупленности или перепроданности.

Индикатор
Закрытие длинной позиции
 Закрытие короткой позиции
 CCI
Пересечение индикатором CCI сверху вниз уровня 80 или уровня -80
Пересечение индикатора CCI снизу вверх уровня -80 или уровня 80
 MFI
Пересечение индикатором MFI сверху вниз уровня 70 или уровня 30
Пересечение индикатором MFI снизу вверх уровня 30 или уровня 70
 RSI
Пересечение индикатора RSI сверху вниз уровня 70 или уровня 30
Пересечение индикатора RSI снизу вверх уровня 30 или уровня 70
 Stochastic
Пересечение сигнальной линией индикатора Stochastic сверху вниз уровня 80 или уровня 20
Пересечение сигнальной линией индикатора Stochastic снизу вверх уровня 20 или уровня 80

Один отдельно взятый советник работает по паре противоположных по направленности свечных паттернов, и представлен в четырёх вариантах подтверждающих индикаторов.

В итоге имеем 7 * 4 = 28 различных советников, организованных по одной, идентичной для всех, схеме. Рассмотрим единую логику всех советников при помощи блок-схем.


Разбираем общую логику

Если открыть в редакторе кода любой из представленных советников, изучить его код, то увидим простую схему:


Логика советников построена на флагах и переменных, объявленных на глобальном уровне:

  • ExtSignalOpen — сигнал на открытие позиции. 1 — Buy, -1 — Sell, 0 — нет сигнала,
  • ExtSignalClose — сигнал на закрытие позиции. 2 — long, -2 — short, 0 — нет сигнала,
  • ExtPatternInfo — текстовое описание текущего найденного паттерна,
  • ExtDirection — направление открываемой позиции. Текстовое описание,
  • ExtPatternDetected — флаг найденного паттерна (true/false),
  • ExtConfirmed — флаг подтверждённого индикатором сигнала паттерна (true/false),
  • ExtCloseByTime — флаг того, что требуется закрытие по времени удержания позиции (true/false),
  • ExtCheckPassed — флаг успешности получения данных (true/false).
    Глобально выставляемые флаги являются по сути семафорами для определения логики поведения советника. В текстовые переменные записываются значения для вывода информации в журнал.
    Логика советника последовательна и состоит из блока инициализации флагов в обработчике OnInit() и четыре этапа работы в обработчике OnTick().
    • Этап 1 — проверка появления нового бара и обновление окружения и состояния флагов,
    • Этап 2 — открытие позиции,
    • Этап 3 — закрытие позиции,
    • Этап 4 — закрытие позиции по истечении её времени удержания.

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

    Блок-схема логики работы советника


    В блок-схеме отображены четыре этапа работы советника:

    Этап 1:

    • Проверяем появление нового бара.
      Если новый бар — проверяем текущее состояние:
      • Проверяем свечные формации на наличие паттерна.
      • Если паттерн найден — проверяем подтверждение сигнала паттерна по индикатору.
      • Если сигнал паттерна подтверждён — распечатываем информацию о найденном паттерне в журнале и устанавливаем флаги открытия позиции.

    Этап 2:

    • Если есть сигнал на открытие позиции и такой позиции не существует — распечатываем в журнале сообщение о сигнале на открытие позиции и открываем позицию.
    • Если позиция открыта — сбрасываем флаг открытия позиции.

    Этап 3:

    • Если есть сигнал на закрытие позиции и такая позиция существует — распечатываем в журнале сообщение о сигнале на закрытие позиции и закрываем позицию.
    • Если позиции нет — сбрасываем флаг закрытия позиции.

    Этап 4:

    • Если есть сигнал на закрытие позиции по истечению времени её удержания и такая позиция существует — закрываем позицию с истёкшим временем удержания.
    • Если позиции нет — сбрасываем флаг закрытия позиции по истечению времени её удержания.


    Список функций

    Рассмотрим список функций советника и их краткое описание:

    CheckState() — проверка состояние окружения:

    • Если паттерн не найден — возвращает false.
    • Если получена ошибка при подтверждении паттерна индикатором — возвращает false.
    • Если паттерн не подтверждён сигналом индикатора — сбрасывается флаг открытия позиции.
    • Если задано закрытие по истечению времени удержания позиции — устанавливается соответствующий флаг.

    PositionOpen() — открытие позиции:

    • Обновляются данные торгового окружения.
    • В зависимости от сигнала и, соответственно, типа позиции, корректируются цены установки StopLoss и TakeProfit на допустимые значения относительно цены открытия и ограничений сервера.
    • Открывается позиция.
    • Если позиция не открыта — сообщается в журнале об ошибке и возвращается false.
    • При успешном открытии возвращается true.

    CloseBySignal() — закрытие позиции по сигналу:

    • Если нет сигнала на закрытие — возврат из функции.
    • Определяется тип закрываемой позиции по направлению сигнала.
    • Закрываются все позиции, открытые советником, с типом, определённым по направлению сигнала.

    CloseByTime() — закрытие позиций с истёкшим временем удержания:

    • Если нет позиций, открытых советником — возврат из функции.
    • Закрываются все позиции, открытые советником, время удержания которых истекло.

    PositionExist() — возвращает флаг существования позиции по направлению сигнала:

    • Определяется тип позиции, соответствующий направлению сигнала.
    • Возвращается флаг существования позиции, открытой экспертом с типом, определённым по направлению сигнала.

    PositionExpiredByTimeExist() — возвращает флаг существования позиции с истёкшим временем удержания:

    • Определяется количество баров жизни позиции.
    • Возвращается флаг существования позиции, если её время удержания больше заданного в настройках количества баров.

    BarsHold() — возвращает количество баров удержания позиции:

    • Определяется и возвращается количество баров между временем открытия позиции и текущим временем сервера.

    Open(), Close(), Low(), High() — возвращают соответствующую цену бара по индексу:

    • Запрашиваются соответствующие цены с указанного бара.
    • Если цены не получены, устанавливается флаг ошибки.
    • Возвращаются полученные цены.

    MidPoint(), MidOpenClose(), AvgBody() — возвращают расчётные средние цены.

    CheckPattern() — проверка существования паттерна:

    • Выполняется алгоритм поиска паттерна в Short-направлении.
    • Если паттерн найден — устанавливается флаг найденного паттерна и возвращается true.
    • Выполняется алгоритм поиска паттерна в Long-направлении.
    • Если паттерн найден — устанавливается флаг найденного паттерна и возвращается true.
    • Если паттерны не найдены — возвращается флаг ошибки, который может быть установлен в значение false в функциях получения цен.

    CheckConfirmation() — проверяет и устанавливает флаг подтверждения сигнала паттерна сигналом от индикатора.

    CheckCloseSignal() — проверяет условия для сигнала к закрытию позиций по значениям индикатора, при наличии сигнала устанавливает флаг закрытия позиции.


    Заключение

    Все 28 советников, предлагаемые к рассмотрению в папке Experts\Free Robots, работают по одной и той же логике. Разница в них лишь в алгоритмах поиска свечных паттернов и в получении данных от четырёх индикаторов для подтверждения сигналов паттернов. Соответственно, любой из этих советников можно использовать как шаблон для создания на его основе других советников, работающих по другим свечным формациям, и получающим подтверждения паттернов от иных индикаторов. Всё, что для этого нужно сделать, это поменять логику поиска паттернов в Long- и Short-направлении в функции CheckPattern(), вызываемой из функции CheckState(), обращение к которой происходит на первом шаге работы советника:

    //+------------------------------------------------------------------+
    //| Returns true in case of successful pattern check                 |
    //+------------------------------------------------------------------+
    bool CheckPattern()
      {
       ExtPatternDetected=false;
    //--- check if there is a pattern
       ExtSignalOpen=SIGNAL_NOT;
       ExtPatternInfo="\r\nPattern not detected";
       ExtDirection="";
    
    //--- check 3 Black Crows
       if((Open(3)-Close(3)>AvgBody(1)) && // long black
          (Open(2)-Close(2)>AvgBody(1)) &&
          (Open(1)-Close(1)>AvgBody(1)) &&
          (MidPoint(2)<MidPoint(3))     && // lower midpoints
          (MidPoint(1)<MidPoint(2)))
         {
          ExtPatternDetected=true;
          ExtSignalOpen=SIGNAL_SELL;
          ExtPatternInfo="\r\n3 Black Crows detected";
          ExtDirection="Sell";
          return(true);
         }
    
    //--- check 3 White Soldiers
       if((Close(3)-Open(3)>AvgBody(1)) && // long white
          (Close(2)-Open(2)>AvgBody(1)) &&
          (Close(1)-Open(1)>AvgBody(1)) &&
          (MidPoint(2)>MidPoint(3))     && // higher midpoints
          (MidPoint(1)>MidPoint(2)))
         {
          ExtPatternDetected=true;
          ExtSignalOpen=SIGNAL_BUY;
          ExtPatternInfo="\r\n3 White Soldiers detected";
          ExtDirection="Buy";
          return(true);
         }
    
    //--- result of checking
       return(ExtCheckPassed);
      }

    Для замены подтверждающего индикатора необходимо во входных параметрах вписать требуемые свойства индикатора вместо указанных, например, для CCI:

    //--- Input parameters
    input int  InpAverBodyPeriod=12;    // period for calculating average candlestick size
    input int  InpPeriodCCI     =37;    // CCI period
    input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type

    В обработчике OnInit() заменить блок создания, например, CCI на создание другого индикатора:

    //+------------------------------------------------------------------+
    //| Expert initialization function                                   |
    //+------------------------------------------------------------------+
    int OnInit()
      {
       Print("InpSL=", InpSL);
       Print("InpTP=", InpTP);
    //--- set parameters for trading operations
       ExtTrade.SetDeviationInPoints(InpSlippage);    // slippage
       ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID
       ExtTrade.LogLevel(LOG_LEVEL_ERRORS);           // logging level
    
       ExtAvgBodyPeriod=InpAverBodyPeriod;
    //--- indicator initialization
       ExtIndicatorHandle=iCCI(_Symbol, _Period, InpPeriodCCI, InpPrice);
       if(ExtIndicatorHandle==INVALID_HANDLE)
         {
          Print("Error creating CCI indicator");
          return(INIT_FAILED);
         }
    //--- OK
       return(INIT_SUCCEEDED);
      }

    И далее в советнике в функции подтверждения сигналов паттернов CheckConfirmation() и в функции закрытия позиций по сигналам индикатора CheckCloseSignal() использовать данные нового индикатора с требуемыми значениями для подтверждения Long- и Short-направлений паттернов:

    //+------------------------------------------------------------------+
    //| Returns true in case of successful confirmation check            |
    //+------------------------------------------------------------------+
    bool CheckConfirmation()
      {
       ExtConfirmed=false;
    //--- if there is no pattern, do not search for confirmation
       if(!ExtPatternDetected)
          return(true);
    
    //--- get the value of the stochastic indicator to confirm the signal
       double signal=CCI(1);
       if(signal==EMPTY_VALUE)
         {
          //--- failed to get indicator value, check failed
          return(false);
         }
    
    //--- check the Buy signal
       if(ExtSignalOpen==SIGNAL_BUY && (signal<-50))
         {
          ExtConfirmed=true;
          ExtPatternInfo+="\r\n   Confirmed: CCI<-50";
         }
    
    //--- check the Sell signal
       if(ExtSignalOpen==SIGNAL_SELL && (signal>50))
         {
          ExtConfirmed=true;
          ExtPatternInfo+="\r\n   Confirmed: CCI>50";
         }
    
    //--- successful completion of the check
       return(true);
      }
    


    //+------------------------------------------------------------------+
    //| Check if there is a signal to close                              |
    //+------------------------------------------------------------------+
    bool CheckCloseSignal()
      {
       ExtSignalClose=false;
    //--- if there is a signal to enter the market, do not check the signal to close
       if(ExtSignalOpen!=SIGNAL_NOT)
          return(true);
    
    //--- check if there is a signal to close a long position
       if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
         {
          //--- there is a signal to close a long position
          ExtSignalClose=CLOSE_LONG;
          ExtDirection="Long";
         }
    
    //--- check if there is a signal to close a short position
       if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)>80) && (CCI(2)<80)))
         {
          //--- there is a signal to close a short position
          ExtSignalClose=CLOSE_SHORT;
          ExtDirection="Short";
         }
    
    //--- successful completion of the check
       return(true);
      }

    Таким образом видим, что данные советники представляют неплохой шаблон для создания и тестирования собственных алгоритмов для проверки различных свечных формаций с подтверждением от практически любого подходящего индикатора.

    Особенности написания Пользовательских Индикаторов Особенности написания Пользовательских Индикаторов
    Написание пользовательских индикаторов в торговой системе MetaTrader 4
    Нейросети в трейдинге: Модели пространства состояний Нейросети в трейдинге: Модели пространства состояний
    В основе большого количества рассмотренных нами ранее моделей лежит архитектура Transformer. Однако они могут быть неэффективны при работе с длинными последовательностями. И в этой статье я предлагаю познакомиться с альтернативным направлением прогнозирования временных рядов на основе моделей пространства состояний.
    Особенности написания экспертов Особенности написания экспертов
    Написание и тестирование экспертов в торговой системе MetaTrader 4.
    Как опередить любой рынок? Как опередить любой рынок?
    Узнайте, как опередить любой рынок независимо от вашего опыта торговли на нем.