Skip to content

ROLL SPREAD

Intuição

O Roll Spread (Roll, 1984) estima o spread efetivo de bid-ask de forma implícita a partir da autocovariância (tipicamente negativa) dos retornos. É útil quando não há dados de book/bid-ask.

Definição

Com retornos r_t:

spread_t = 2 * sqrt(max(0, -Cov(r_t, r_{t-1}))), onde a covariância é estimada em janela rolling n.

Uso

from quantmaster.features.microstructure import roll_spread

df["roll_spread_20"] = roll_spread(df, window=20)

API

Source code in src/quantmaster/features/microstructure.py
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
def roll_spread(
    data: pd.DataFrame | pd.Series,
    *,
    window: int = 20,
    price_col: str = "close",
    log_returns: bool = True,
) -> 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)

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

    cov = rets.rolling(window).cov(rets.shift(1))
    spread = 2.0 * np.sqrt((-cov).clip(lower=0.0))
    spread = spread.where(np.isfinite(cov))

    spread.name = f"roll_spread_{window}"
    return spread