Войти
Главная / Технический анализ / RSI в трейдинге: от теории до Python-графика с Plotly
Хотите зарабатывать на трейдинге?

Подписывайтесь на наш телеграм-канал для трейдеров — с глубокой аналитикой и рабочими стратегиями

Подписаться

RSI в трейдинге: от теории до Python-графика с Plotly

Как использовать силу технического анализа на практике? Разбираем один из самых популярных индикаторов — RSI. Пишем код, строим графики, и, конечно же, обсуждаем стратегии.

Что такое RSI?

RSI (Relative Strength Index) — это осциллятор, который измеряет скорость и изменение ценового движения. Впервые предложен Дж. Уэллсом Уайлдером в 1978 году, он до сих пор один из ключевых инструментов технического анализа.

RSI колеблется между 0 и 100:

  • Значения выше 70 говорят о перекупленности — возможен разворот вниз.
  • Значения ниже 30 говорят о перепроданности — возможен отскок вверх.

Главное — RSI показывает не цену, а импульс, то есть силу движения. Он может сигнализировать о том, что актив «перегрет», до того, как это станет очевидно на графике цены.

Преимущества и недостатки RSI

Плюсы:

  • Прост в интерпретации.
  • Хорошо работает в боковике.
  • Часто используется в популярных стратегиях (например, RSI + SMA).

Минусы:

  • Может давать ложные сигналы в тренде.
  • Не всегда успевает за резкими рыночными движениями.

Из-за минусов выше лучше всего применять RSI в связке с другими индикаторами или фильтрами.

Строим график RSI в Python с помощью Plotly

Давай напишем код, который:

  1. Загружает исторические данные.
  2. Строит свечной график.
  3. Добавляет под ним RSI с уровнями 30/70.

Шаг 1: Загружаем данные и готовим DataFrame

# Импорт библиотеки pandas для работы с таблицами
import pandas as pd
# Импорт модулей из plotly для построения графиков
import plotly.graph_objects as go
from plotly.subplots import make_subplots

# Загрузка CSV-файла с данными и преобразование столбца 'Open time' в формат даты
df = pd.read_csv("btc_4h_data_2018_to_2025.csv", parse_dates=["Open time"])

