Разработка системы распознавания свечных паттернов
Свечной анализ — японская методология, которой несколько сотен лет, но в контексте алгоритмической торговли она получила вторую жизнь. Автоматическое распознавание паттернов на тысячах инструментов одновременно даёт то, что невозможно сделать вручную.
Классификация свечных паттернов
Односвечные паттерны (простейшие, высокая частота):
- Doji (крест, гравирующий камень, стрекоза)
- Hammer / Inverted Hammer
- Shooting Star
- Spinning Top
- Marubozu (полностью залитая свеча)
Двухсвечные паттерны:
- Bullish/Bearish Engulfing
- Harami (бычий/медвежий)
- Piercing Line / Dark Cloud Cover
- Tweezer Top/Bottom
Трёхсвечные паттерны (наиболее надёжные):
- Morning Star / Evening Star
- Three White Soldiers / Three Black Crows
- Three Inside Up/Down
- Abandoned Baby
Алгоритм распознавания
Каждый паттерн описывается набором математических условий относительно параметров свечей (open, high, low, close, volume).
Пример: Bullish Engulfing
def is_bullish_engulfing(prev, curr):
prev_bearish = prev['close'] < prev['open']
curr_bullish = curr['close'] > curr['open']
curr_body_size = curr['close'] - curr['open']
prev_body_size = prev['open'] - prev['close']
engulfs = (curr['open'] <= prev['close'] and
curr['close'] >= prev['open'])
min_body_ratio = curr_body_size / prev_body_size >= 1.1
return prev_bearish and curr_bullish and engulfs and min_body_ratio
Пример: Doji
def is_doji(candle, threshold=0.1):
body = abs(candle['close'] - candle['open'])
range_ = candle['high'] - candle['low']
return (body / range_) <= threshold if range_ > 0 else False
Нормализация свечей — абсолютные значения тела и теней сравниваются через коэффициенты, а не абсолютные цифры. Тело > 70% от диапазона = сильная свеча. Тело < 10% = doji. Тени > 2× тела = hammer/shooting star.
Контекстная фильтрация
Сырой детектор паттернов даёт много ложных сигналов. Контекстная фильтрация значительно повышает качество:
Трендовый контекст — Hammer валиден только при нисходящем тренде, Shooting Star — при восходящем. Тренд определяется через EMA(20) или линейную регрессию за последние N свечей.
Уровни поддержки/сопротивления — паттерн вблизи ключевого уровня имеет вес выше, чем в середине диапазона.
Объём — паттерн с объёмом выше среднего значительно надёжнее. Morning Star с высоким объёмом на третьей свече — сильный сигнал разворота.
ATR-фильтр — в периоды низкой волатильности (ATR ниже N%) паттерны игнорируются как статистический шум.
Backtesting и win rate
Библиотека TA-Lib (Python/C) содержит готовые функции для распознавания большинства классических паттернов. Мы используем её как baseline и дополняем собственными реализациями с контекстной фильтрацией.
Backtesting на BTC/USDT (1h, 2020–2024):
| Паттерн | Кол-во сигналов | Win Rate (без контекста) | Win Rate (с фильтром тренда) |
|---|---|---|---|
| Bullish Engulfing | 1840 | 52% | 61% |
| Morning Star | 412 | 56% | 67% |
| Hammer | 2190 | 49% | 58% |
| Three White Soldiers | 186 | 64% | 71% |
Мультитаймфреймовый скан
Система сканирует все заданные инструменты одновременно на нескольких таймфреймах (15m, 1h, 4h, 1d). Паттерн, подтверждённый на нескольких таймфреймах одновременно — приоритетный сигнал.
Иерархия приоритетов: дневной > 4h > 1h > 15m. Сигнал от паттерна на 4h при наличии подтверждения на 1d получает score +30%.
Архитектура и стек
Python: pandas для работы с OHLCV, TA-Lib для базовых паттернов, собственные функции для расширенных паттернов с контекстом. CCXT для подключения к биржевым API.
Scheduler: APScheduler или Celery Beat для регулярного сканирования по закрытию свечи.
База паттернов: PostgreSQL — таблица с полями: instrument, timeframe, pattern_type, candle_timestamp, score, context (JSON), status (active/expired/triggered).
Уведомления: Telegram Bot с форматированными сообщениями: название паттерна, инструмент, таймфрейм, текущая цена, возможный target.
Визуализация: выделение паттернных свечей цветом/иконками на ценовом графике. TradingView Lightweight Charts или кастомный canvas renderer.
Результат — скалируемая система, которая мониторит сотни инструментов и отправляет уведомления о качественных свечных сигналах с фильтрацией по контексту.







