Skip to content

RVOL (Relative Volume - log)

Intuição

O RVOL mede quão alto (ou baixo) está o volume atual em relação ao seu comportamento recente.

A versão em log transforma uma razão multiplicativa em uma escala aditiva:

  • Valores positivos indicam volume acima da média recente.
  • Valores negativos indicam volume abaixo da média recente.

Definição

Para uma janela window, definimos:

  • m_t = mean(volume_{t-window+1..t})
  • rvol_t = log(volume_t / m_t)

Uso

from quantmaster.features.volume import rvol

df["rvol_30"] = rvol(df, window=30)

API

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

    if isinstance(data, pd.Series):
        volume = pd.to_numeric(data, errors="coerce").astype(float)
    else:
        validate_columns(data, required=[volume_col])
        volume = pd.to_numeric(data[volume_col], errors="coerce").astype(float)

    rolling_mean = volume.rolling(window).mean()
    ratio = (volume / rolling_mean).where((volume > 0) & (rolling_mean > 0))

    out = np.log(ratio)
    out.name = f"rvol_{window}"
    return out