# Преобразование нужных столбцов в тип float для корректных математических операций
df["Open"] = df["Open"].astype(float)
df["High"] = df["High"].astype(float)
df["Low"] = df["Low"].astype(float)
df["Close"] = df["Close"].astype(float)
df.head(

Шаг 2: Считаем RSI

# Функция для вычисления RSI (Relative Strength Index)
def calculate_rsi(data, period=14):
    # Вычисление разницы между текущей и предыдущей ценой закрытия
    delta = data.diff()
    
    # Отделение положительных изменений (прибыль)
    gain = delta.where(delta > 0, 0)
    
    # Отделение отрицательных изменений (убыток)
    loss = -delta.where(delta < 0, 0)

    # Расчёт среднего значения прибыли за заданный период
    avg_gain = gain.rolling(window=period).mean()
    
    # Расчёт среднего значения убытка за заданный период
    avg_loss = loss.rolling(window=period).mean()

    # Расчёт отношения прибыли к убытку
    rs = avg_gain / avg_loss
    
    # Итоговая формула RSI
    rsi = 100 - (100 / (1 + rs))
    
    return rsi

df["RSI"] = calculate_rsi(df["Close"])

Здесь мы вычисляем изменения цены, делим их на «прибыльные» и «убыточные» участки, а затем считаем классическую формулу RSI.

Шаг 3: Строим график цены и RSI


# Создаём область для двух графиков (цена и RSI)
fig = make_subplots(
    rows=2, cols=1,                  # два ряда, один столбец
    shared_xaxes=True,              # общая ось X для обоих графиков
    vertical_spacing=0.03,          # отступ между графиками
    row_heights=[0.7, 0.3],         # пропорции высоты графиков (70% и 30%)
    subplot_titles=("Свечной график (OHLC)", "RSI (Relative Strength Index)")  # заголовки подграфиков
)

# Добавление свечного графика (OHLC) в первый ряд
fig.add_trace(go.Candlestick(
    x=df["Open time"],              # ось X — время открытия
    open=df["Open"],                # цена открытия
    high=df["High"],                # максимальная цена
    low=df["Low"],                  # минимальная цена
    close=df["Close"],              # цена закрытия
    name="OHLC"                     # имя графика в легенде
), row=1, col=1)

# Добавление линии RSI во второй ряд
fig.add_trace(go.Scatter(
    x=df["Open time"],              # ось X — время
    y=df["RSI"],                    # значение RSI
    mode="lines",                   # тип графика — линия
    name="RSI",                     # имя линии в легенде
    line=dict(color="white")         # цвет линии
), row=2, col=1)

# Добавляем горизонтальную линию на уровне 70 (перекупленность) во втором ряду
fig.add_hline(y=70, line_dash="dot", line_color="red", row=2, col=1)

# Добавляем горизонтальную линию на уровне 30 (перепроданность) во втором ряду
fig.add_hline(y=30, line_dash="dot", line_color="green", row=2, col=1)

# Настройка внешнего вида всего графика
fig.update_layout(
    title="График цены и RSI",             # заголовок графика
    xaxis2_title="Дата",                   # подпись оси X (для нижнего графика)
    yaxis1_title="Цена",                   # подпись оси Y верхнего графика
    yaxis2_title="RSI",                    # подпись оси Y нижнего графика
    xaxis_rangeslider_visible=False,       # отключаем ползунок под графиком
    template="plotly_dark",                # тёмная тема оформления
    height=800                             # общая высота фигуры
)

# Отображение финального графика
fig.show()

Вуаля! У нас есть живой, динамичный график, где можно легко отследить моменты перекупленности и перепроданности.

RSI в стратегии: как применять?

Теперь поговорим о реальных примерах использования RSI в трейдинге.

Простейшая стратегия

Условия:

  • Покупка, когда RSI < 30 (перепроданность).
  • Продажа, когда RSI > 70 (перекупленность).

Но! Важно не торговать «вслепую». Лучше подтверждать сигналы другими инструментами.

RSI + скользящая средняя (SMA)

  1. Используем RSI < 30 как потенциальный вход.
  2. Входим, если цена выше 200-дневной SMA — тренд бычий, вероятен отскок.
  3. Выходим, когда RSI > 60 или по трейлинг-стопу.

RSI-дивергенции

Если цена обновляет минимум, а RSI — нет, это может быть признаком ослабления тренда и намёком на разворот. Такие сигналы особенно сильны на дневных графиках.

Заключение

Наша команда не использует параметры RSI по умолчанию, мы обычно использует настройки 90 — 10 вместо классических 70 — 30, это дает нам возможность ловить более сильные импульсы.

  • RSI — это не магия, но очень полезный инструмент.
  • Он отлично показывает силу текущего движения, помогает ловить моменты «перегрева».
  • Его сила — в простоте и сочетании с другими фильтрами.
  • А в связке с Python и Plotly — ещё и отличное визуальное решение для аналитики.

КОД как всегда залил на GitHub. Не забудь подписаться на профиль GitHub и поставить звездочку репозиторию. Если ты интересуешься data science в трейдинге, подписывайся на блог — впереди больше разборов, кода и реальных стратегий.

Хотите разбираться в рынках и зарабатывать на них при любых условиях?

Подписывайтесь на наш Telegram-канал о финансах и Data Science в трейдинге:
– Делаем глубокую аналитику
– Тестируем и разрабатываем торговые стратегии
– Кодим индикаторы и алгоритмы
– Собираем базу знаний для трейдеров

Подписаться
Хотите разбираться в рынках и зарабатывать на них при любых условиях?

Подписывайтесь на наш Telegram-канал о финансах и Data Science в трейдинге:
– Делаем глубокую аналитику
– Тестируем и разрабатываем торговые стратегии
– Кодим индикаторы и алгоритмы
– Собираем базу знаний для трейдеров

Подписаться
📐 Торговля в шорт и лонг на бирже: как это работает и что выбрать новичку
Торговля на бирже подразумевает два основных подхода — шорт (короткая позиция) и лонг (долгая позиция). Разберём, в чём их суть,...
Читать далее
Аналитика XRPUSDT на новую неделю (#13)
XRPUSDT вторую неделю продолжает отдавать предпочтение покупателям, по чуть-чуть меняя движение с падения во флэт. Мы торгуем на покупку. Уровень...
Читать далее
Ошибки и фейлы при обучении ML-моделей для трейдинга: как не слить депозит
Привет, на связи Григорий, СЕО Trade2good. Сегодня машинное обучение и ИИ всё активнее используются в трейдинге — их применяют для...
Читать далее