Кодирование свечных моделей (Часть 1): Алфавитная система для выявления сигналов
Введение
Анализ ценовых движений на основе свечных графиков остается одним из наиболее широко используемых подходов к интерпретации поведения рынка, поскольку он напрямую фокусируется на движении цены, а не полагается исключительно на запаздывающие технические индикаторы, полученные из исторических данных. Многие трейдеры предпочитают этот метод за его способность выявлять рыночные настроения, импульс, отбой и волатильность в реальном времени. Однако, несмотря на свою популярность, анализ свечей имеет существенное ограничение: большинство паттернов описываются с использованием субъективных терминов, таких как "длинное тело", "маленькая тень", "пин-бар" или "марубозу". Эти описания часто различаются от одного трейдера к другому, что приводит к непоследовательному распознаванию паттернов, противоречивым реализациям и ненадежным результатам бэктестирования.
Эта проблема становится еще более актуальной, когда разработчики пытаются автоматизировать анализ свечных графиков на торговых платформах, таких как MetaTrader 5, используя MQL5. Без четко определенных математических пороговых значений два программиста могут реализовать один и тот же паттерн свечного графика по-разному и получить совершенно разные торговые сигналы. В результате тестирование стратегий, оптимизацию и статистическую оценку становится трудно воспроизводить последовательно.
В этой статье эта проблема решается путем введения объективной алфавитной системы кодирования свечей, основанной на измеримых соотношениях тела к тени. Вместо того чтобы полагаться на субъективную визуальную интерпретацию, каждая свеча преобразуется в детерминированный символ с использованием предопределенных количественных правил. Бычьи и медвежьи структуры свечей объединяются в символические формы, такие как A/a, H/h, E/e, G/g и D, создавая формальную классификационную структуру, которая может обрабатываться программно.
Основываясь на этой структуре, в статье разработан детерминированный классификатор CandleType() и реализованы процедуры обнаружения двухсвечных паттернов на MQL5. Настраиваемый параметр lookback позволяет индикатору сканировать исторические бары, обнаруживать закодированные комбинации свечей и генерировать воспроизводимые результаты с помощью функций Print и Alert. Преобразуя структуры свечей в стандартизированные строковые коды, система создает стабильный сигнальный слой, который можно сканировать, регистрировать, фильтровать, оповещать и статистически тестировать с высокой степенью согласованности.
Хотя кодирование свечных графиков повышает объективность при генерации сигналов, успех в торговле по-прежнему зависит от более широких факторов, таких как соотношение риск/прибыль, определение размера позиции, сохранение капитала и дисциплинированное управление капиталом. Поэтому представленная здесь система кодирования не предназначена для замены разработки торговой стратегии, а скорее для обеспечения надежной и воспроизводимой основы, на которой можно строить надежные аналитические и автоматизированные торговые системы.
Исторический контекст свечных графиков
Торговля на основе анализа ценового движения в том виде, в котором мы ее знаем сегодня, во многом обязана Мунехисе Хомма (Munehisa Homma), японскому торговцу рисом XVIII века. В то время, когда большинство торговцев записывали только цены закрытия с помощью простых линейных или столбчатых графиков, Хомма начал строить графики открытия, максимума, минимума и закрытия каждой торговой сессии таким образом, чтобы отразить эмоциональные колебания рынка. Его метод построения свечных графиков, позже популяризированный на Западе Стивом Нисоном (Steve Nison), сегодня является предпочтительным типом графика для миллионов трейдеров по всему миру.
Хомма описывал каждую свечу как состоящую из тела (диапазона между ценой открытия и ценой закрытия) и теней, выступающих выше и ниже тела. Анатомия свечи показана на рисунке 1:
Математическое представление этих компонентов определяется следующим образом:
- Размер тела = Цена закрытия − Цена открытия
- Верхняя тень = Цена максимума − max(Цена открытия, Цена закрытия)
- Нижняя тень = min(Цена открытия, Цена закрытия) − Цена минимума
Где:
- max() возвращает большее из значений цены открытия и цены закрытия
- min() возвращает меньшее из значений цены открытия и цены закрытия

