Возможности Мастера MQL5, которые вам нужно знать (Часть 73): Использование паттернов Ишимоку и ADX-Wilder
Введение
Мы используем индикатор Ишимоку и осциллятор ADX-Wilder (ADX) для определения уровней поддержки/сопротивления и тренда. Индикатор Ишимоку, безусловно, многогранен и весьма универсален. Он может отображать не только уровни поддержки/сопротивления. Однако пока мы будем использовать его только с этой целью. Сочетание индикаторов, особенно взаимодополняющих, может обеспечить более точные и эффективные сигналы на вход в сделку для советников. Как обычно, рассмотрим 10 сигнальных паттернов этой пары индикаторов. Мы поочередно тестируем эти 10 сигнальных паттернов, каждому из которых присваивается индекс, руководствуясь при этом следующими правилами:
Индексация ведется от 0 до 9, что позволяет нам легко вычислять значение битовой маски для его отдельного использования советником. Например, если паттерн имеет индекс 1, то нам нужно установить параметр PatternsUsed равным 2 в степени 1, что в сумме дает 2. Если индекс равен 4, то это 2 в 4-й степени, что дает 16, и так далее. Максимальное значение, которое может быть присвоено параметру, составляет 1023, поскольку у нас всего 10 параметров. Любое число от 0 до 1023, не являющееся чистой степенью 2, будет представлять собой комбинацию более чем одного из этих 10 паттернов.
В предыдущих статьях мы доказывали, почему обучение или оптимизация с использованием множества сигналов обречена на провал, несмотря на зачастую оптимистичные результаты тестов. Это происходит потому, что при активации более одного сигнала они, как правило, непреднамеренно отменяют сделки друг друга в точках, удобных для максимизации прибыли в течение ограниченного тестового периода. Для решения этой проблемы можно было бы провести тестирование в более широких тестовых окнах, но поскольку статья посвящена тестовому окну продолжительностью в один год, это неприменимо для наших целей.
Ишимоку
По определению, индикатор Ишимоку — это комплексный индикатор, объединяющий несколько элементов для оценки направления тренда, импульса и уровней поддержки/сопротивления. Этот индикатор, название которого переводится как "универсальная система", призван дать целостное представление о движении цены и часто используется в стратегиях следования за трендом. Он состоит из пяти буферов. Тенкан-сен (Tenkan-sen), Киджун-сен (Kijun-sen), Сенку-Спан-А (Senkou-Span-A), Сенку-Спан-Б (Senkou-Span-B) и, наконец, Чику-Спан (Chikou-Span). Помимо этих буферов, часто упоминается также облако Кумо (Kumo-Cloud), состоящее из двух полос Сенку A и B. На первый взгляд, это облако может служить уровнем поддержки/сопротивления, а по его толщине также можно судить о силе тренда.
Для вычисления всех пяти буферов требуется три входных параметра, которые обычно обозначаются как 9, 26 и 52. Теоретически эти значения можно настроить под различные рынки, но, вероятно, лучше оставить эти периоды как есть и постараться скорректировать другие характеристики своей системы. С помощью этого индикатора можно сделать множество выводов, включая пересечения линий Тенкан и Киджун, а также подтверждения Чику, как мы увидим ниже. Таким образом, индикатор Ишимоку универсален и может применяться к различным активам, от акций и валют до криптовалют, на разных таймфреймах.
Теперь давайте рассмотрим базовую формулу этих пяти буферов, начиная с Тенкан-сен. Она определяется так:
= (Highest High + Lowest Low) / 2
где:
- Highest high (максимум) — это наивысшее значение цены за последние 9 периодов.
- Lowest low (минимум) - наименьшая цена за последние 9 периодов.
Его назначение можно рассматривать как краткосрочный индикатор тренда, чувствительный к изменениям цен и, следовательно, позволяющий легко определять состояние рынка на краткосрочном горизонте. Киджун-сен рассчитывается в аналогичном ключе:
= (Highest High + Lowest Low) / 2
где:
- Highest High - максимальная цена за 26 периодов
- Lowest low - минимальная цена за 26 периодов.
Его назначение – служить среднесрочным барометром тренда, а также уровнем поддержки/сопротивления. Далее у нас идет Сенку Спан A. Формула этого буфера выглядит следующим образом:
= (Tenkan-sen + Kijun-sen) / 2
где:
- Tenkan-sen и Kijun-sen - значения линии преобразования и базовые значения буферов, формулы которых представлены выше.
Основная цель этого буфера — формирование края облака Кумо, важного признака уровня поддержки/сопротивления Ишимоку. Далее у нас идет Сенку-спан B. Он тоже похож на Тенкан-сен, отличаясь лишь длиной используемого периода:
= (Highest High + Lowest Low) / 2
где:
- Highest High - максимальная цена за 52 периода
- Lowest Low - минимальная цена за 52 периода
Его назначение — дополнить Сенку-спан А, сформировав вторую кромку облака Кумо. Более длительные периоды также делают его долгосрочным уровнем поддержки/сопротивления. Наконец, Чику-спан, являющийся последним буфером индикатора, определяется так:
= Current period’s close (уровень закрытия текущего периода)
где:
- Цена закрытия текущего периода откладывается на графике на 26 периодов назад.
Цель Чику — подтверждать тренды путем сравнения прошлых цен с текущим положением дел. Также заслуживает внимания, и об этом уже упоминалось выше, облако Кумо. Обычно это область между Сенку-спан A и Сенку-спан B. Когда A больше, чем B, мы имеем бычье облако Кумо, а когда A < B - медвежий. Кумо помогает визуализировать силу тренда, а также уровни поддержки/сопротивления.
ADX-Wilder
Второй индикатор, используемый в статье, измеряет силу преобладающего тренда, но не его направления. Однако, помимо основного буфера, он имеет еще два дополнительных буфера, которые можно использовать для оценки бычьего и медвежьего импульса. Как правило, значение основного буфера ADX находится в диапазоне от 0 до 100. Однако оно редко превышает уровень 25, поэтому, когда это происходит, это рассматривается как признак сильного преобладающего тренда. Если его значение меньше 20, это признак слабого тренда. Это запаздывающий индикатор, который обычно использует 14 периодов измерения в своих расчетах. Он может быть универсальным для различных классов активов. В качестве вторичного сигнала могут использоваться пересечения +DI/-DI, указывающие на направление тренда, при этом основной буфер ADX подтверждает силу тренда.
ADX Wilder имеет 3 выходных буфера, хотя в расчете используются до 6 величин. У нас есть направление движения +DM и индикатор направления +DM , направление движения -DM и индикатор направления -DM, истинный диапазон и, наконец, основной буфер ADX. Давайте рассмотрим формулы каждого из них. Первым делом рассмотрим положительное направленное движение DM:
= Current High - Previous High
где:
- Previous Low (предыдущий минимум) должен быть больше Current Low (текущий минимум). Если это условие не выполняется, то его значение равно нулю.
Этот буфер отслеживает движение цены вверх. Следующий буфер — отрицательное направленное движение. Его формула:
= Previous Low - Current Low
где:
- Current High (текущий максимум) выше Previous High (предыдущий максимум), в противном случае его значение равно нулю.
Буфер измеряет движение цены вниз. Определив направление движения, перейдем к определению истинного диапазона. Это определяется следующей простой формулой:
= Max[(Current High - Current Low), |Current High - Previous Close|, |Current Low - Previous Close|]
где:
- Max - максимальное значение из трех указанных выше разностей.
Основное назначение истинного диапазона — измерение волатильности цены. Определив направленные движения и истинный диапазон, мы можем перейти к используемым буферам индикатора. Первым из них является положительный индикатор направления. Это определяется по формуле, приведенной ниже:
= (Smoothed +DM / Smoothed TR) × 100
где:
- Smoothed +DM (сглаженный +DM) - экспоненциальное скользящее среднее положительного направленного движения, определенного выше.
- Smoothed TR (сглаженный TR) представляет собой экспоненциальное скользящее среднее истинного диапазона.
+DM служит индикатором бычьей силы. -DM рассчитывается по следующей формуле:
= (Smoothed -DM / Smoothed TR) × 100
где:
- Smoothed -DM (сглаженная -DM) также представляет собой экспоненциальное скользящее среднее отрицательного направленного движения, формула которого приведена выше.
Для буферов индикатора +DI и -DI обычно используется период 14. Цель индикатора -DM — измерение силы медвежьего тренда. Определив эти два буфера индикаторов, мы переходим к основному буферу ADX. Формула выглядит следующим образом:
= smoothed[(|+DI - -DI| / (+DI + -DI)) × 100]
где:
- Сглаживание подразумевает экспоненциальное усреднение выходных значений формулы за 14-периодный период.
- Индикатор +DI — это буфер бычьего тренда, который мы только что определили выше, а не положительное направленное движение.
- Индикатор -DI также является медвежьим индикатором, который мы только что определили.
- Несглаженное значение также обозначается как DX.
Цель сглаженного DX, или ADX, заключается в количественной оценке силы тренда. После ознакомления с двумя представленными индикаторами мы можем перейти к рассмотрению 10 паттернов, используемых в статье. Все испытания, как всегда, будут проведены в 2023 году, а 2024 год послужит форвард-периодом или тестовой средой. Однако мы используем 30-минутный таймфрейм вместо нашего обычного 4-часового, потому что индикатор Ишимоку не выдает достаточно сигналов за год, наш обычный тестовый период. Тестирование проводится на GBPUSD.
Пересечение ценой Сенку-спан A с подтверждением ADX.
Наш паттерн 0, как всегда, рассматривается первым, а используемый формат именования — паттерн x, где x — индекс паттерна, а не его порядковый номер. Как уже упоминалось во введении выше, мы делаем акцент на индексах, поскольку они помогают устанавливать значения входных параметров, что позволяет нам тестировать один паттерн за раз. Бычий сигнал для паттерна 0 возникает, когда цена пересекает Сенку-спан А снизу вверх, что означает прорыв выше облака Кумо. Как правило, это должно подтверждаться стабильным показанием ADX не ниже 25. Реализация в MQL5:
//+------------------------------------------------------------------+ //| Check for Pattern 0. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_0(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 1) < Ichimoku_SenkouSpanA(X() + 1) && Close(X()) > Ichimoku_SenkouSpanA(X()) && ADX(X()) >= 25.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 1) > Ichimoku_SenkouSpanA(X() + 1) && Close(X()) < Ichimoku_SenkouSpanA(X()) && ADX(X()) >= 25.0) { return(true); } return(false); }
Медвежий паттерн также формируется, когда цена пересекает линию Сенку-спан А и закрывается ниже нее. Это свидетельствует о пробое ниже облака с сильным трендом. Сочетание прорыва облака Ишимоку и подтверждения силы тренда индикатором ADX делает этот сигнал надежным. Паттерн лучше всего работает в условиях рыночного тренда; рыночная турбулентность для него не подходит. Результаты тестовых запусков, проводившихся в течение двух лет, с 2023 по 2024 год, после тестирования, проведенного только в 2023 году, дали нам следующий отчет:

