Разработка инструментария для анализа Price Action (Часть 51): Инновационная технология поиска свечных паттернов на графике
Введение
Свечные паттерны остаются одним из самых устойчивых и визуально интуитивных инструментов технического анализа. Они отражают продолжающуюся борьбу между покупателями и продавцами и тем самым ясно показывают рыночные настроения и импульс. И трейдеры, и разработчики продолжают возвращаться к этой теме, потому что свечи во многом являются настоящими следами ценового движения. Они отражают предыдущее поведение рынка и нередко намекают, куда он может пойти дальше. Каждая свечная формация рассказывает историю о том, что произошло на определенном ценовом уровне в определенный момент времени. Эти формации десятилетиями изучали, называли и классифицировали, и каждая из них имеет собственное прогностическое значение. Хорошо известный пример – паттерн бычьего поглощения, который часто рассматривается как ранний признак возобновления силы покупателей.
Продолжающийся интерес к анализу свечей в MQL5-разработке обусловлен практическим опытом работы на рынке. Чем больше наблюдаешь за поведением цены в реальном времени, тем больше возникает сложностей – и вместе с ними возможностей создавать более продуманные решения. MQL5 оказывается исключительно богатой средой для такого творчества: его гибкость позволяет превращать технические идеи в полноценные рабочие инструменты, способные автоматически и наглядно анализировать графики.
В этой статье представлен советник CandlePatternSearch.mq5, предназначенный для расширения традиционного анализа свечных формаций за счет автоматизации и интерактивности. Система сканирует широкий набор распространенных паттернов и позволяет пользователю искать нужные прямо на графике. Обнаруженные формации визуально отмечаются, что упрощает анализ того, как каждый паттерн влиял на цену на разных инструментах и таймфреймах. Со временем эта возможность помогает трейдерам распознавать повторяющиеся модели поведения рынка и увереннее оценивать вероятные исходы при появлении определенных паттернов.
В следующих разделах мы рассмотрим обзор возможностей, техническую архитектуру, тестирование и результаты, а затем заключение. В оглавлении ниже приведена структура статьи, после чего каждый раздел разбирается подробнее.
Обзор возможностей
Советник CandlePatternSearch.mq5 разработан как полноценная система для обнаружения, отображения и отслеживания классических свечных паттернов прямо на графиках MetaTrader 5. Он сочетает подробные алгоритмы распознавания паттернов с отзывчивой панелью управления, что ускоряет визуальный анализ и помогает принимать более обоснованные решения.
Ключевые возможности инструмента:
1. Широкая библиотека паттернов
Советник поддерживает широкий набор популярных одно-, двух- и трехсвечных формаций, включая доджи, молот, паттерны бычьего и медвежьего поглощения, утреннюю звезду, вечернюю звезду, три белых солдата, три черные вороны и другие. Это позволяет аналитикам охватывать разные сценарии ценового движения без необходимости использовать отдельный индикатор для каждого из них.
2. Интерактивная панель управления на графике
Встроенный графический интерфейс дает прямой доступ к основным функциям без переходов по меню MetaTrader 5. Трейдеры могут искать конкретный паттерн по названию, сканировать все поддерживаемые паттерны в пределах выбранного окна проверки, очищать отметки и включать или отключать мониторинг в реальном времени – все это через отдельные кнопки и поля ввода.
3. Возможность поиска паттернов
Вместо ручной прокрутки графика в поисках формаций инструмент может находить и выделять только те паттерны, которые соответствуют заданным критериям поиска. Такой целевой подход хорошо подходит для тестирования стратегий и анализа исторической эффективности конкретного свечного сетапа.
4. Функция полного сканирования
Режим полного сканирования анализирует все бары в пределах заданного окна проверки, отмечая каждое совпадение с библиотекой паттернов советника. Это особенно полезно для более широких статистических исследований и общего обзора рыночных условий.
5. Режим мониторинга в реальном времени
В этом режиме система непрерывно отслеживает каждый новый бар по мере его формирования, проверяя наличие новых паттернов в последних свечах. Система мониторинга использует таймаут для каждого типа паттерна, чтобы избежать повторяющихся алертов по одному и тому же сетапу.
6. Многоканальная система алертов
Обнаруженные паттерны могут запускать всплывающие окна, звуковые уведомления, а также отправлять push-сообщения в мобильное приложение MetaTrader 5 и электронные письма – все это настраивается под ваш торговый процесс.
7. Визуальное выделение паттернов
Каждый найденный паттерн отмечается на графике цветным прямоугольником, охватывающим всю формацию, что позволяет быстро его распознавать и визуально проводить тестирование на исторических данных, не перекрывая стандартные элементы графика.
8. Настраиваемые параметры
Все рабочие параметры – от окна проверки и поведения алертов до цвета подсветки и максимального числа отображаемых паттернов – можно настроить под личные торговые предпочтения или для повышения читаемости графика.