Рисунок 1: Структура свечи
Положительное тело свечи (Закрытие > Открытие) указывает на бычью свечу – покупатели контролировали ситуацию и подтолкнули цену вверх. Отрицательное тело свечи (Цена закрытия < Цена открытия) указывает на медвежью свечу – доминировали продавцы.
Свеча визуально отражает рыночную психологию в заданном таймфрейме:
- Тело отражает чистое движение цены.
- Тени свечей указывают на ценовые экстремумы и уровни отбоя.
Распространенные типы свечей и их интерпретация
Различия в размере тела и длине тени приводят к появлению множества типов свечей. Трейдеры обычно сосредотачиваются на нескольких повторяющихся конфигурациях из одной свечи с четким психологическим смыслом. Это те формы, которые каждый трейдер, использующий анализ ценового движения, учится распознавать мгновенно. В таблице 1 ниже собраны наиболее важные из них, а также краткое описание рыночного настроения.
Таблица 1: Распространенные типы свечей
| Тип свечи | Внешний вид (бычья / медвежья свеча) | Описание и обычная интерпретация |
|---|---|---|
![]() | Бычий тренд: длинное зеленое тело, тонкие или отсутствующие тени. | Свеча с крупным телом и практически без теней, демонстрирующая подавляющее доминирование одной стороны. |
![]() | Тело относительно длинное, с видимыми тенями. | Появление большой зеленой свечи указывает на агрессивное давление покупателей. Сигнал продолжения: Если он появляется во время существующей фазы роста, это подтверждает силу движения и предполагает, что восходящий тренд сохранится. Большая красная свеча указывает на сильное давление продавцов и отступление покупателей. Сигнал разворота: Когда он следует за консолидированным восходящим трендом, обычно отмечается "кульминационный пик" или внезапный приток продавцов, сигнализируя о потенциальном медвежьем развороте. |
![]() | Тело относительно короткое, с видимыми тенями. | Свечи с маленьким телом свидетельствуют о недостаточной уверенности как покупателей, так и продавцов. Узкое тело указывает на то, что рынок находится в состоянии равновесия или истощения, характеризующемся слабым движением цены. Небольшая зеленая свеча предполагает, что у покупателей нет импульса для значительного роста. Она указывает на отсутствие агрессивного интереса со стороны быков.
Маленькая красная свеча указывает на то, что продавцы не настроены агрессивно снижать цену. Она показывает, что предложение иссякает или продавцы не решаются действовать на текущих уровнях. Снижение слабое и вялое, что говорит о том, что медвежий импульс ослабевает. |
![]() | Небольшое тело вблизи верхней границы торгового диапазона, очень длинная | Когда такая фигура появляется после нисходящего тренда, она называется Молот — продавцы опустили цену ниже, но покупатели вмешались и оттеснили ее обратно к уровню открытия, что указывает на потенциальный бычий разворот. После восходящего тренда та же фигура называется висящий человек и предупреждает о возможном медвежьем развороте. |
![]() | Небольшое тело у нижней границы диапазона, очень длинная верхняя тень (≥2,5× тела), небольшая нижняя тень или она отсутствует. | После нисходящего тренда, он называется Перевернутый молот: сигнализирует о том, что покупатели пытались поднять цену; хотя продавцы оттеснили ее, давление покупателей может возобновиться, намекая на бычий разворот. После восходящего тренда, его называют Падающая звезда: показывает, что покупателям не удалось удержать более высокие цены, и продавцы вынудили их отступить — предупреждение о медвежьем развороте. |
![]() | Небольшое тело (бычий или медвежий тренд) с верхней | Небольшое реальное тело, свидетельствующее о слабом контроле с одной стороны. Опять же, признак консолидации |
![]() | Цены открытия и закрытия практически одинаковы; | Состояние нерешительности. Ни покупатели, ни продавцы не могут взять ситуацию под контроль. Длина теней указывает на интенсивность борьбы. Распространенные варианты: |
Кодирование свечных паттернов: Алфавитная классификационная система
В традиционном техническом анализе модели свечей часто описываются субъективными терминами, такими как "длинный бычий марубозу" или "медвежий пин-бар". Эта неоднозначность затрудняет систематическую торговлю на основе правил. Чтобы сделать анализ рынка полностью алгоритмизируемым, мы предлагаем перейти от словесных описаний к структурированной алфавитной классификационной системе.
Каждая свеча определяется объективными, измеримыми критериями, такими как соотношение длины тела к длине фитиля и относительный диапазон свечи по сравнению с недавней ценовой динамикой. На основе этих показателей каждой предопределенной форме свечи присваивается уникальный буквенный код, как показано на Рисунке 2:

