Разработка бота на базе RSI
RSI (Relative Strength Index) — осциллятор перекупленности/перепроданности, разработанный Уэллсом Уайлдером в 1978 году. До сих пор один из самых используемых индикаторов. Бот на базе RSI прост в реализации, но требует аккуратной настройки: в трендовых условиях RSI даёт множество ложных сигналов.
Как работает RSI
RSI измеряет скорость и изменение ценовых движений. Формула:
RSI = 100 - (100 / (1 + RS))
RS = Average Gain / Average Loss (за N периодов, стандарт: 14)
Значения: 0–100. Традиционные уровни:
- Выше 70 — перекупленность (сигнал к продаже в контртрендовой стратегии)
- Ниже 30 — перепроданность (сигнал к покупке)
Реализация бота
import ccxt
import pandas_ta as ta
import asyncio
class RSIBot:
def __init__(self, symbol: str, rsi_period: int = 14,
oversold: float = 30, overbought: float = 70):
self.exchange = ccxt.binance({'apiKey': API_KEY, 'secret': SECRET})
self.symbol = symbol
self.rsi_period = rsi_period
self.oversold = oversold
self.overbought = overbought
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'])
df['rsi'] = ta.rsi(df['close'], length=self.rsi_period)
current_rsi = df['rsi'].iloc[-1]
if current_rsi < self.oversold:
return 'BUY'
elif current_rsi > self.overbought:
return 'SELL'
return 'HOLD'
Настройка под рыночные условия
Стандартные уровни 30/70 работают в боковике. На сильном тренде RSI может удерживаться выше 70 часами — бот будет продавать против тренда и терять. Решения:
- Повышать пороги на бычьем рынке: 40/80 вместо 30/70
- Фильтр тренда: торговать RSI только если 200 EMA подтверждает направление
- Дивергенция RSI: цена делает новый максимум, RSI — нет. Это более надёжный сигнал разворота чем просто уровень 70
Срок разработки: 1–2 недели включая backtesting на исторических данных и настройку параметров.







