Skip to content

RSI (Relative Strength Index)

Intuição

O RSI é um oscilador de momentum que mede a razão entre ganhos e perdas médios em uma janela, produzindo valores entre 0 e 100.

  • Valores altos (ex: > 70) são frequentemente interpretados como sobrecompra.
  • Valores baixos (ex: < 30) são frequentemente interpretados como sobrevenda.

A interpretação depende do ativo, horizonte e do regime de volatilidade; por isso, o RSI é melhor usado como feature em modelos ou como parte de um conjunto de regras.

Uso

from quantmaster.features.momentum import rsi

df["rsi_14"] = rsi(df, window=14)

API

Source code in src/quantmaster/features/momentum.py
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def rsi(
    data: pd.DataFrame | pd.Series,
    *,
    window: int = 14,
    price_col: str = "close",
) -> pd.Series:
    window = validate_positive_int(window, name="window")

    price = get_price_series(data, price_col=price_col).astype(float)

    delta = price.diff()
    gain = delta.clip(lower=0)
    loss = (-delta).clip(lower=0)

    avg_gain = gain.ewm(alpha=1 / window, adjust=False, min_periods=window).mean()
    avg_loss = loss.ewm(alpha=1 / window, adjust=False, min_periods=window).mean()

    rs = avg_gain / avg_loss
    out = 100 - (100 / (1 + rs))

    out = out.where(avg_loss != 0, 100.0)
    out = out.where(avg_gain != 0, 0.0)

    out.name = f"rsi_{window}"
    return out