Первоначальный тестовый запуск в 2023 году показал очень нестабильные результаты, которые, тем не менее, принесли незначительную прибыль. Интересно, что форвард-тестирование также приводит к аналогичному профилю кривой эквити, которая по-прежнему остается прибыльной. Рекомендуется использовать этот паттерн после подтверждения на более крупных таймфреймах для выравнивания тренда перед принятием решения. Требование к значению ADX не менее 25 имеет важное значение для отсеивания слабых сигналов. Стоп-лосс можно установить ниже/выше облака Кумо для сделок на покупку и продажу соответственно. Решающее значение имеет мониторинг на предмет ложных срабатываний.
Пересечение Тенкан-Сен/Киджун-Сен с подтверждением ADX
Наш следующий паттерн основан на двух пересечениях скользящих средних и подтверждении сигнала ADX. Когда линия Тенкан-Сен пересекает линию Киджун-Сен снизу вверх и закрывается выше нее, это сигнализирует о краткосрочном изменении импульса в сторону покупки. Значение ADX должно быть не менее 20. Реализация функции проверки на MQL5:
//+------------------------------------------------------------------+ //| Check for Pattern 1. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_1(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Ichimoku_TenkanSen(X() + 1) < Ichimoku_KijunSen(X() + 1) && Ichimoku_TenkanSen(X()) > Ichimoku_KijunSen(X()) && ADX(X()) >= 20.0) { return(true); } else if(T == POSITION_TYPE_SELL && Ichimoku_TenkanSen(X() + 1) > Ichimoku_KijunSen(X() + 1) && Ichimoku_TenkanSen(X()) < Ichimoku_KijunSen(X()) && ADX(X()) >= 20.0) { return(true); } return(false); }
Медвежий сигнал возникает, когда линия Тенкан-Сен пересекает линию Киджун-Сен сверху вниз и закрывается ниже нее, что указывает на сдвиг в сторону медвежьего импульса. По сути, это ранний сигнал разворота тренда по индикатору Ишимоку, который дополняет индикатор ADX. Подходящим рыночным контекстом может служить момент зарождения тренда или фрактальная точка. Метод не подходит для флетового рынка. Отчет о тестировании паттерна:

