Разработка бота на базе Bollinger Bands
Bollinger Bands — индикатор волатильности, разработанный Джоном Боллинджером. Три линии: средняя (SMA 20) и два канала на расстоянии N стандартных отклонений (обычно 2). В 95% времени цена находится внутри каналов. Выход за канал — статистически значимое событие.
Логика стратегии
Mean-reversion подход: цена выходит за нижнюю полосу → перепроданность → покупаем в расчёте на возврат к средней.
Breakout подход: цена пробивает верхнюю полосу с высоким объёмом → продолжение тренда → покупаем.
Важно не смешивать эти два подхода в одном боте без фильтра рыночного режима.
Реализация
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'
%B и Bandwidth
%B показывает где цена находится внутри канала (0 = нижняя полоса, 1 = верхняя):
percent_b = (price - lower) / (upper - lower)
# < 0: ниже нижней (перепроданность)
# > 1: выше верхней (перекупленность)
# 0.5: у средней линии
Bandwidth (ширина канала) — индикатор волатильности. "Bollinger Squeeze" — сильное сужение часто предшествует резкому движению. Сигнал направления — от первого пробоя после сжатия.
Бот на Bollinger Bands с mean-reversion логикой и bandwidth фильтром разрабатывается за 1–2 недели.







