SPB Git

Repository Public Research preview

histvar252.md 3.1 KB

# Model card — histvar252 (historical variance, 252 days)

# 1. Identity

  • model_id: histvar252 · family: baseline · tier: A · status: implemented · impl: ols (parameter-free, src/wp46/models/baselines.py::HistVar)
  • Label: Historical variance, 252 days · distributions (registry): empirical (standardised in-window returns for VaR)
  • Seminal citation: none (registry ref: null). Rolling sample variance is the classical "historical volatility" benchmark used e.g. in poon2003forecasting (survey) and hansen2005forecast.
  • Siblings: histvar66, histvar252 (same code, window 22 / 66).

# 2. Definition

$$\hat\sigma^2_{t+1|t} = \frac{1}{W}\sum_{i=0}^{W-1}\big(r_{t-i} - \bar r_{t,W}\big)^2,\qquad W = 252,\quad \bar r_{t,W} = \tfrac1W\sum_{i=0}^{W-1} r_{t-i},$$ i.e. np.var(r[-W:], ddof=0) (population variance around the window mean). No conditional-mean model beyond the window mean reported as mu; no innovation law (empirical standardised returns are used for VaR/ES).

# 3. Parameter space and admissibility

No estimated parameters; always "converged" and "admissible" (FitResult(..., loglik=nan, converged=True)). Requires at least 2 observations in the window (filter returns NaN otherwise).

# 4. Nesting and relations

Equal-weight moving average of squared demeaned returns — the limit of EWMA with uniform weights; distinct from constvar only by the window length (252 vs the 1,000-day estimation window) and the absence of a mean equation. histvar22/histvar66 differ only by W.

# 5. Estimation

None. HistVar.fit records the window mean of the 1,000-day estimation window as mu (time ≈ 0). filter returns the rolling W-day variance of the past returns (day t uses $r_{t-W..t-1}$, first value copied from the second).

# 6. Forecasting

forecast: $\hat\sigma^2_{t+k|t} = \operatorname{var}(r_{t-W+1..t})$ for all $k = 1..22$ (flat); cumulative $h$-day variance $= h \cdot \hat\sigma^2$. Mean forecast = window mean. Method recorded: direct.

# 7. Implementation

  • src/wp46/models/baselines.py::HistVar; dispatched by make_model("histvar252") in src/wp46/estimation/rolling.py.
  • Cross-check: none needed (deterministic sample moment); not in results/metrics/rugarch_crosscheck.json.
  • Tests: not run in the pilot (only histvar22 was); no dedicated unit test.

# 8. Known limitations / failure modes

Cannot fail numerically. One-year window: smooth but slow; close to constvar in spirit (window 252 vs 1,000); no reaction to recent shocks beyond the equal weight 1/252.

# 9. Computational footprint

Negligible (same code as histvar22, whose pilot median fit time is 0.000 s per refit).

# 10. Literature expectations

Hansen & Lunde (hansen2005forecast) and poon2003forecasting report historical-variance benchmarks dominated by GARCH-type models at the daily horizon; brownlees2011practical show the same in calm and crisis periods. Long windows are expected to be the weakest at h = 1 and relatively better at h = 22 (christoffersen2000how on horizon decay); the literature matrix lists all histvar* as floors.

Files main
Menu

Theme