Торговий бот на основі смуг Боллінджера: 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' Процес розробки під ключ
- Аналіз ринку — збираємо історичні дані мінімум за 6 місяців, оцінюємо режими волатильності та профіт-фактор.
- Проектування — обираємо стратегію, параметри смуг, фільтри (bandwidth, об'єм, %B). Пишемо специфікацію логіки входу/виходу.
- Реалізація — код на Python (ccxt, pandas_ta), бектест на історичних даних, оптимізація параметрів.
- Тестування — запускаємо на демо-рахунку або тестовій мережі не менше 7 днів, звіряємо метрики.
- Деплой — розгортаємо на 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 років на ринку, десятки впроваджених ботів. Кожен бот постачається зі звітом про бектест та демо-тестування. Згідно з визначенням Джона Боллінджера, смуги будуються на основі ковзної середньої та стандартного відхилення.
Замовте консультацію з налаштування стратегії під ваш портфель. Зв'яжіться з нами для безкоштовної оцінки проекту — підберемо оптимальну логіку бота.







