Каждый трейдер хотя бы раз вглядывался в график в поисках пин-бара или поглощения — и тратил минуты на субъективную оценку того, что можно формализовать тремя строками кода. Ручной перебор свечных комбинаций отнимает часы, а визуальное чтение паттернов остаётся делом вкуса, а не точной науки. В этой статье разберём, как запрограммировать на MQL5 советника, который сам распознаёт разворотные сигналы и не пропускает сделки из-за усталости.
Почему ручной поиск свечных паттернов — узкое место трейдера
Поиск разворотных свечных паттернов — пин-баров, поглощения, дожи — сегодня чаще всего выглядит так: трейдер открывает график, визуально сканирует бары, мысленно сравнивает тела и тени соседних свечей и принимает решение. На один таймфрейм уходят минуты, а при мультиэкранном мониторинге — часы, которые можно было бы потратить на анализ фундаментальных факторов или оптимизацию стратегии.
Ключевая проблема ручного подхода — субъективность. Два трейдера, глядя на один и тот же график, могут разойтись в оценке: один увидит поглощение, другой — обычную коррекцию. Один посчитает тень пин-бара достаточной, другой — нет. Советник на MQL5 лишён этой неопределённости: он применяет одни и те же критерии к каждому бару, не устаёт и не отвлекается. Формализация паттернов — первый шаг к тому, чтобы робот брал на себя рутину, а трейдер сосредоточился на действительно важных решениях.
Какие разворотные сигналы стоит автоматизировать в первую очередь
Не все свечные комбинации одинаково пригодны для автоматизации. Три паттерна — пин-бар, поглощение и дожи — заслуживают внимания в первую очередь, потому что их геометрия надёжно формализуется в коде через сравнение тел и теней соседних свечей. Пин-бар определяется коротким телом и длинной нижней тенью при закрытии выше открытия; поглощение — полным перекрытием тела предыдущей свечи; дожи — почти отсутствующим телом при любых тенях. Все три условия записываются несколькими строками на MQL5 без внешних библиотек.
Без автоматизации трейдер пропускает значительную долю разворотных сигналов из-за усталости и многозадачности. Советник, напротив, работает круглосуточно и применяет одинаковые критерии к каждому бару на всех инструментах одновременно. Один раз написанный детектор пин-бара проверяет десятки пар и таймфреймов за секунды — то, на что при ручном просмотре ушли бы часы. После того как базовые паттерны запрограммированы, их можно комбинировать с фильтрами тренда и флета, чтобы отсеивать ложные срабатывания в боковике.
Структура советника на MQL5 для распознавания свечных комбинаций
Любой советник для распознавания свечных комбинаций строится по одному шаблону: получить данные ценовых баров, вычислить геометрию каждой свечи (тело, верхнюю и нижнюю тени) и последовательно сравнить соседние бары на соответствие условиям паттерна. В MQL5 для этого достаточно встроенных функций CopyRates и iClose — никаких внешних библиотек не требуется.

Рассмотрим схематичный пример. Функция 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 для адаптивного подбора порогов чувствительности под текущее состояние рынка.










Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.