Рисунок 2: Алфавитная классификационная система
После кодирования последовательность свечей становится простой текстовой строкой (например, Ahe, GDAe, AaDH). Это преобразование позволяет трейдерам и алгоритмам:
- Устранить неоднозначность в распознавании паттернов — больше не нужно гадать, "достаточно ли длинная свеча".
- Стандартизировать интерпретацию — любой аналитик или система, использующие одни и те же правила, определят один и тот же паттерн.
- Обеспечить алгоритмическое обнаружение — торговые сигналы можно найти с помощью простых алгоритмов сопоставления текста, а не сложных визуальных эвристик.
Бычьи и медвежьи пары
Для упрощения обнаружения паттернов разворота мы присваиваем заглавные буквы бычьим свечам, а соответствующие строчные буквы — их медвежьим противоположностям. Так противоположные пары легко распознавать. В этой статье мы используем девятитиповую систему, которая отражает основные параметры направления, формы и силы. В Таблице 2 представлены следующие назначения кодирования (см. Рисунок 2):
Таблица 2: Кодирование типа свечи
| Тип свечи | Бычья | Медвежья |
|---|---|---|
| Длинная, короткая или Марубозу | A | a |
| Пин-бар | H | h |
| Инвертированный пин-бар | E | e |
| Волчок (Spinning Top) | G | g |
| Доджи (нейтральный – нет бычьей/медвежьей пары) | D | d |
С этим алфавитом построение и анализ паттернов ценового движения становится простым делом. Например, строка "Ahe" может представлять собой бычью длинную свечу, за которой следует медвежий пин-бар, а затем бычий перевернутый пин-бар. Подстрока, такая как DH (доджи, за которым следует бычий пин-бар), может соответствовать классическому паттерну разворота. С помощью простого сопоставления текста алгоритм может сканировать тысячи свечей за миллисекунды.
Эта система не заменяет экспертную оценку; она обеспечивает чистую, последовательную основу для автоматизированных и систематических торговых стратегий.
Структура кода: Функция классификации свечей
Функция CandleType(int shift) присваивает свече буквенный код (A/a, H/h, E/e, G/g или D) на основе ее формы и направления. Она индексирует свечи по сдвигу (0 = текущая, 1 = предыдущая и т. д.).
//+------------------------------------------------------------------+ //| Candle Type labeling function | //+------------------------------------------------------------------+ string CandleType(int shift) { //--- Get price data for the specified candle double open = iOpen(NULL, 0, shift); // Price Open double close = iClose(NULL, 0, shift); // Price Close double high = iHigh(NULL, 0, shift); // Price High double low = iLow(NULL, 0, shift); // Price Low //--- Calculate candle components double body = MathAbs(close - open); double upperWick = high - MathMax(open, close); double lowerWick = MathMin(open, close) - low; //--- Handle bullish candles if(close > open) { if(body > 1.5 * upperWick && body > 1.5 * lowerWick) // long, short, marubozu return "A"; if(2 * body < upperWick && 2 * body < lowerWick) // spinning top return "G"; if(lowerWick > 2.5 * body && lowerWick > 2 * upperWick) // pinbar return "H"; if(upperWick > 2.5 * body && upperWick > 2 * lowerWick) // inverted pinbar return "E"; } //--- Handle bearish candles else if(close < open) { if(body > 1.5 * upperWick && body > 1.5 * lowerWick) return "a"; if(2 * body < upperWick && 2 * body < lowerWick) return "g"; if(lowerWick > 2.5 * body && lowerWick > 2 * upperWick) return "h"; if(upperWick > 2.5 * body && upperWick > 2 * lowerWick) return "e"; } else if(close == open) return "D"; // doji //--- Return empty string if no conditions met return ""; }
Функция вычисляет ключевые параметры свечи (тело, верхняя и нижняя тени), определяет бычье или медвежье направление, а затем применяет правила, основанные на форме свечи, для возврата корректного буквенного кода.
Перестановка: Математические основы построения паттернов свечей
В анализе ценового движения ценовые паттерны можно рассматривать как упорядоченные последовательности отдельных свечей. После того как каждая свеча закодирована в символическую форму (например, в буквы), эти последовательности можно моделировать с помощью математической концепции перестановки.
Перестановка относится к расположению элементов в определенном порядке. Рассматривая каждую закодированную свечу как отдельный элемент, мы можем систематически строить широкий спектр возможных свечных паттернов. Этот подход переводит распознавание паттернов от субъективной визуальной интерпретации к структурированной количественной системе.
Традиционно трейдеры сосредотачиваются на ограниченном наборе хорошо известных паттернов, таких как поглощение или утренняя звезда. Хотя эти паттерны широко приняты, ограничение анализа небольшой заранее определенной группой может привести к упущению множества других последовательностей, которые могли бы обладать высокой статистической значимостью. Метод перестановок устраняет это ограничение, позволяя исследовать все возможные упорядоченные комбинации и тем самым выявлять паттерны, которые не сразу очевидны при ручном анализе графика.
Математическое представление
Количество возможных упорядоченных паттернов можно определить с помощью формулы перестановок:

