Skip to content

Volume Volatility Ratio

Intuição

O Volume Volatility Ratio compara atividade (média de volume) com incerteza (volatilidade de retornos) em uma janela móvel. Pode capturar regimes de “muito volume para pouca volatilidade” e vice-versa.

Definição

Em uma janela n:

  • vol_mean = mean(volume)
  • sigma = std(returns)
  • VVR = log(vol_mean / sigma)

Uso

from quantmaster.features.volume import volume_volatility_ratio

df["vvr_20"] = volume_volatility_ratio(df, window=20)

API

Source code in src/quantmaster/features/volume.py
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
def volume_volatility_ratio(
    data: pd.DataFrame,
    *,
    window: int = 20,
    price_col: str = "close",
    volume_col: str = "volume",
    log_returns: bool = True,
) -> pd.Series:
    window = validate_positive_int(window, name="window")
    validate_columns(data, required=[price_col, volume_col])

    price = get_price_series(data, price_col=price_col).astype(float)
    volume = pd.to_numeric(data[volume_col], errors="coerce").astype(float)

    price = price.where(price > 0)
    volume = volume.where(volume > 0)

    if log_returns:
        rets = np.log(price).diff()
    else:
        rets = price.pct_change()

    vol = rets.rolling(window).std(ddof=1)
    vol_mean = volume.rolling(window).mean()

    ratio = (vol_mean / vol).where((vol_mean > 0) & (vol > 0))
    out = np.log(ratio)
    out.name = f"volume_volatility_ratio_{window}"
    return out