Разработка системы уровней поддержки/сопротивления
Алгоритмическое определение уровней поддержки и сопротивления (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).







