Розробка системи розпізнавання паттернів (голова та плечі, трикутники, клини)
Автоматичне розпізнавання класичних графічних паттернів — це завдання, яке на перший погляд виглядає простим, але на практиці вимагає серйозної інженерної роботи. Паттерн «голова та плечі» легко побачити на статичному графіку, але детектувати його алгоритмічно у реальному часі на тисячах інструментів — зовсім інша історія.
Класифікація паттернів та їх алгоритмічне представлення
Всі паттерни можна розділити на три категорії за складністю детектування:
Розворотні паттерни (Head & Shoulders, Inverse H&S, Double Top/Bottom, Triple Top/Bottom) — формуються на значимих рівнях, сигналізують про зміну тренду.
Паттерни продовження (Ascending/Descending/Symmetrical Triangle, Bull/Bear Flag, Pennant, Wedge) — формуються в середині тренду як консолідація перед продовженням.
Паттерни каналу (Rising/Falling Channel, Rectangle) — ціна рухається між паралельними рівнями.
Алгоритм виявлення: метод опорних точок (Pivot Points)
Основний підхід — виділення локальних екстремумів (swing highs та swing lows) та аналіз їх послідовності.
Етап 1: Пошук pivot points
def find_pivots(highs, lows, window=5):
pivot_highs = []
pivot_lows = []
for i in range(window, len(highs) - window):
if highs[i] == max(highs[i-window:i+window+1]):
pivot_highs.append((i, highs[i]))
if lows[i] == min(lows[i-window:i+window+1]):
pivot_lows.append((i, lows[i]))
return pivot_highs, pivot_lows
Розмір вікна впливає на «масштаб» виявлених паттернів. Мале вікно дає паттерни на коротких таймфреймах, велике — на довгострокових.
Етап 2: Матчинг паттернів
Для «голови та плеч» потрібно знайти послідовність з 5 pivot points: left shoulder (high), neckline left (low), head (highest high), neckline right (low), right shoulder (high).
Умови для валідного H&S:
- Head вище обох плеч (tolerance ±2%)
- Обидва плеча приблизно одної висоти (різниця < 5%)
- Neckline відносно горизонтальна (нахил < 15°)
- Right shoulder не перевищує Head
Етап 3: Детектування трикутників
Трикутники визначаються через лінійну регресію за pivot points:
- Symmetrical: нисходяча лінія за highs + висхідна за lows, конвергуючі до однієї точки
- Ascending: горизонтальний опір + висхідна підтримка
- Descending: горизонтальна підтримка + нисхідний опір
Якість трикутника оцінюється через R² коефіцієнт лінійних регресій. R² > 0.85 — хороший трикутник.
Етап 4: Клини (Wedges)
Клин відрізняється від трикутника тим, що обидві лінії спрямовані в один бік:
- Rising Wedge (ведмежий сигнал): обидві лінії висхідні, верхня більш пологіша
- Falling Wedge (бичий сигнал): обидві лінії нисхідні, нижня більш пологіша
Ключова умова: лінії конвергуються (кут між ними зменшується).
Оцінка якості паттерну та target projection
Кожен виявлений паттерн отримує score (0–100) на основі:
- Симетричності (для H&S)
- R² ліній (для трикутників)
- Співвідношення обсягу (обсяг при формуванні має зменшуватися)
- Завершеності паттерну (breakout уже відбувся чи ні)
Target projection — розрахунок цілі після breakout:
- H&S: ціль = рівень neckline − висота голови
- Трикутник: ціль = точка апексу ± висота основи
- Клин: ціль = початок клину
Backtest та оцінка надійності
Система включає модуль backtesting: для кожного історично виявленого паттерну перевіряємо, спрацював ли target протягом наступних N свічок та з яким процентом success rate. Це дозволяє калібрувати порогові значення під конкретний актив та таймфрейм.
Типова надійність на крипторинку (за історичними даними BTC/ETH):
| Паттерн | Win Rate | Середнє R/R |
|---|---|---|
| H&S (confirmed) | 55–65% | 1:1.5 |
| Ascending Triangle | 60–70% | 1:1.8 |
| Symmetrical Triangle | 50–55% | 1:1.2 |
| Falling Wedge | 60–68% | 1:2.0 |
Архітектура системи
Backend: Python (pandas, numpy, scipy для лінійної регресії), обробка OHLCV даних з біржових API (CCXT library). Скан по всім інструментам запускається за розписанням (cron) на кожному закритті свічки.
База даних: PostgreSQL для зберігання виявлених паттернів з параметрами, статусом (forming/confirmed/failed) та результатами.
Frontend: React + TradingView Lightweight Charts. Паттерни відриховуються як SVG-оверлеї поверх цінового графіку — лінії плеч, neckline, лінії трикутника з підписами.
Алерти: При виявленні нового підтвердженого паттерну або при пробої рівня — сповіщення у Telegram або через webhook.
Масштабування
Для сканування 500+ інструментів у реальному часі використовується паралельна обробка через Python multiprocessing або Celery. Результати кешуються в Redis. Повний скан 500 інструментів на 4h таймфреймі займає 15–30 секунд на стандартному сервері.
Ми розробляємо систему з настроювальною чутливістю детектора, підтримкою кількох таймфреймів одночасно, візуалізацією паттернів на графіку та вбудованим backtesting'ом для оцінки якості алгоритму на історичних даних.







