Розробка системи рівнів підтримки/опору
Алгоритмічне визначення рівнів підтримки та опору (S/R) — завдання, з яким стикається кожен трейдер, що працює з 50+ інструментами. Ручна розмітка забирає до 20 годин на тиждень, а пропущений пробій на ETHUSD коштує від $500 до $2000 за угоду. Ми створили систему, яка автоматично знаходить значущі рівні з точністю 75%+ і скорочує час на розмітку на 80%. Це економить від $3000 до $8000 на місяць на ручній праці (залежно від кількості інструментів) і додатково знижує збитки від хибних пробоїв на 25%.
Система сканує заданий список інструментів через REST/WebSocket і оновлює рівні при кожному закритті свічки. В основі — кластерний аналіз pivot-точок з кастомним tolerance, фільтрація за об'ємом (Volume Profile) і мультитаймфреймове підтвердження. Ви отримуєте не просто лінії, а зони з кольоровою індикацією сили та real-time сповіщення при пробої.
Алгоритмічне визначення S/R
Кластеризація pivot-точок
Основний метод — кластеризація pivot-точок. Алгоритм:
- Знайти всі pivot highs/lows за rolling window (за замовчуванням 50 барів)
- Згрупувати близькі ціни в кластери (tolerance ±0.5%)
- Оцінити силу кожного рівня: кількість дотиків, об'єм, свіжість
from scipy.cluster.hierarchy import linkage, fcluster def cluster_levels(price_points, tolerance=0.005): prices = np.array([p[1] for p in price_points]).reshape(-1, 1) Z = linkage(prices, method='single') labels = fcluster(Z, t=tolerance * np.mean(prices), criterion='distance') clusters = {} for i, label in enumerate(labels): clusters.setdefault(label, []).append(price_points[i]) return {k: np.mean([p[1] for p in v]) for k, v in clusters.items()} Кластеризація відсіює шум: замість сотень непотрібних ліній залишається до 20–30 значущих. На бектесті по ETHUSD точність сигналів на 25% вища, ніж при використанні простих rolling max/min.
Volume Profile та круглі числа
Додаткові джерела:
- Volume Profile / Point of Control (POC) — ціна з максимальним об'ємом за період. Детальніше в Volume Profile.
- Круглі числа (50000, 100000 для BTC) — психологічні рівні з базовою вагою.
- Фрактали Білла Вільямса — більш строгі локальні екстремуми.
Оцінка сили та фільтрація
Кожен рівень отримує score за кількома метриками:
| Метрика | Опис | Вага |
|---|---|---|
| Touch count | Скільки разів ціна тестувала рівень | Висока |
| Volume at level | Об'єм біля рівня | Висока |
| Recency | Наскільки недавно рівень актуальний | Середня |
| Bounce strength | Сила відскоку | Середня |
| Timeframe confluence | Видимість на кількох таймфреймах | Висока |
Рівень, видимий на daily та 4h, отримує на 40% вищий score — це ключовий фактор фільтрації. Додатково фільтруємо за об'ємом: якщо на рівні менше 5% від середньої сесії, рівень ігнорується.
Динамічні рівні та пробої
Обробка пробою та зміна полярності
При закритті свічки за межами зони (±ATR/4) рівень позначається як broken. Підтримка стає опором і навпаки. Статус оновлюється в real-time через WebSocket — критично для торгових роботів.
Динамічні рівні
Статичні доповнюються динамічними:
- EMA 20/50/200
- Bollinger Bands (верхня/нижня смуга як S/R)
- VWAP та anchored VWAP
Наприклад, EMA 200 на daily — потужний рівень підтримки для BTCUSDT.
Практичне налаштування та візуалізація
Як налаштувати систему рівнів
- Підключіть джерело даних (REST/WebSocket) — біржовий API або брокер.
- Задайте список інструментів (наприклад, 50 криптопар).
- Налаштуйте параметри: tolerance кластеризації, поріг score, таймфрейми.
- Запустіть backtest на 6 місяців історичних даних.
- Розгорніть ядро на сервері (Python) і підключіть фронтенд.
- Отримуйте алерти при пробої рівнів у Telegram або через UI.
Візуалізація
Рівні відображаються як зони (прямокутники) на графіку. Товщина межі та насиченість кольору пропорційні score. Зони замість ліній — реалістичніше: ринок тестує діапазон, а не точку. Автоматичне оновлення при пробої та зміна полярності.
Стек: Python (pandas, scipy, numpy), PostgreSQL, WebSocket, React + TradingView Lightweight Charts.
Терміни та вартість
Термін розробки — від 4 до 8 тижнів залежно від складності інтеграції. Вартість розраховується індивідуально після аналізу вашого інструментарію. Замовте безкоштовний backtest вашої стратегії з нашою системою — наші інженери дадуть відповідь протягом дня. Зв'яжіться з нами для консультації.
Типові помилки при самостійній реалізації
- Використання одного методу (тільки фрактали) — низька репрезентативність.
- Відсутність фільтру за об'ємом — хибні рівні.
- Ігнорування динамічних рівнів — пропуск трендових рухів.
- Неправильний tolerance: 0.1% дає 100+ ліній, 2% — один рівень.
5+ років досвіду в розробці торгових систем для криптовалют. Метод заснований на підході Volume Profile Дж. Далтона (Mind Over Markets, 1991).







