Торговий бот на смугах Боллінджера: 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 років на ринку, десятки впроваджених ботів. Кожен бот постачається зі звітом про бектест та демо-тестування. Згідно з визначенням Джона Боллінджера, смуги будуються на основі ковзної середньої та стандартного відхилення.

Замовте консультацію з налаштування стратегії під ваш портфель. Зв'яжіться з нами для безкоштовної оцінки проекту — підберемо оптимальну логіку бота.