Skip to content

Runs Test Statistic

Intuição

O Runs Test (Wald–Wolfowitz) testa a aleatoriedade da sequência de sinais (positivo/negativo) dos retornos contando o número de runs (blocos consecutivos de mesmo sinal).

  • Poucos runs: possível clustering (persistência)
  • Muitos runs: possível alternância/reversão

Definição

Para uma janela n, definimos o sinal de r_t (ignorando zeros) e calculamos:

  • R: número de runs na janela
  • Z = (R - μ_R) / σ_R

com μ_R e σ_R dados pelas fórmulas padrão do teste (usando apenas dados dentro da janela).

Uso

from quantmaster.features.regime import runs_test_statistic

df["runs_z_60"] = runs_test_statistic(df, window=60)

API

Source code in src/quantmaster/features/regime.py
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
def runs_test_statistic(
    data: pd.DataFrame | pd.Series,
    *,
    window: int = 60,
    price_col: str = "close",
) -> pd.Series:
    window = validate_positive_int(window, name="window")

    price = get_price_series(data, price_col=price_col).astype(float)
    price = price.where(price > 0)
    rets = np.log(price).diff()

    signs = np.sign(rets)
    signs = signs.replace(0.0, np.nan)

    out = signs.rolling(window).apply(_runs_z_statistic, raw=True)
    out.name = f"runs_test_statistic_{window}"
    return out