Объединяя все эти возможности, советник CandlePatternSearch.mq5 – это не просто статичный индикатор. Это активно реагирующий инструмент, рассчитанный на работу в реальных рыночных условиях, на любом таймфрейме и любой валютной паре, с адаптацией как к дискреционной торговле, так и к системным подходам.
Техническая архитектура
Архитектура советника включает несколько ключевых компонентов, которые обеспечивают быстрое сканирование, обнаружение паттернов, алерты и мониторинг в реальном времени. Каждый элемент его архитектуры решает свою задачу – от управления входными параметрами и анализа свечных данных до отрисовки графических элементов управления и отправки уведомлений.
Архитектуру можно условно разделить на следующие функциональные области:
- Входные параметры и настройка
- Поддерживаемые паттерны и логика обнаружения
- Мониторинг в реальном времени
- Механизм алертов
- Графический интерфейс (GUI)
- Выделение паттернов на графике
- Поиск и полное сканирование паттернов
Каждый из них будет подробно рассмотрен ниже.
1. Входные параметры
Одна из сильных сторон советника – его адаптивность. Все основные аспекты работы – от области сканирования до визуального стиля и правил алертов – задаются через легко настраиваемые входные параметры. Эти параметры позволяют трейдерам точно настраивать инструмент по параметрам производительности, частоты сигналов и наглядности.
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
| LookbackPeriod | int | 1000 | Определяет, сколько исторических баров анализировать при первоначальном сканировании. Более высокие значения охватывают больше данных, но могут немного увеличить время вычислений. |
| PatternColor | color | clrDodgerBlue | Определяет цвет подсветки, используемый при выделении обнаруженных свечных формаций на графике. |
| MaxDisplayPatterns | int | 100 | Ограничивает число одновременно отображаемых паттернов, чтобы сохранять читаемость графика и производительность. |
| EnableAlerts | bool | true | Общий переключатель для всех каналов алертов. При отключении никакие уведомления и звуковые сигналы не срабатывают. |
| SoundAlerts | bool | true | Включает или отключает звуковой сигнал при обнаружении нового паттерна. |
| PushNotifications | bool | false | Отправляет сообщения об обнаружении в мобильное приложение MetaTrader 5 для удаленного мониторинга. Требует настройки push-уведомлений в параметрах терминала. |
| EmailAlerts | bool | false | Отправляет сведения об обнаруженном паттерне на настроенный адрес электронной почты через почтовые настройки терминала. |
| AlertCooldown | int | 60 | Интервал в секундах, через который один и тот же паттерн может снова вызвать алерт, предотвращая повторы на активном рынке. |
Благодаря сочетанию этих настроек советник можно адаптировать и под легкие, и под интенсивные сценарии работы. Например, трейдер, проводящий тестирование на исторических данных, может увеличить окно проверки, отключив алерты в реальном времени, тогда как дейтрейдер может задать более короткий период сканирования и включить push-уведомления, чтобы не упускать возможности в реальном времени. Внутри все параметры обрабатываются через стандартные объявления input, благодаря чему изменения сразу появляются во вкладке Inputs в MetaTrader 5. Такая схема позволяет сразу менять настройки без редактирования и повторной компиляции исходного кода, что особенно удобно при переносе параметров между графиками и инструментами.
//+------------------------------------------------------------------+ //| Input Parameters | //+------------------------------------------------------------------+ input int LookbackPeriod = 1000; // Number of bars to scan input color PatternColor = clrDodgerBlue;// Highlight colour for detected patterns input int MaxDisplayPatterns = 100; // Limit to avoid chart clutter // Alert settings input bool EnableAlerts = true; // Master switch for all alerts input bool SoundAlerts = true; // Play sound for new detection input bool PushNotifications = false; // Send push message to MT5 mobile input bool EmailAlerts = false; // Send detection details via email input int AlertCooldown = 60; // Seconds before same pattern alerts again
Далее мы перейдем к разделу Поддерживаемые паттерны и логика обнаружения, где объясняются внутренние алгоритмы, используемые для выявления свечных формаций по историческим ценовым данным.
2. Поддерживаемые паттерны и логика обнаружения
В этом разделе раскрывается ключевая способность инструмента – корректно распознавать классические свечные формации. Система обнаружения советника построена на структурированной библиотеке паттернов, каждому из которых соответствует отдельная функция, анализирующая заданное число баров.
Паттерны сгруппированы по количеству свечей в их составе:
Паттерны из одной свечи
Они определяются по свойствам одного бара, таким как размер тела, длина тени и относительное положение в пределах его диапазона.
- Доджи: Характеризуется тем, что цена открытия и цена закрытия находятся очень близко друг к другу, что указывает на неопределенность на рынке.
- Молот и перевернутый молот: Небольшие тела у максимума или минимума свечи с длинными тенями, указывающими на возможный разворот.
- Повешенный: По форме тела похож на молот, но появляется после восходящего тренда и может указывать на давление продавцов.
- Падающая звезда: Небольшое тело у минимума с длинной верхней тенью, указывающее на неприятие рынком более высоких ценовых уровней.
- Волчок: Умеренные тени и небольшое тело, часто отражающие рыночное равновесие.
- Марубозу: Свеча с короткими или отсутствующими тенями, указывающая на сильный направленный импульс.
Паттерны из двух свечей
Они основаны на взаимодействии между соседними барами, например на поглощении тела одного бара другим.
- Бычье поглощение / медвежье поглощение: Свеча, тело которой поглощает тело предыдущей свечи, указывая на возможную смену направления.
- Просвет в облаках / завеса из темных облаков: Положение второй свечи частично разворачивает движение предыдущей, часто сигнализируя о смене тренда.
- Бычий харами / медвежий харами: Тело первой свечи содержит тело второй, что указывает на возможную потерю импульса.
- Пинцетная вершина / пинцетное дно: Совпадающие максимумы или минимумы на соседних барах, указывающие на сильный отбой от уровней сопротивления или поддержки.
Эти формации используют три последовательных бара и часто отражают устойчивую смену рыночных настроений.
- Утренняя звезда / вечерняя звезда: Сильная свеча, за которой следует маленькая нерешительная свеча, а затем сильная свеча в противоположном направлении.
- Три белых солдата: Три последовательные бычьи свечи, обычно указывающие на сильный восходящий импульс.
- Три черных вороны: Три последовательные медвежьи свечи, часто указывающие на сильное давление продавцов.
Алгоритмический подход к обнаружению паттернов
Советник использует следующие общие шаги, чтобы определить, присутствует ли паттерн по заданному индексу в исторических данных (массив rates).
1. Получение данных. С помощью CopyRates сегмент исторических цен (цена открытия, цена максимума, цена минимума, цена закрытия, объем) загружается в массив MqlRates.
2. Проверка количества свечей. Каждая функция обнаружения сначала проверяет, достаточно ли баров для анализа (например, паттерн из трех свечей не будет проверяться, если после выбранного индекса доступно менее трех свечей).
3. Проверка соотношений и относительного положения.
Расчеты включают:
- размер тела относительно общего диапазона свечи;
- длину верхней и нижней тени;
- положение свечи относительно предыдущих баров;
- соотношение цен открытия и закрытия.
4. Подтверждение совпадения с паттерном. Если все логические условия соответствуют заданному определению (например, для доджи размер тела < заданного малого порога), функция возвращает строку с названием паттерна.
5. Отметка и продолжение. После обнаружения советник вызывает функцию разметки паттерна, чтобы визуально выделить формацию на графике и зафиксировать ее в списке результатов.