Паттерн явно не прошел форвард-тест. Это может быть связано с использованием жестких целевых уровней цены и отсутствием стоп-лоссов. Это параметры, которые читатель может настроить или отрегулировать для обеспечения различных торговых условий. Кроме того, при использовании этого паттерна сделки следует совершать в направлении тренда на более высоких таймфреймах. Пороговое значение ADX, равное всего 20, предназначено для отсеивания слабых пересечений. Стоп-лосс можно размещать ниже линии Киджун-Сен для покупок и выше нее для продаж. Сочетание с индикаторами объема может предоставить дополнительное подтверждение.
Пересечение Сенку-спан A/B с подтверждением ADX
Паттерн 2 основан на переключении или пересечении облака Кумо. Бычий сигнал возникает, когда Сенку-спан А пересекает Сенку-спан В снизу вверх, что приводит к формированию бычьего облака. Это переключение должно произойти на ADX, значение которого не ниже 25. Реализуем это в MQL5 следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 2. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_2(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Ichimoku_SenkouSpanA(X() + 1) < Ichimoku_SenkouSpanB(X() + 1) && Ichimoku_SenkouSpanA(X()) > Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 25.0) { return(true); } else if(T == POSITION_TYPE_SELL && Ichimoku_SenkouSpanA(X() + 1) > Ichimoku_SenkouSpanB(X() + 1) && Ichimoku_SenkouSpanA(X()) < Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 25.0) { return(true); } return(false); }
Медвежий сигнал возникает, когда Сенку спан А пересекает Сенку спан В сверху вниз и закрывается ниже неё. Это сигнализирует о сдвиге в сторону медвежьего облака. Это сигнал о долгосрочном изменении тренда, который также может служить дополнительным подтверждением тренда. Этот сигнал можно быть полезен свинг-трейдерам на трендовых рынках. Результаты тестирования приведены ниже:

