Торговый бот на полосах Боллинджера: mean-reversion и breakout

Торговый бот на основе полос Боллинджера: mean-reversion и breakout До 70% сигналов стандартных полос Боллинджера на крипторынке — ложные. Причина — криптовалюты часто находятся в режиме высокой волатильности, и классическая настройка (SMA 20, 2 сигмы) не фильтрует bandwidth. Наша специализация —

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1269
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1009

Торговый бот на основе полос Боллинджера: mean-reversion и breakout

До 70% сигналов стандартных полос Боллинджера на крипторынке — ложные. Причина — криптовалюты часто находятся в режиме высокой волатильности, и классическая настройка (SMA 20, 2 сигмы) не фильтрует bandwidth. Наша специализация — создание роботов, которые учитывают режим волатильности, bandwidth и объём. Ниже — типовые подходы и инженерные решения, которые мы используем в каждом проекте.

Bollinger Bands — индикатор волатильности, разработанный Джоном Боллинджером. Три линии: средняя (SMA 20) и два канала на расстоянии N стандартных отклонений (обычно 2). В 95% времени цена находится внутри каналов. Выход за канал — статистически значимое событие. Но на крипторынке из-за высокой частоты импульсов многие пробои оказываются ложными.

Как bandwidth фильтр предотвращает ложные сигналы?

Ширина канала (bandwidth) = (upper–lower)/mid. Нормированное значение отсекает движения, происходящие при высокой волатильности. Mean-reversion работает только при bandwidth < 0.04 — когда канал сужен (Bollinger Squeeze). Игнорирование этого фильтра — типичная ошибка, ведущая к ловле ножей. Например, при bandwidth > 0.04 цена может уйти далеко за границу и не вернуться — это трендовое движение, а не откат. Bollinger Squeeze с bandwidth-фильтром в 3 раза надёжнее стандартного сигнала для mean-reversion.

Логика стратегии

Mean-reversion подход: цена выходит за нижнюю полосу → перепроданность → покупаем в расчёте на возврат к средней. Применяется только при низком bandwidth.

Breakout подход: цена пробивает верхнюю полосу с высоким объёмом → продолжение тренда → покупаем. Фильтруем по %B > 1 и росту объёма >30% от среднего.

Сравнение подходов

Характеристика Mean-reversion Breakout
Рыночный режим Флэт, сжатие Сильный тренд
Bandwidth < 0.04 > 0.04
Типичная ошибка Покупка без фильтра — ловля падающего ножа Вход на пробое с падающим объёмом
%B < 0 > 1
Частота сигналов Средняя (3-5 в день) Низкая (1-2 в день)

Почему выбор стратегии зависит от рыночного режима?

Рынок криптовалют неоднороден. В период консолидации (например, после сильного роста) bandwidth сужается — идеальные условия для mean-reversion. В моменты новостных импульсов или листингов bandwidth расширяется, и breakout даёт лучшие результаты. Мы анализируем историю за последние 6 месяцев, определяем превалирующий режим и подбираем параметры бота под него. Если рынок часто меняет режим, комбинируем обе стратегии с весовыми коэффициентами.

Реализация

import pandas_ta as ta import ccxt class BollingerBandsBot: def __init__(self, symbol: str, period: int = 20, std_dev: float = 2.0): self.exchange = ccxt.bybit({'apiKey': API_KEY, 'secret': SECRET}) self.symbol = symbol self.period = period self.std_dev = std_dev async def get_signal(self) -> str: ohlcv = await self.exchange.fetch_ohlcv(self.symbol, '1h', limit=100) df = pd.DataFrame(ohlcv, columns=['ts','open','high','low','close','vol']) # Вычисляем Bollinger Bands bb = ta.bbands(df['close'], length=self.period, std=self.std_dev) lower = bb[f'BBL_{self.period}_{self.std_dev}'].iloc[-1] mid = bb[f'BBM_{self.period}_{self.std_dev}'].iloc[-1] upper = bb[f'BBU_{self.period}_{self.std_dev}'].iloc[-1] price = df['close'].iloc[-1] # Bandwidth — ширина канала, нормированная к средней bandwidth = (upper - lower) / mid # Mean-reversion только при низкой волатильности (сжатие) if bandwidth < 0.04: # канал сужен — готовимся к пробою return 'WATCH' if price < lower: return 'BUY' # ниже нижней полосы elif price > upper: return 'SELL' # выше верхней полосы # Возврат к среднему — выход из позиции if abs(price - mid) / mid < 0.002: # цена у средней return 'CLOSE' return 'HOLD' 

Процесс разработки под ключ

  1. Анализ рынка — собираем исторические данные минимум за 6 месяцев, оцениваем режимы волатильности и профит-фактор.
  2. Проектирование — выбираем стратегию, параметры полос, фильтры (bandwidth, объём, %B). Пишем спецификацию логики входа/выхода.
  3. Реализация — код на Python (ccxt, pandas_ta), бэктест на исторических данных, оптимизация параметров.
  4. Тестирование — запускаем на демо-счете или тестовой сети не менее 7 дней, сверяем метрики.
  5. Деплой — разворачиваем на VPS, настраиваем мониторинг через Telegram-бота, готовим документацию.

Что входит в работу

  • Полный исходный код бота с комментариями
  • Отчёт о бэктестировании на истории за 6+ месяцев
  • Настройка демо-счета и тестовый период 7–14 дней
  • Инструкция по развёртыванию и эксплуатации
  • Поддержка на этапе запуска (2 недели)

Сроки и результаты

Этап Длительность Результат
Анализ и проектирование 2–3 дня Стратегия с параметрами и спецификацией
Реализация и бэктест 3–7 дней Готовый код с отчётом о тестировании
Тестирование на демо 7–14 дней Исправление ошибок, финальные метрики
Деплой и запуск 1–2 дня Бот на сервере + инструкция

Общий срок: от 7 до 28 дней в зависимости от сложности.

%B и Bandwidth

%B показывает где цена находится внутри канала (0 = нижняя полоса, 1 = верхняя):

percent_b = (price - lower) / (upper - lower) # < 0: ниже нижней (перепроданность) # > 1: выше верхней (перекупленность) # 0.5: у средней линии 

Bandwidth (ширина канала) — индикатор волатильности. Bollinger Squeeze — сильное сужение часто предшествует резкому движению. Сигнал направления — от первого пробоя после сжатия. Для исключения шума мы также добавляем фильтр по объёму: если объём в момент пробоя ниже среднего за 20 свечей, сигнал игнорируется.

Гарантии и проверка работоспособности

Мы предоставляем полный исходный код. Вы можете провести аудит, запустить тесты на симуляторе. Опыт — более 5 лет на рынке, десятки внедрённых ботов. Каждый бот поставляется с отчётом о бэктесте и демо-тестировании. Согласно определению Джона Боллинджера, полосы строятся на основе скользящей средней и стандартного отклонения.

Закажите консультацию по настройке стратегии под ваш портфель. Свяжитесь с нами для бесплатной оценки проекта — подберём оптимальную логику бота.