Где:
- n: Общее количество различных типов свечей (закодированных символов)
- r: Количество свечей в последовательности (длина паттерна), где 0≤r≤n
- ! (факториал): Произведение всех положительных целых чисел от 1 до заданного числа
- P(n, r): Общее количество возможных упорядоченных расположений
Если вы определите набор закодированных типов свечей (например, A, H, E, G), то n = 4.
Если вы анализируете паттерны длиной 3 (например, три последовательные свечи), то r = 3.
Построение паттернов из двух свечей с использованием перестановок
После того, как установлены математические основы перестановок, мы можем теперь разрабатывать простые паттерны ценового действия, используя последовательности из двух свечей. В нашей системе кодирования свечи классифицируются следующим образом:
- Бычий набор: A, H, E, G
- Медвежий набор: a, h, e, g
Каждая буква представляет собой отдельную структуру свечи, основанную на размере тела и характеристиках тени.
Шаг 1: Определение количества возможных паттернов
Для построения паттернов из двух свечей мы вычисляем количество возможных упорядоченных расположений из четырех различных элементов. Это определяется формулой перестановки:
P(4,2)=4!/(4−2)!=12
Этот результат показывает, что существует 12 уникальных упорядоченных комбинаций двух свечей, которые могут быть сформированы из четырех различных типов. Важно отметить, что это относится отдельно к:
- Бычьему набору (A, H, E, G)
- Медвежьему набору (a, h, e, g)
Таким образом, каждая направленная группа создает свои собственные 12 различных паттернов из двух свечей.
Шаг 2: Построение упорядоченных паттернов
При использовании бычьего набора в качестве примера, 12 возможных последовательностей из двух свечей следующие:
Бычьи паттерны: AH, AE, AG, HA, HE, HG, EA, EH, EG, GA, GH, GE
Медвежьи паттерны: ah, ae, ag, ha, he, hg, ea, eh, eg, ga, gh, ge
Каждая последовательность представляет собой определенный переход от одного типа свечи к другому, отражающий краткосрочное поведение рынка.
Шаг 3: Применение в торговой среде
Для реализации обнаружения паттернов мы разрабатываем функции, которые отслеживают, комбинируют и оценивают закодированные последовательности свечей. Эти функции идентифицируют паттерны из двух свечей и выводят их после обнаружения корректной структуры.
Функция CheckBullishPattern предназначена для сканирования графика и выявления любых случаев наличия валидных двухсвечных бычьих паттернов на основе заранее заданных закодированных комбинаций.
//+------------------------------------------------------------------+ //| Check for bullish two-candle patterns and print if found | //+------------------------------------------------------------------+ void CheckBullishPattern(int shift) { string candle2 = CandleType(shift + 1); // older candle string candle1 = CandleType(shift); // newer candle string pattern = candle2 + candle1; //--- Bullish patterns (uppercase pairs) if(pattern == "AH" || pattern == "AE" || pattern == "AG" || pattern == "HA" || pattern == "HE" || pattern == "HG" || pattern == "EA" || pattern == "EH" || pattern == "EG" || pattern == "GA" || pattern == "GH" || pattern == "GE") { Print("Bullish pattern detected: ", pattern); Alert("Bullish pattern detected: ", pattern); } }
В отличие от этого, функция CheckBearishPattern сканирует график на предмет обнаружения медвежьих паттернов из двух свечей, удовлетворяющих заданным критериям кодирования.
//+------------------------------------------------------------------+ //| Check for bearish two-candle patterns and print if found | //+------------------------------------------------------------------+ void CheckBearishPattern(int shift) { string candle2 = CandleType(shift + 1); string candle1 = CandleType(shift); string pattern = candle2 + candle1; //--- Bearish patterns (lowercase pairs) if(pattern == "ah" || pattern == "ae" || pattern == "ag" || pattern == "ha" || pattern == "he" || pattern == "hg" || pattern == "ea" || pattern == "eh" || pattern == "eg" || pattern == "ga" || pattern == "gh" || pattern == "ge") { Print("Bearish pattern detected: ", pattern); Alert("Bearish pattern detected: ", pattern); } }
Эти функции отвечают за:
- Извлечение закодированных типов свечей
- Объединение двух последовательных свечей в строку паттерна
- Проверку соответствия паттерна заранее заданным валидным последовательностям
- Вывод обнаруженного паттерна
Они образуют уровень распознавания паттернов в торговой системе.
Демонстрация: Обнаружение сигналов
Индикатор принимает настраиваемый параметр ретроспективного анализа, определяющий количество исторических свечей для анализа. При значении lookback = 500 индикатор сканирует предыдущие 500 баров. Он проходит по ним циклом и вызывает функции CheckBullishPattern и CheckBearishPattern для вывода обнаруженных двухсвечных паттернов. Для оптимизации эффективности работы и экономии вычислительных ресурсов цикл выполняется только один раз для каждого нового бара.
//+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int32_t rates_total, const int32_t prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int32_t &spread[]) { //--- set arrays as series ArraySetAsSeries(time, true); static datetime lastTime; int Lmt = (prev_calculated == 0) ? MathMin(rates_total - 3, lookback - 3) : 3; if(lastTime == time[0]) return 0; lastTime = time[0]; for(int i = Lmt; i >= 0; i--) { CheckBullishPattern(i); CheckBearishPattern(i); } //--- return value of prev_calculated for next call return(rates_total); }
В текущей реализации паттерны выводятся с помощью функций Print() и Alert(). Систему можно расширить с помощью SendNotification() для отправки уведомлений в реальном времени, когда индикатор работает на сервере.