Паттерн 2, судя по всему, хорошо себя показывает в форвард-тестировании. Как всегда, результаты основаны на ограниченном тестовом периоде, составляющем всего один год, поэтому читателям рекомендуется провести дополнительные тесты при изучении представленных здесь идей. Для паттерна 2 можно рассмотреть подтверждение в виде пересечения облаков на более крупных таймфреймах. Порог ADX 25 предназначен для отсеивания слабых сигналов и имеет ключевое значение. Стоп-лосс можно размещать ниже/выше облака для позиций на покупку/продажу. Такого типа облаков следует избегать, когда они тонкие.
Отскок цены у облака с подтверждением ADX и DI
Паттерн 3 учитывает движение цены вблизи облака Кумо. Бычий сигнал возникает, когда цена отскакивает от вершины Кумо, которая всегда соответствует Сенкоу-Спан А, при условии, что ADX не ниже 25, а положительный индекс направления превышает отрицательный. Реализация в MQL5:
//+------------------------------------------------------------------+ //| Check for Pattern 3. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_3(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 2) > Close(X() + 1) && Close(X() + 1) < Close(X()) && Close(X() + 2) > Ichimoku_SenkouSpanA(X() + 2) && Close(X()) > Ichimoku_SenkouSpanA(X()) && Close(X() + 1) <= Ichimoku_SenkouSpanA(X() + 1) && ADX_Plus(X()) > ADX_Minus(X()) && ADX(X()) >= 25.0 ) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 2) < Close(X() + 1) && Close(X() + 1) > Close(X()) && Close(X() + 2) < Ichimoku_SenkouSpanA(X() + 2) && Close(X()) < Ichimoku_SenkouSpanA(X()) && Close(X() + 1) >= Ichimoku_SenkouSpanA(X() + 1) && ADX_Plus(X()) < ADX_Minus(X()) && ADX(X()) >= 25.0 ) { return(true); } return(false); }
Медвежий сигнал возникает, когда цена отталкивается от нижней границы облака, которой, опять же, будет линия Сенку-Спан А, образующая U-образный разворот. Кроме того, значение ADX должно быть не менее 25, а отрицательный индекс направления должен быть выше положительного. Паттерн 3 — это мощный сигнал поддержки/сопротивления, который также подтверждает направление. Паттерн лучше всего подходит для рынков, находящихся в фазе перехода от флета к тренду, которые бывает сложно обнаружить, поэтому мы проводим несколько проверок с помощью фильтров, прежде чем сигнальный паттерн будет подтвержден. Результаты тестирования паттерна 3:

