Розробка системи розпізнавання свічних паттернів
Свічний аналіз — японська методологія, якій кілька сотень років, але в контексті алгоритмічної торгівлі вона отримала друге життя. Автоматичне розпізнавання паттернів на тисячах інструментів одночасно дає те, що неможливо зробити вручну.
Класифікація свічних паттернів
Односвічні паттерни (найпростіші, висока частота):
- 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.
Результат — масштабувана система, яка моніторить сотні інструментів та відправляє сповіщення про якісні свічні сигнали з фільтрацією за контекстом.







