Skip to content

SHAR COMPONENTS

Intuição

O SHAR Components é uma extensão do HAR que usa semivariâncias (RSV+ e RSV-) em múltiplos horizontes (diário/semanal/mensal) para capturar assimetria entre volatilidade positiva e negativa.

Definição

A função retorna 6 colunas:

  • rsv_pos_d, rsv_neg_d
  • rsv_pos_w, rsv_neg_w
  • rsv_pos_m, rsv_neg_m

onde as componentes semanal/mensal são médias rolling com weekly_window e monthly_window.

Uso

from quantmaster.features.volatility import shar_components

out = shar_components(df, weekly_window=5, monthly_window=22)
# df = df.join(out)

API

Source code in src/quantmaster/features/volatility.py
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
def shar_components(
    data: pd.DataFrame | pd.Series,
    *,
    price_col: str = "close",
    weekly_window: int = 5,
    monthly_window: int = 22,
    log_returns: bool = True,
) -> pd.DataFrame:
    weekly_window = validate_positive_int(weekly_window, name="weekly_window")
    monthly_window = validate_positive_int(monthly_window, name="monthly_window")

    rsv = realized_semivariance(data, price_col=price_col, log_returns=log_returns)
    pos = rsv["rsv_pos"].astype(float)
    neg = rsv["rsv_neg"].astype(float)

    out = pd.DataFrame(index=rsv.index)
    out["rsv_pos_d"] = pos
    out["rsv_neg_d"] = neg
    out["rsv_pos_w"] = pos.rolling(weekly_window).mean()
    out["rsv_neg_w"] = neg.rolling(weekly_window).mean()
    out["rsv_pos_m"] = pos.rolling(monthly_window).mean()
    out["rsv_neg_m"] = neg.rolling(monthly_window).mean()
    return out