Паттерн, хоть и с трудом, но прошел форвард-тест. При работе с паттерном 3 всегда полезно подтвердить отскок с помощью свечных паттернов, таких как пин-бары. Положительный/отрицательный относительный тренд индекса должен совпадать с направлением тренда цен. Стоп-лосс можно разместить чуть ниже/выше линии Сенку-Спан Б.
Чику-Спан против Сенку-Спан A с подтверждением ADX
Паттерн 4 использует пятый буфер индикатора Ишимоку Чику-Спан. Бычий сигнал возникает, когда Чику-Спан считается выше Сенку-Спан А. Чику-Спан, как уже упоминалось во введении, обычно отстает на 26 периодов. С точки зрения программиста, это означает, что при обращении к буферу Чикоу встроенного индикатора Ишимоку нам необходимо вручную сдвигать показания этих значений на 26, иначе мы получим значения NaN. Таким образом, поскольку Чику находится выше Спан А, нам также необходимо, чтобы ADX был выше 25. Реализуем это в MQL5 следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 4. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_4(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Ichimoku_ChinkouSpan(X() + 26) > Ichimoku_SenkouSpanA(X()) && ADX(X()) >= 25.0 ) { return(true); } else if(T == POSITION_TYPE_SELL && Ichimoku_ChinkouSpan(X() + 26) < Ichimoku_SenkouSpanA(X()) && ADX(X()) >= 25.0 ) { return(true); } return(false); }
Медвежий сигнал возникает, когда Чику располагается ниже Сенку-Спан A, а ADX по-прежнему находится на уровне не ниже 25. В данном случае, однако, Спан А будет ниже Спан В, в отличие от бычьего сигнала, где он будет выше Спан В. Этот сигнал является запаздывающим подтверждением силы тренда и лучше всего подходит для подтверждения существующих трендов. Результаты форвард-теста:

