Разработка бота на базе Bollinger Bands

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Разработка бота на базе Bollinger Bands
Простая
~3-5 рабочих дней
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1221
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1163
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    855
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1062
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    828

Разработка бота на базе 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 недели.