Рисунок 3: Обнаружение кодированных сигналов
Заключение
В этой статье мы преобразовали традиционный анализ свечных графиков из субъективной визуальной практики в структурированный и программно реализуемый подход, подходящий для систематического анализа рынка. Определив объективные параметры для соотношения тела и тени свечи, мы закодировали структуры свечей в алфавитную классификационную систему, такую как A/a, H/h, E/e, G/g и D. На этой основе мы реализовали основные компоненты MQL5, включая CandleType(), процедуры проверки бычьих и медвежьих паттернов, а также цикл OnCalculate() с настраиваемым параметром lookback для генерации воспроизводимых строк паттернов свечей, таких как "AH" или "ge".
Этот подход к кодированию создает чистый сигнальный слой, который можно сканировать, логировать, оповещать и статистически тестировать с высокой степенью согласованности. Преобразуя формации свечей в символические последовательности, трейдеры и разработчики могут выйти за рамки субъективного анализа графиков и систематически исследовать, какие конфигурации свечей могут обладать статистической значимостью или торговым преимуществом.
После создания этой структуры следующий этап серии будет посвящен более глубокому анализу перестановок и статистическому анализу, расширению библиотеки закодированных паттернов и интеграции контекстных фильтров и методов управления капиталом. Однако ни один закодированный паттерн не гарантирует успеха при всех рыночных условиях. Поэтому эти сигналы следует использовать как один из дисциплинированных компонентов в рамках более широкой торговой системы, построенной на основе надлежащего управления рисками и анализа рыночного контекста.
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/22469
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Создание пользовательских индикаторов в MQL5 (Часть 11): Улучшение футпринт-графика с помощью слоёв рыночной структуры и ордер-флоу
Создание пользовательских индикаторов в MQL5 (Часть 10): Дополнение футпринт-графика информационным блоком настроений по объёму по каждому бару
Создание индикатора ZigZag со статистикой волн в MQL5
Ассоциативные правила и теория вероятностей на Форекс: Фильтр сигналов без нейросетей и без магии
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования







У тебя отлично получилось, приятель, как мне подключить это к бирже? Подскажи, пожалуйста.