Форвард-тест пройден. Вероятно, результаты даже лучше, чем у паттернов 3 и 2. Однако при его использовании подтверждение тренда может оказаться более эффективным, чем генерация сигналов на вход. Его также можно использовать в паре с другими сигналами Ишимоку, например, с облаком Кумо. Установка стоп-лосса может основываться на недавних точках колебаний. Для паттерна 4 подходит трендовый рынок, он плохо работает на не стабильном рынке. Для большей наглядности ниже представлен сигнал бычьего паттерна 4 на графике.

Отскок цены на уровне Тенкан-Сен с подтверждением от ADX и DI
Следующий паттерн основан на анализе ценового движения у Тенкан-Сен и облака Кумо, которые мы только что рассмотрели, используя паттерн, описанный выше. Бычий сигнал возникает, когда цена отскакивает от линии Тенкан-Сен, при этом ADX находится как минимум на уровне 25, а положительный индекс направления также находится выше отрицательного. В MQL5 паттерн реализуется следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 5. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_5(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 2) > Close(X() + 1) && Close(X() + 1) < Close(X()) && Close(X() + 2) > Ichimoku_TenkanSen(X() + 2) && Close(X()) > Ichimoku_TenkanSen(X()) && Close(X() + 1) <= Ichimoku_TenkanSen(X() + 1) && ADX_Plus(X()) > ADX_Minus(X()) && ADX(X()) >= 25.0 ) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 2) < Close(X() + 1) && Close(X() + 1) > Close(X()) && Close(X() + 2) < Ichimoku_TenkanSen(X() + 2) && Close(X()) < Ichimoku_TenkanSen(X()) && Close(X() + 1) >= Ichimoku_TenkanSen(X() + 1) && ADX_Plus(X()) < ADX_Minus(X()) && ADX(X()) >= 25.0 ) { return(true); } return(false); }
Медвежий паттерн возникает, когда цена отталкивается от линии Тенкан-Сен в качестве сопротивления, а уровень ADX также находится не ниже 25. В индексах направления отрицательный буфер должен быть больше положительного. Сигнал служит для подтверждения краткосрочного импульса. Он эффективен при использовании на трендовых рынках, особенно в ситуациях коррекции. Результаты форвард-тестирования:

Из всех протестированных нами на данный момент сигнальных паттернов с этой парой индикаторов, этот явно оказался неудачным. Форвард-тест не пройден. В качестве возможных улучшений можно было бы использовать подтверждение сигналов с помощью свечных графиков. Проверка выравнивания индексов направления уже выполняется, однако для подтверждения сигнала можно добавить пороговые значения. Также можно добавить стоп-лосс, поскольку мы проводили тестирование и без него. Он может располагаться ниже/выше уровня Тенкан-Сен для ордеров на покупку/продажу.
Пересечение ценой Киджун-Сен с подтверждением ADX и DI
Паттерн 6 включает в себя пересечения цен с Киджун-Сен. Бычий сигнал возникает, когда цена пересекает линию Киджун-Сен снизу вверх и закрывается выше нее. Кроме того, положительный индекс направления больше отрицательного, а ADX должен быть не менее 25. В MQL5 паттерн реализуется следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 6. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_6(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 1) < Ichimoku_KijunSen(X() + 1) && Close(X()) > Ichimoku_KijunSen(X()) && ADX_Plus(X()) > ADX_Minus(X()) && ADX(X()) >= 25.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 1) > Ichimoku_KijunSen(X() + 1) && Close(X()) < Ichimoku_KijunSen(X()) && ADX_Plus(X()) < ADX_Minus(X()) && ADX(X()) >= 25.0) { return(true); } return(false); }
Медвежий сигнал возникает, когда цена пересекает линию Киджун-Сен сверху вниз и закрывается ниже нее. Отрицательный индекс направления также будет больше положительного, при этом основной буфер ADX также будет равен как минимум 25. Это среднесрочный трендовый сигнал, подтверждаемый направлением движения. Идеальный рыночный контекст – устоявшиеся тренды. Тестирование паттерна 6 дает нам следующий отчет:

