Разработка торгового бота на основе полос Боллинджера для Bybit

Эта статья — подробный гайд по созданию криптовалютного торгового бота на Python для биржи Bybit. Бот использует полосы Боллинджера как основную стратегию, дополненную другими индикаторами для повышения точности сигналов. Включены модули для бэктестинга и реальной торговли.
Обзор стратегии: Полосы Боллинджера
Полосы Боллинджера — это инструмент технического анализа, основанный на скользящей средней и стандартном отклонении:
- Средняя линия: простая скользящая средняя (SMA), обычно за 20 периодов
- Верхняя полоса: SMA + 2 × стандартное отклонение
- Нижняя полоса: SMA − 2 × стандартное отклонение
Логика торговли:
- Покупка при касании нижней полосы
- Продажа при касании верхней полосы
Однако использование только полос Боллинджера даёт слабые результаты, поэтому добавлены дополнительные индикаторы.
📌 Дополнительные индикаторы
- RSI — индекс относительной силы (перекупленность >70, перепроданность <30)
- EMA — экспоненциальная скользящая средняя (направление тренда)
- ATR — средний истинный диапазон (волатильность, адаптивный стоп-лосс)
- CSI / CSC — авторские индикаторы на основе кластеров свечей и плотности сигналов
🛠️ Инструменты и библиотеки
requests,pybit— доступ к APIpandas,numpy— обработка данных и расчёт индикаторовdatetime,time— управление временемthreading— многопоточностьtelebot— уведомления в Telegram (опционально)
📁 Структура проекта
bollinger_bot/
├── main.py # Логика реальной торговли
├── back.py # Бэктестинг
├── config.cfg # Конфигурация (опционально)
⚙️ Конфигурация
symbol = "ETHUSDT"
interval = "5m"
bb_period = 40
bb_std = 1
STOP_LOSS_PCT = 0.004
config = {
'min_cluster': 3,
'bull_quant': 0.75,
'bear_quant': 0.25,
'rsi': 60
}
📈 Получение исторических данных
def fetch_klines_paged(symbol, interval, total_bars, client):
...
return df
Функция обходит лимиты API, собирая полные данные по свечам.
📊 Расчёт индикаторов
- RSI — сглаженный период 450
- Bollinger Bands — SMA и стандартное отклонение
- CSI — оценка силы движения цены
- CSC — подтверждение кластерных сигналов
📌 Логика сигналов
def check_signal_row(row, prev_row):
...
return 'buy' or 'sell' or None
Условия:
- Пересечение полос Боллинджера
- Импульс CSI
- Порог RSI
- Кластерное подтверждение
🧪 Бэктестинг
if __name__ == '__main__':
...
trades_df.to_csv('trades_complete.csv', sep=';', index=False)
Сделки закрываются по стоп-лоссу или по времени. Скрипт выводит прибыль/убыток и историю сделок.
🤖 Реализация бота
Функционал:
- Проверка закрытых свечей
- Перерасчёт индикаторов
- Обнаружение сигналов
- Управление позициями через API Bybit
- Уведомления в Telegram
🔑 Ключевые функции
get_last_closed_candle()— только закрытые свечиcompute_csc(df)— кластерный анализ по последним свечамplace_order()— рыночные ордера со стоп-лоссомclose_position()— закрытие позицииcan_enter_again()— защита от повторного входаwhile True: ... time.sleep(3)— основной цикл, проверка каждые 5 минут
Результаты
Бэктест на 100,000 свечей (5 минут) дал 173.86% прибыли за год. С плечом 10× — это 1738% доходности. После учёта комиссий Bybit (0.1%) и проскальзывания (~0.02%) прибыль остаётся значительной.
Текстовый файл с кодом доступный по ссылке.
Заключение
Этот бот — надёжный фреймворк для алгоритмической торговли с использованием полос Боллинджера и дополнительных индикаторов. Он включает историческое тестирование и живую торговлю с реальными данными и уведомлениями. Несмотря на успешные бэктесты, живая торговля требует мониторинга, управления рисками и учёта рыночных условий.
