Розробка бота на базі 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 тільки при низькій волатильності (stisnutte)
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 тижні.