Этот паттерн, как и рассмотренный ранее, также не проходит форвард-тест, хотя у него и не такие слабые результаты. Возможные корректировки могут быть внесены, если мы обратим внимание на направления облака на более крупном таймфрейме. Кроме того, помимо порогового значения ADX и выравнивания направленного индекса, мы можем установить стоп-лосс ниже или выше уровня Киджун-Сен для длинных/коротких позиций. Паттерн также лучше подходит для трендовых рынков и его следует избегать на рынках с боковым движением.
Отскок цены на уровне Сенку-Спан B с подтверждением ADX
Паттерн 7 рассматривает движение цены на уровне Спан B. Бычий сигнал возникает, когда цена отскакивает от Сенку Спан B, где он выступает в качестве поддержки, а ADX находится на отметке 20 и продолжает расти. В этой ситуации Спан A будет выше B, что означает, что это ценовое отклонение происходит внутри облака Кумо. Реализация в MQL5:
//+------------------------------------------------------------------+ //| Check for Pattern 7. \ //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_7(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 2) > Close(X() + 1) && Close(X() + 1) < Close(X()) && Close(X() + 2) > Ichimoku_SenkouSpanB(X() + 2) && Close(X()) > Ichimoku_SenkouSpanB(X()) && Close(X() + 1) <= Ichimoku_SenkouSpanB(X() + 1) && Ichimoku_SenkouSpanA(X()) > Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 20.0 ) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 2) < Close(X() + 1) && Close(X() + 1) > Close(X()) && Close(X() + 2) < Ichimoku_SenkouSpanB(X() + 2) && Close(X()) < Ichimoku_SenkouSpanB(X()) && Close(X() + 1) >= Ichimoku_SenkouSpanB(X() + 1) && Ichimoku_SenkouSpanA(X()) < Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 20.0 ) { return(true); } return(false); }
Медвежий сигнал возникает, когда цена также отталкивается от Спан B, который выступает в качестве сопротивления, и при этом ADX снова находится на отметке 20 и продолжает расти. Как и в случае с бычьим сигналом, Спан B находится выше Спан A, что означает, что этот разворот цены также происходит в Кумо. Это сигнал на основе облака поддержки/сопротивления, подходящий для глубоких коррекций в тренде. Результаты форвард-теста:

Паттерн 7 показывает лучшие результаты по сравнению с двумя предыдущими. Тем не менее, его можно было улучшить. Направление можно подтвердить с помощью свечных паттернов. В данном случае стоп-лосс следует размещать строго ниже/выше Спан B для покупки/продажи. Паттерна следует избегать при работе с тонкими облаками или низкими значениями ADX.
Цена выше/ниже облака с подтверждением ADX
Предпоследний паттерн рассматривает ситуацию в более широком контексте, учитывая положение цены относительно облака Кумо. Бычий сигнал возникает, когда цена находится выше облака Кумо, то есть Спан A превышает Спан B, а ADX составляет не менее 25. Реализуем это в MQL5 следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 8. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_8(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 1) < Close(X()) && Close(X() + 1) > Ichimoku_SenkouSpanA(X() + 1) && Close(X()) > Ichimoku_SenkouSpanA(X()) && Ichimoku_SenkouSpanA(X()) > Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 25.0 ) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 1) > Close(X()) && Close(X() + 1) < Ichimoku_SenkouSpanA(X() + 1) && Close(X()) < Ichimoku_SenkouSpanA(X()) && Ichimoku_SenkouSpanA(X()) > Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 25.0 ) { return(true); } return(false); }
Медвежий сигнал возникает, когда цена находится ниже Кумо, при этом Спан B превышает Спан A. Основной буфер ADX должен указывать на установившийся сильный тренд, то есть его значение должно быть не менее 25. Паттерн представляет собой простой сигнал следования за трендом с подтверждением в виде ADX. Идеально подходит для сигналов, свидетельствующих о продолжении тренда. Отчет о результатах форвард-теста:

Паттерн 8, вероятно, демонстрирует наилучшие результаты среди всех протестированных в этой статье. Результаты на форвард-периоде оказались лучше, чем на этапе тестирования. Еще раз повторю, что обучение и тестирование проводятся в очень ограниченный период времени. Читателям следует это учитывать. Возможные улучшения паттерна 8 включают в себя учет фактического направления ценового тренда с использованием параметров дельты цены. Кроме того, стоп-лосс можно установить на расстоянии ниже или выше облака для длинных/коротких позиций. Для большей наглядности ниже показан бычий сигнал для паттерна 8:

Расположение Чику-Спан относительно цены и облака с подтверждением ADX
В нашем заключительном варианте мы возвращаемся к Чику, который мы рассматривали в паттерне 4, и сочетаем его с Кумо. Бычий сигнал возникает, когда Чику-Спан находится выше цены, а также выше Span A. Для подтверждения сильного тренда ADX должен быть не ниже 25. Реализуем это в MQL5 следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 9. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_9(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Ichimoku_ChinkouSpan(X() + 26) > Ichimoku_SenkouSpanA(X()) && //Ichimoku_ChinkouSpan(X() + 26) > Close(X()) && Ichimoku_SenkouSpanA(X()) > Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 25.0 ) { return(true); } else if(T == POSITION_TYPE_SELL && Ichimoku_ChinkouSpan(X() + 26) < Ichimoku_SenkouSpanA(X()) && //Ichimoku_ChinkouSpan(X() + 26) < Close(X()) && Ichimoku_SenkouSpanA(X()) < Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 25.0 ) { return(true); } return(false); }
Медвежий сигнал возникает, когда Чикоу находится ниже цены, а также ниже Спан A. Индикатор ADX должен быть не ниже 25. Этот несколько запаздывающий сигнал подтверждает направление и силу тренда. Наилучшие рыночные условия для паттерна 9 — это рынки с сильным трендом. Результаты тестирования:

Хотя этот паттерн в конечном итоге становится прибыльным на этапе форвард-тестирования, его результаты несколько хуже по сравнению с паттерном 8 и некоторыми другими, которые мы рассмотрели выше, такими как паттерн 4. Возможные способы улучшения могут включать в себя использование вторичного подтверждения с помощью других паттернов Ишимоку. При таком сигнальном паттерне также важно убедиться, что облако поддерживает выбранное направление сделки. Установка стоп-лосса может основываться на недавнем движении цены, и, как уже подчеркивалось, это не является паттерном для бокового или нестабильного рынка.
Заключение
Мы представили еще одну пару индикаторов: индикатор Ишимоку и ADX Wilder. На основе ограниченного двухлетнего периода тестирования эта комбинация позволила нам выявить семь потенциально прибыльных сигнальных паттернов. "Потенциально", потому что используемое нами тестовое окно очень маленькое. Как всегда, статья носит исключительно исследовательский характер. В следующей статье мы попытаемся проанализировать три сигнальных паттерна, которые испытывали трудности с форвард-тестом, и выяснить, может ли машинное обучение улучшить их результаты.
| файл | описание |
|---|---|
| WZ-73.mq5 | Созданный Мастером советник, в заголовок которого включены использованные в сборке файлы |
| SignalWZ_73.mqh | Файл класса пользовательского сигнала, используемый Мастером MQL5 |
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/18723
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Неопределенность как модель (Часть 2): Зависимости случайных величин — от корреляции до копул
Преодоление ограничений машинного обучения (Часть 7): Автоматический выбор стратегии
Преодоление ограничений машинного обучения (Часть 8): Непараметрический выбор стратегии
Оптимизатор конкурирующего роя — Competitive Swarm Optimizer (CSO)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования