Торговые инструменты для трейдеров

Свечные паттерны в MQL5: как запрограммировать поиск разворотных сигналов

,

На чтение потребуется

5 минут
Обложка статьи: Пин-бар и поглощение: код на MQL5

Каждый трейдер хотя бы раз вглядывался в график в поисках пин-бара или поглощения — и тратил минуты на субъективную оценку того, что можно формализовать тремя строками кода. Ручной перебор свечных комбинаций отнимает часы, а визуальное чтение паттернов остаётся делом вкуса, а не точной науки. В этой статье разберём, как запрограммировать на MQL5 советника, который сам распознаёт разворотные сигналы и не пропускает сделки из-за усталости.

Почему ручной поиск свечных паттернов — узкое место трейдера

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

Ключевая проблема ручного подхода — субъективность. Два трейдера, глядя на один и тот же график, могут разойтись в оценке: один увидит поглощение, другой — обычную коррекцию. Один посчитает тень пин-бара достаточной, другой — нет. Советник на MQL5 лишён этой неопределённости: он применяет одни и те же критерии к каждому бару, не устаёт и не отвлекается. Формализация паттернов — первый шаг к тому, чтобы робот брал на себя рутину, а трейдер сосредоточился на действительно важных решениях.

Какие разворотные сигналы стоит автоматизировать в первую очередь

Не все свечные комбинации одинаково пригодны для автоматизации. Три паттерна — пин-бар, поглощение и дожи — заслуживают внимания в первую очередь, потому что их геометрия надёжно формализуется в коде через сравнение тел и теней соседних свечей. Пин-бар определяется коротким телом и длинной нижней тенью при закрытии выше открытия; поглощение — полным перекрытием тела предыдущей свечи; дожи — почти отсутствующим телом при любых тенях. Все три условия записываются несколькими строками на MQL5 без внешних библиотек.

Без автоматизации трейдер пропускает значительную долю разворотных сигналов из-за усталости и многозадачности. Советник, напротив, работает круглосуточно и применяет одинаковые критерии к каждому бару на всех инструментах одновременно. Один раз написанный детектор пин-бара проверяет десятки пар и таймфреймов за секунды — то, на что при ручном просмотре ушли бы часы. После того как базовые паттерны запрограммированы, их можно комбинировать с фильтрами тренда и флета, чтобы отсеивать ложные срабатывания в боковике.

Структура советника на MQL5 для распознавания свечных комбинаций

Любой советник для распознавания свечных комбинаций строится по одному шаблону: получить данные ценовых баров, вычислить геометрию каждой свечи (тело, верхнюю и нижнюю тени) и последовательно сравнить соседние бары на соответствие условиям паттерна. В MQL5 для этого достаточно встроенных функций CopyRates и iClose — никаких внешних библиотек не требуется.

Шестерня и свеча — метафора автоматизированного распознавания свечных паттернов в коде MQL5, описанного в разделе о структуре советника.

Рассмотрим схематичный пример. Функция CheckEngulfing принимает массив структур MqlRates и индекс проверяемого бара. Тело свечи — это разница между close и open; полный диапазон — разница между high и low. Условие бычьего поглощения: тело текущей свечи полностью перекрывает тело предыдущей, а закрытие выше открытия.

bool CheckEngulfing(MqlRates &rates[], int i)
{
   double body1 = fabs(rates[i-1].close - rates[i-1].open);
   double body2 = fabs(rates[i].close - rates[i].open);
   if(body2 > body1 &&
      rates[i].close > rates[i].open &&
      rates[i-1].close < rates[i-1].open)
      return true;
   return false;
}

Аналогично проверяется пин-бар: короткое тело (например, не более 30% от всего диапазона) и нижняя тень, в два-три раза превышающая тело. Тот же каркас используется для дожи — достаточно заменить условие на проверку, что тело не превышает заданного процента от диапазона свечи. Такой модульный подход позволяет добавлять новые паттерны без переписывания основного цикла советника.

Пример кода: поиск пин-бара и поглощения

Теперь соберём две функции, которые можно сразу вставить в советник. Первая — детектор бычьего пин-бара. Пин-бар — это свеча с коротким телом и длинной нижней тенью, которая сигнализирует о том, что продавцы не смогли удержать цену внизу. Условие: тело не превышает заданного процента от всего диапазона свечи, а нижняя тень в несколько раз длиннее тела.

bool CheckPinBar(MqlRates &rates[], int i,
                 double bodyPct = 0.3,
                 double shadowMult = 2.0)
{
   double range = rates[i].high - rates[i].low;
   double body = fabs(rates[i].close - rates[i].open);
   double lowerShadow = rates[i].open < rates[i].close ?
      rates[i].open - rates[i].low :
      rates[i].close - rates[i].low;
   if(range == 0) return false;
   if(body / range > bodyPct) return false;
   if(lowerShadow < body * shadowMult) return false;
   return true;
}

Вторая функция — детектор поглощения. Бычье поглощение возникает, когда тело текущей свечи полностью перекрывает тело предыдущей, а закрытие выше открытия. Медвежье — наоборот: тело перекрывает сверху вниз, закрытие ниже открытия.

bool CheckBullishEngulfing(MqlRates &rates[], int i)
{
   double body1 = fabs(rates[i-1].close - rates[i-1].open);
   double body2 = fabs(rates[i].close - rates[i].open);
   if(body2 > body1 &&
      rates[i].close > rates[i].open &&
      rates[i-1].close < rates[i-1].open)
      return true;
   return false;
}

Оба фрагмента используют только встроенные типы MQL5 — MqlRates и fabs. Параметры bodyPct и shadowMult в CheckPinBar можно вынести во входные переменные советника и подбирать под конкретный инструмент и таймфрейм.

Как обучить советника отличать разворот от флета

Лупа и свеча — метафора ручного визуального поиска свечных паттернов, описанного в разделе о субъективности и трудозатратах ручного анализа.

Детектор разворота, который срабатывает на каждом втором баре, бесполезен: в боковике даже классический пин-бар может оказаться случайным шумом. Чтобы отсечь ложные сигналы, добавьте в советник фильтр по положению закрытия свечи относительно её открытия. Логика проста: если тело свечи составляет менее 30% всего диапазона High–Low, а закрытие находится в верхней или нижней четверти — паттерн считается разворотным. В противном случае советник пропускает сигнал как флетовый.

bool IsReversal(MqlRates &rates[], int i)
{
   double range = rates[i].high - rates[i].low;
   double body = fabs(rates[i].close - rates[i].open);
   double quarter = range * 0.25;
   if(range == 0) return false;
   if(body / range > 0.3) return false;
   if(rates[i].close < rates[i].low + quarter ||
      rates[i].close > rates[i].high - quarter)
      return true;
   return false;
}

Настройка порогов чувствительности — компромисс между пропуском сигналов и числом ложных входов. Жёсткие фильтры (тело < 20%, закрытие в крайних 10% диапазона) дают меньше сделок, но каждая — с высокой вероятностью разворота. Мягкие настройки увеличивают частоту сигналов, но требуют дополнительного подтверждения, например от индикатора флета. Вынесите коэффициенты в input-параметры советника, чтобы подбирать их под конкретный инструмент и таймфрейм без перекомпиляции кода.

Что дальше: от паттерна к торговой стратегии

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

Готовый код легко адаптировать под свой таймфрейм и инструмент — достаточно изменить параметр PERIOD_CURRENT и символ в вызове CopyRates, например CopyRates(Symbol(), PERIOD_CURRENT, 0, 10, rates). Для подтверждения разворота перед сделкой добавьте проверку трендового индикатора, например индикатора флета: если рынок в боковике — сигнал пропускается, если в тренде — паттерн отрабатывает с большей вероятностью. Дальнейшее развитие — подключить AI-агентов в MetaTrader 5 для адаптивного подбора порогов чувствительности под текущее состояние рынка.

Материалы по теме

Поделись или сохрани ссылку

Автор статьи

Новые статьи на сайте

Свежие материалы о трейдинге и торговых инструментах.

Все статьи

Комментарии

Добавить комментарий

0

Вы добавили товары в корзину?

Мы хотим вам предложить 3% скидку за сохранение вашей корзины. Прислать вам купон на скидку? Укажите рабочий email для отправки.