Розробка бота на базі 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 на історичних даних та налагодження параметрів.