Такой подход обеспечивает изоляцию правил каждого паттерна в отдельной функции, поэтому библиотеку легко расширять. Чтобы добавить новый паттерн, достаточно написать функцию распознавания и обновить массивы сканирования – без серьезной перестройки кода.
//+------------------------------------------------------------------+ //| Detect Bullish Engulfing pattern | //+------------------------------------------------------------------+ bool isBullishEngulfing(int index, const MqlRates &rates[]) { // Make sure we have at least 2 bars from 'index' if(index+1 >= ArraySize(rates)) return false; double prevOpen = rates[index+1].open; double prevClose = rates[index+1].close; double currOpen = rates[index].open; double currClose = rates[index].close; // Check if current candle bullish and fully engulfs previous body if(currClose > currOpen && // Current bullish prevClose < prevOpen && // Previous bearish currOpen < prevClose && // Current's open below previous close currClose > prevOpen) // Current's close above previous open { return true; } return false; } //+------------------------------------------------------------------+ //| Detect Doji pattern | //+------------------------------------------------------------------+ bool isDoji(int index, const MqlRates &rates[]) { if(index >= ArraySize(rates)) return false; double open = rates[index].open; double close = rates[index].close; double high = rates[index].high; double low = rates[index].low; double body = MathAbs(close - open); double range = high - low; // Define the ratio threshold for Doji double dojiRatio = 0.1; // 10% of total range if(body <= (range * dojiRatio)) return true; return false; }
3. Логика мониторинга в реальном времени
Одна из ключевых особенностей советника CandlePatternSearch.mq5 – способность работать в режиме реального времени. Вместо того чтобы ограничиваться сканированием исторических данных, советник активно отслеживает формирование каждого нового бара и при появлении нового закрытого бара проверяет последние свечи на наличие поддерживаемых паттернов. Эта функция особенно ценна для трейдеров, которые хотят мгновенно реагировать на новые рыночные сигналы, а не полагаться только на данные, проанализированные задним числом. Через обработчик событий OnTick система проверяет условия при каждом обновлении цены и одновременно отслеживает таймауты алертов, чтобы избежать их чрезмерного повторения.
Схема работы
- Точка запуска. Каждый рыночный тик запускает процедуру мониторинга через обработчик события OnTick.
- Проверка закрытия бара. Советник проверяет, завершился ли текущий бар (индекс 0) и начался ли новый бар. Это предотвращает ложные срабатывания на еще не сформированных свечах.
- Сканирование паттернов. Последние свечи – обычно 3-5 последних баров – проверяются всеми функциями обнаружения из библиотеки.
- Соблюдение таймаута. Если тот же паттерн был обнаружен недавно, таймаут предотвращает повторный алерт в течение заданного интервала AlertCooldown.
- Отметка и алерт. Подтвержденные паттерны визуально отмечаются на графике, после чего срабатывают настроенные каналы уведомлений (звук, всплывающее окно, push, электронные письма).
Преимущества
- Немедленная обратная связь. Трейдеры узнают о новых сетапах сразу после их появления.
- Снижение нагрузки при сканировании. В режиме реального времени анализируются только последние свечи, что снижает нагрузку на процессор по сравнению со сканированием сотен исторических баров.
- Адаптивная реакция. Алерты можно включать и отключать без перезапуска советника, что дает больше контроля в периоды высокой волатильности.
// Store last alert times for each pattern datetime lastAlertTime[50]; // assuming 50 possible patterns indexed //+------------------------------------------------------------------+ //| Tick handler for real-time monitoring | //+------------------------------------------------------------------+ void OnTick() { static datetime lastBarTime = 0; // Get latest bar time datetime currentBarTime = iTime(_Symbol, _Period, 0); // Check if a new bar has formed if(currentBarTime != lastBarTime) { lastBarTime = currentBarTime; // Copy recent candle data (last 5 bars) MqlRates rates[]; if(CopyRates(_Symbol, _Period, 0, 5, rates) < 5) return; // Scan patterns for last completed candle (index 1) for(int p = 0; p < totalPatterns; p++) { bool detected = patterns[p].function(1, rates); // Check cooldown before alerting if(detected && (TimeCurrent() - lastAlertTime[p] > AlertCooldown)) { markPatternOnChart(p, 1, rates); sendAlerts(p, rates[1]); lastAlertTime[p] = TimeCurrent(); } } } }
Мы отслеживаем lastBarTime, чтобы сканирование выполнялось только после завершения новой свечи. Советник копирует 5 последних баров, а затем запускает каждую функцию обнаружения на последнем закрытом баре (индекс 1). Массив lastAlertTime[] хранит время последнего обнаружения каждого паттерна, чтобы избежать спама алертов во время волатильных движений рынка.
4. Механизм алертов
Система алертов предназначена для того, чтобы уведомлять трейдеров сразу после подтверждения выбранного свечного паттерна – как при историческом сканировании, так и в режиме реального времени. Ее гибкость заключается в поддержке нескольких каналов уведомлений, которые могут работать по отдельности или совместно, в зависимости от предпочтений трейдера.
Поддерживаемые типы алертов
- Всплывающее уведомление. Простое сообщение в терминале, отображаемое через Alert(), – хороший вариант для быстрого оповещения при активном наблюдении за графиками.
- Звуковой алерт. При обнаружении паттерна воспроизводится звуковой файл; это удобно для трейдеров, которые отходят от экрана, но остаются рядом с рабочим местом.
- Push-уведомление. Отправляет сообщение в мобильное приложение MetaTrader 5, позволяя удаленно отслеживать сетапы в реальном времени. Для этого требуется настройка push-уведомлений в параметрах терминала MetaTrader 5.
- Уведомление по электронной почте. Отправляет форматированное электронное письмо с указанием символа, таймфрейма, названия паттерна и времени обнаружения. Это полезно для трейдеров, которые запускают MetaTrader 5 на VPS или надолго отходят от платформы.

Внутренний механизм работы
После обнаружения паттерна советник инициирует алерт из вызова markPatternOnChart или соответствующей функции обнаружения. Советник проверяет глобальный флаг EnableAlerts. Для каждого включенного канала вызывается соответствующая функция – например:
- Alert() – для всплывающих уведомлений;
- PlaySound() – для звука;
- SendNotification() – для push-уведомлений;
- SendMail() – для электронной почты.
Для каждого паттерна применяется свой таймаут, чтобы избежать повторяющихся алертов.
//+------------------------------------------------------------------+ //| Send Alerts for a detected pattern | //+------------------------------------------------------------------+ void sendAlerts(int patternIndex, MqlRates candle) { // Retrieve pattern name string name = patterns[patternIndex].name; // Build common message string msg = StringFormat("Pattern Detected: %s on %s M%d\nOpen: %.5f | Close: %.5f | Time: %s", name, _Symbol, _Period, candle.open, candle.close, TimeToString(candle.time, TIME_DATE|TIME_MINUTES)); // Chart pop-up if(EnableAlerts) Alert(msg); // Sound alert if(SoundAlerts) PlaySound("alert.wav"); // Make sure file exists in Sounds folder // Push notification if(PushNotifications) SendNotification(msg); // Email alert if(EmailAlerts) SendMail("CandlePattern Alert", msg); }
Все каналы используют один и тот же основной текст сообщения (msg), что обеспечивает единообразие уведомлений. Перед выполнением функция проверяет булев параметр каждого канала. Чтобы добавить новые каналы (например, запись в файл или отправку во внешний API), достаточно еще одного условного блока. Следующий логический шаг в технической архитектуре – графический интерфейс (GUI), где будет описана интерактивная панель управления на графике и приведен еще один полезный фрагмент, показывающий, как обрабатываются клики по кнопкам.
5. Реализация графического пользовательского интерфейса (GUI)
Одна из особенностей, которая делает советник CandlePatternSearch.mq5 особенно практичным, – это встроенная панель управления на графике. Вместо того чтобы каждый раз менять входные параметры через окно свойств MetaTrader 5, советник предоставляет интерактивный интерфейс, где такие действия, как запуск поиска, сканирование всех паттернов, очистка выделения или переключение на мониторинг в реальном времени, выполняются мгновенно одним кликом мыши. Графический интерфейс использует объекты графика MetaTrader 5, прежде всего OBJ_BUTTON, OBJ_LABEL, а также простые фигуры для компоновки, поэтому остается легковесным и не требует дополнительных библиотек. Каждая кнопка связана с обработчиком события OnChartEvent, который интерпретирует клики и вызывает нужную функцию советника.
Ключевые элементы интерфейса
- Поле поиска. Редактируемое поле ввода, в котором пользователь может ввести название паттерна, чтобы найти именно его.
- Кнопка поиска. Запускает сканирование истории по введенному паттерну и выделяет все найденные совпадения.
- Кнопка "Scan All". Запускает полное сканирование всех паттернов в пределах окна проверки.
- Кнопка очистки. Удаляет все выделения с графика, очищая рабочую область.
- Переключатель мониторинга. Включает или отключает режим мониторинга в реальном времени.
- Строка состояния. Небольшая метка, показывающая текущий режим, количество найденных паттернов или последний обнаруженный паттерн.
Преимущества
- Прямое управление без перезапуска советника. Изменения вступают в силу мгновенно.
- Быстрый рабочий процесс. Снижает лишние действия по сравнению с переходом между вкладками входных параметров.
- Визуальная обратная связь. Пользователь сразу видит подтверждение через элементы графика.
Создание кнопок GUI
//+------------------------------------------------------------------+ //| Create basic GUI buttons on initialization | //+------------------------------------------------------------------+ void createGUI() { // Search Button ObjectCreate(0, "btnSearch", OBJ_BUTTON, 0, 0, 0); ObjectSetInteger(0, "btnSearch", OBJPROP_XDISTANCE, 20); ObjectSetInteger(0, "btnSearch", OBJPROP_YDISTANCE, 20); ObjectSetInteger(0, "btnSearch", OBJPROP_XSIZE, 80); ObjectSetInteger(0, "btnSearch", OBJPROP_YSIZE, 20); ObjectSetString(0, "btnSearch", OBJPROP_TEXT, "Search"); // Scan All Button ObjectCreate(0, "btnScanAll", OBJ_BUTTON, 0, 0, 0); ObjectSetInteger(0, "btnScanAll", OBJPROP_XDISTANCE, 110); ObjectSetInteger(0, "btnScanAll", OBJPROP_YDISTANCE, 20); ObjectSetInteger(0, "btnScanAll", OBJPROP_XSIZE, 80); ObjectSetInteger(0, "btnScanAll", OBJPROP_YSIZE, 20); ObjectSetString(0, "btnScanAll", OBJPROP_TEXT, "Scan All"); // Clear Button ObjectCreate(0, "btnClear", OBJ_BUTTON, 0, 0, 0); ObjectSetInteger(0, "btnClear", OBJPROP_XDISTANCE, 200); ObjectSetInteger(0, "btnClear", OBJPROP_YDISTANCE, 20); ObjectSetInteger(0, "btnClear", OBJPROP_XSIZE, 80); ObjectSetInteger(0, "btnClear", OBJPROP_YSIZE, 20); ObjectSetString(0, "btnClear", OBJPROP_TEXT, "Clear"); }
Обработка кликов по кнопкам
//+------------------------------------------------------------------+ //| Handle chart events such as button clicks | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { // Check if the event is an object click if(id == CHARTEVENT_OBJECT_CLICK) { if(sparam == "btnSearch") { searchPattern(patternNameInput); // custom function } else if(sparam == "btnScanAll") { scanAllPatterns(); } else if(sparam == "btnClear") { clearHighlights(); } } }
- Функция createGUI() создает кнопки, задавая их размер, положение и подпись.
- Функция OnChartEvent() отслеживает клики – параметр sparam содержит имя объекта.
Каждое имя кнопки соответствует определенной функции советника (поиск, сканирование, очистка). Следующий подраздел – Выделение паттернов на графике, где будет объяснено, как найденные паттерны отмечаются визуально (прямоугольники, метки, цветовая индикация) и почему это важно для анализа.
6. Выделение паттернов на графике
Визуальное представление – один из важнейших аспектов советника CandlePatternSearch.mq5. После обнаружения свечного паттерна – в ходе целевого поиска, полного сканирования или мониторинга в реальном времени – советник сразу отмечает эту формацию на графике, чтобы ее можно было быстро распознать.
Способ выделения
Инструмент использует прямоугольные графические объекты (OBJ_RECTANGLE), чтобы выделять бары, образующие паттерн. Каждый прямоугольник строится по ценам максимума и минимума свечей и по горизонтали охватывает диапазон от первой до последней свечи паттерна. Так даже многосвечные формации четко видны и легко отделяются визуально.
Чтобы различать типы паттернов:
- каждому типу присваивается свой цвет (настраиваемый через входной параметр PatternColor или отдельно для каждого паттерна);
- прозрачность задается так, чтобы не скрывать свечи графика под выделением;
- необязательные текстовые метки можно размещать над прямоугольником или под ним, чтобы обозначить формацию.
Преимущества визуального выделения
Визуальное выделение дает сразу несколько преимуществ. Оно обеспечивает мгновенное распознавание: трейдер может выявлять свечные формации прямо на графике, не читая логи и не полагаясь только на алерты. Оно также помогает при изучении истории: пользователь может прокручивать график назад и смотреть, как цена реагировала после появления похожих сетапов. Наконец, это полезный инструмент для структурированного обучения: трейдерам, которые еще осваивают свечной анализ, отображение паттернов в реальных рыночных условиях помогает лучше их распознавать и укрепляет уверенность в собственном анализе.
//+------------------------------------------------------------------+ //| Mark detected pattern on chart | //+------------------------------------------------------------------+ void markPatternOnChart(int patternIndex, int startIndex, const MqlRates &rates[]) { string name = patterns[patternIndex].name; string objName = StringFormat("%s_%d", name, startIndex); // Determine high and low for the pattern double highPrice = rates[startIndex].high; double lowPrice = rates[startIndex].low; int candleCount = patterns[patternIndex].barsRequired; for(int i = 0; i < candleCount; i++) { if(rates[startIndex+i].high > highPrice) highPrice = rates[startIndex+i].high; if(rates[startIndex+i].low < lowPrice) lowPrice = rates[startIndex+i].low; } datetime startTime = rates[startIndex + candleCount - 1].time; datetime endTime = rates[startIndex].time; // Create rectangle object ObjectCreate(0, objName, OBJ_RECTANGLE, 0, endTime, highPrice, startTime, lowPrice); ObjectSetInteger(0, objName, OBJPROP_COLOR, PatternColor); ObjectSetInteger(0, objName, OBJPROP_STYLE, STYLE_SOLID); ObjectSetInteger(0, objName, OBJPROP_WIDTH, 1); ObjectSetInteger(0, objName, OBJPROP_FILL, true); ObjectSetInteger(0, objName, OBJPROP_ZORDER, 0); }
Функция markPatternOnChart() рисует прямоугольник, охватывающий свечи, образующие найденный паттерн. Она определяет верхнюю и нижнюю границы диапазона паттерна по ценам максимума и минимума, чтобы точно задать вертикальные границы прямоугольника. Свойство _barsRequired гарантирует, что многосвечные формации будут охвачены целиком.
7. Поиск конкретного паттерна и сканирование всех паттернов
Советник CandlePatternSearch.mq5 поддерживает два разных режима обнаружения: оба опираются на одну и ту же базовую логику распознавания, но решают разные задачи.
Режим поиска паттерна
В режиме поиска паттерна пользователь задает точную свечную формацию, которую нужно найти: либо вводит ее название в поле поиска на графике, либо передает его как аргумент функции поиска. Затем советник обрабатывает исторические данные в пределах заданного окна проверки LookbackPeriod, отмечая только те случаи, которые соответствуют запрошенному паттерну. Такой целенаправленный подход хорошо подходит для тестирования одной формации на исторических данных, изучения поведения входов и выходов в привязке к этому паттерну и разработки стратегий вокруг конкретного сигнала.
Режим полного сканирования
В режиме полного сканирования советник действует шире: игнорирует фильтр по имени и проверяет по данным графика каждый паттерн из своей внутренней библиотеки. Он выделяет все найденные в окне проверки совпадения независимо от их типа. Этот режим особенно полезен для получения статистической картины рыночных настроений, анализа частоты и взаимодействия нескольких сетапов, а также для быстрого поиска торговых возможностей без привязки к одному сигналу.
С точки зрения производительности поиск конкретного паттерна обычно работает быстрее, потому что для каждого индекса свечи вызывается только одна функция обнаружения. Полное сканирование требует вызова всех функций обнаружения для каждого анализируемого бара, поэтому при большой библиотеке паттернов нагрузка может быть выше; однако оптимизированная структура советника сохраняет приемлемую эффективность даже на расширенных диапазонах истории.
// Search for a specific pattern void searchPattern(string patternName) { MqlRates rates[]; if(CopyRates(_Symbol, _Period, 0, LookbackPeriod, rates) <= 0) return; for(int i = LookbackPeriod-1; i >= 0; i--) { if(matchPatternByName(patternName, i, rates)) markPatternOnChart(getPatternIndex(patternName), i, rates); } } // Scan all patterns in the library void scanAllPatterns() { MqlRates rates[]; if(CopyRates(_Symbol, _Period, 0, LookbackPeriod, rates) <= 0) return; for(int i = LookbackPeriod-1; i >= 0; i--) { for(int p = 0; p < totalPatterns; p++) { if(patterns[p].function(i, rates)) markPatternOnChart(p, i, rates); } } }
- searchPattern() проходит по историческим барам и вызывает только функцию проверки совпадения для указанного паттерна.
- scanAllPatterns() проходит по всем паттернам для каждого индекса исторической свечи.
- Обе функции вызывают markPatternOnChart(), чтобы визуально выделять найденные совпадения.
Тестирование и результаты
Чтобы оценить точность и практическую применимость советника CandlePatternSearch.mq5, было проведено несколько тестов на синтетических инструментах с высокой волатильностью и стандартных парах Forex. На представленных здесь скриншотах советник работает на индексе Volatility 75 (1s) на таймфрейме M5 и использует тиковые данные для высокочастотного наблюдения.

Во время тестирования паттерна бычьего поглощения советник просканировал 1 000 исторических баров в пределах выбранного окна проверки LookbackPeriod и корректно выявил 52 случая, соответствующих заданной логике паттерна. Каждое обнаружение было выделено прямо на графике с помощью синих прямоугольников, при этом каждый из них охватывал диапазон двух свечей паттерна поглощения. Такая мгновенная визуальная разметка позволяла быстро распознавать сетап без обращения к логам.

Панель управления на графике оказалась очень удобной для тестовых сценариев. После ввода названия паттерна в поле поиска и клика по кнопке Search сканирование завершалось менее чем за секунду даже при интенсивном потоке тиков по Volatility Index. Инструмент не только отображал отмеченные паттерны, но и обновлял панель состояния – общее число обнаружений и отметку времени последнего сканирования, что позволяло замерять и проверять повторные тесты.
В повторных испытаниях на разных инструментах (например, EURUSD, USDJPY, NZDUSD) советник сохранял точность: ложных срабатываний сверх заданных порогов соотношения свечей не наблюдалось. Режим полного сканирования позволял оценивать всю библиотеку свечных паттернов и выявлять паттерны разных типов в рамках одной операции; однако в условиях крайне высокой волатильности, например на индексе Volatility 75, частота паттернов заметно возрастала, поэтому для предотвращения визуального загромождения приходилось ограничивать вывод через входной параметр MaxDisplayPatterns.

Ниже изложены основные наблюдения по результатам.
- Точность. Логика обнаружения соответствовала классическим определениям при визуальной и ручной проверке.
- Скорость. На стандартных данных Forex сканирование выполнялось почти мгновенно, а на тяжелых синтетических индексах – за приемлемое время.
- Удобство использования. GUI позволял быстро переключаться между целевым поиском и полным сканированием без остановки и перекомпиляции советника.
- Польза для обучения. Для начинающих трейдеров визуальная разметка помогала лучше распознавать свечные паттерны как на текущих, так и на исторических данных.
Эти результаты подтверждают, что советник CandlePatternSearch.mq5 надежен и для прицельного изучения отдельных паттернов, и для широкого наблюдения за рынком, а его скорость и наглядность делают его полезным как в реальном времени, так и при последующем анализе.
Заключение
Разработка и тестирование советника CandlePatternSearch.mq5 показывают, что хорошо структурированный модульный подход к распознаванию свечных паттернов способен обеспечить и точность, и практическую эффективность в среде MetaTrader 5. Благодаря сочетанию широкой библиотеки паттернов, отзывчивой панели управления на графике, мониторинга в реальном времени и многоканальных алертов этот инструмент соединяет теорию свечных паттернов с их практическим применением на реальном рынке.
Тестирование как на синтетических индексах, так и на традиционных парах Forex подтвердило, что результаты распознавания соответствуют классическим критериям, а система визуального выделения обеспечивает мгновенное распознавание и полезный исторический контекст. Возможность беспрепятственно переключаться между режимами целевого поиска и полного сканирования, не прерывая работу советника, дополнительно повысила удобство как при исследовательском анализе, так и во время активных торговых сессий. Для дискреционных трейдеров советник дает интуитивно понятный способ развивать навыки распознавания паттернов и встраивать их в процесс принятия решений. Для системных трейдеров и разработчиков модульная логика обнаружения и настраиваемые входные параметры создают прочную основу для расширения инструмента до автоматизированных или полуавтоматизированных стратегий.
Иными словами, советник CandlePatternSearch.mq5 – это не просто утилита для разметки паттернов, а гибкая аналитическая система, способная поддерживать дисциплинированную торговую практику, более глубокие статистические исследования и наблюдение за рынком в реальном времени. Благодаря своей архитектуре это полезный инструмент для любого трейдера, которому нужна ясность в нередко сложном языке свечных формаций.
Читайте другие мои статьи здесь.
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/20313
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Сеточный советник на дивергенции RSI с риск-менеджером в MQL5
Как построить 29-парный портфель с L1-фильтром и VaR-распределением лотов
Разработка инструментария для анализа Price Action (Часть 52): Визуальный анализ структуры рынка на нескольких таймфреймах
Как реализовать R/S-анализ и индикатор Хёрста в MQL5
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования