WP46 model cards — index
One card per architecture of the binding registry configs/model_registry.yaml (37 entries: 29 implemented, 1 unsupported, 7 post-registration extension entries added 2026-11-09 — E-01, src/wp46/models/extensions.py; scored with the frozen protocol, reported separately as exploratory). Each card follows the same ten sections: 1 Identity · 2 Definition · 3 Parameter space and admissibility · 4 Nesting and relations · 5 Estimation · 6 Forecasting · 7 Implementation (file/class, library, cross-check evidence, tests) · 8 Known limitations / failure modes · 9 Computational footprint · 10 Literature expectations. Equations are those implemented in the code (src/wp46/models/{arch_models,custom,extensions,baselines,distributions}.py, src/wp46/estimation/rolling.py, arch 8.0.0 internals), not the textbook forms when they differ; such differences are listed in _discrepancies.md. Bibkeys refer to paper/references.bib only; references that would be needed but are absent are listed in _missing_references.md. No card reports a WP46 benchmark result (the benchmark has not been run); the only numbers quoted are the rugarch cross-check (results/metrics/rugarch_crosscheck.json), unit/simulation test tolerances, and pilot fit timings on the validation period (results/metrics/pilot/pilot_report.json, currently CL and EURUSD).
Common conventions: daily log returns in percent, variances in percent²; $r_t = \mu + \varepsilon_t$, $\varepsilon_t = \sigma_t z_t$; innovation laws standardised to unit variance (normal; Student-t bollerslev1987conditionally; GED nelson1991conditional; Hansen skew-t hansen1994autoregressive, arch parameterisations); rolling window 1,000 days, refit every 5 days, daily filtering with fixed parameters; per-step forecasts $E[\sigma^2_{t+k}\mid\mathcal F_t]$, k = 1..22, cumulative h-day variance = sum of the first h steps (h = 1, 5, 22); seed 46 + origin index for simulation forecasts (2,000 paths); only point estimates are used (no standard errors enter the benchmark).
| model_id | family | tier | implementation | distributions | status | card |
|---|---|---|---|---|---|---|
constvar |
baseline | A | arch 8.0.0 ConstantVariance |
normal | implemented | constvar.md |
histvar22 |
baseline | A | parameter-free (baselines.HistVar) |
empirical | implemented | histvar22.md |
histvar66 |
baseline | A | parameter-free (baselines.HistVar) |
empirical | implemented | histvar66.md |
histvar252 |
baseline | A | parameter-free (baselines.HistVar) |
empirical | implemented | histvar252.md |
ewma094 |
baseline | A | arch 8.0.0 EWMAVariance(0.94) |
normal | implemented | ewma094.md |
rm2006 |
baseline | A | arch 8.0.0 RiskMetrics2006 |
normal | implemented | rm2006.md |
arch5 |
classical | A | arch 8.0.0 ARCH(5) |
normal, t, ged, skewt | implemented | arch5.md |
garch11 |
classical | A | arch 8.0.0 GARCH(1,0,1) |
normal, t, ged, skewt | implemented (benchmark) | garch11.md |
garch21 |
classical | A | arch 8.0.0 GARCH(2,0,1) |
normal, t, ged, skewt | implemented | garch21.md |
garch12 |
classical | A | arch 8.0.0 GARCH(1,0,2) |
normal, t, ged, skewt | implemented | garch12.md |
igarch11 |
classical | A | custom IGARCH11 |
normal, t, ged, skewt | implemented | igarch11.md |
garchm11 |
classical | A | custom GARCHM11 |
normal, t, ged, skewt | implemented | garchm11.md |
gjr11 |
asymmetric | A | arch 8.0.0 GARCH(1,1,1) |
normal, t, ged, skewt | implemented | gjr11.md |
tarch11 |
asymmetric | A | arch 8.0.0 GARCH(1,1,1, power=1) (Zakoïan) |
normal, t, ged, skewt | implemented | tarch11.md |
egarch11 |
asymmetric | A | arch 8.0.0 EGARCH(1,1,1) |
normal, t, ged, skewt | implemented | egarch11.md |
nagarch11 |
asymmetric | A | custom NAGARCH11 |
normal, t, ged, skewt | implemented | nagarch11.md |
qgarch11 |
asymmetric | A | custom QGARCH11 |
normal, t, ged, skewt | implemented | qgarch11.md |
avgarch11 |
power | A | arch 8.0.0 GARCH(1,0,1, power=1) |
normal, t, ged, skewt | implemented | avgarch11.md |
aparch11 |
power | A | arch 8.0.0 APARCH(1,1,1) |
normal, t, ged, skewt | implemented | aparch11.md |
figarch11 |
fractional | A | arch 8.0.0 FIGARCH(1,1) (truncation 1000) |
normal, t, ged, skewt | implemented | figarch11.md |
fiegarch11 |
fractional | A | custom FIEGARCH11 (truncation 1000) |
normal, t | extension | fiegarch11.md |
fiaparch11 |
fractional | A | custom FIAPARCH11 (truncation 1000) |
normal, t | extension | fiaparch11.md |
hygarch11 |
fractional | A | custom HYGARCH11 (truncation 1000) |
normal, t | extension | hygarch11.md |
cgarch11 |
component | A | custom CGARCH11 |
normal, t, ged, skewt | implemented | cgarch11.md |
msgarch2 |
regime-switching | A | custom MSGARCH2 (Haas–Mittnik–Paolella) |
normal, t | implemented | msgarch2.md |
stgarch11 |
regime-switching | A | custom STGARCH11 (logistic) |
normal, t | extension | stgarch11.md |
garch_midas |
component | A | custom GARCHMIDAS (own monthly RV, K = 24) |
normal, t | extension | garch_midas.md |
gas_t11 |
score-driven | A | custom GAST11 |
t | implemented | gas_t11.md |
betategarch11 |
score-driven | A | custom BetaTEGARCH11 |
t | extension | betategarch11.md |
sv |
score-driven (registry grouping) | A | none | — | unsupported | sv.md |
rm_rw |
realized | B | parameter-free (baselines.RMRandomWalk) |
empirical | implemented | rm_rw.md |
har_rv |
realized | B | OLS (baselines.HARRV) |
empirical | implemented | har_rv.md |
loghar_rv |
realized | B | OLS (baselines.HARRV(log=True)) |
empirical | implemented | loghar_rv.md |
realgarch11 |
realized | B | custom RealGARCH11 |
normal, t | implemented | realgarch11.md |
heavy11 |
realized | B | custom HEAVY11 |
normal, t | implemented | heavy11.md |
garchx_rv11 |
realized | B | custom GARCHXRV11 |
normal, t | implemented | garchx_rv11.md |
realegarch11 |
realized | B | custom RealEGARCH11 |
normal, t | extension | realegarch11.md |
Companion files: _discrepancies.md (registry ↔ code ↔ literature differences found while writing the cards), _missing_references.md (references needed by the cards but absent from paper/references.bib).
Cross-check coverage at a glance (results/metrics/rugarch_crosscheck.json, rugarch 1.5-6, shared GJR-t fixture, log-likelihood difference ours − rugarch): garch11-t +0.041, garch11-skewt +0.039 (different skew-t families), gjr11-t +0.037, egarch11-t +0.013, aparch11-t +0.090, figarch11-t −1.471, igarch11-t +0.050, cgarch11-t +0.300, nagarch11-t +0.038; realgarch11 — rugarch did not converge (no comparison); tarch11 — rugarch fitted but no arch counterpart computed (no comparison). No library cross-check exists for garchm11, qgarch11, gas_t11, msgarch2, heavy11, garchx_rv11, arch5, garch21, garch12, avgarch11, the baselines and the HAR models. The seven extension entries have no external-package cross-check either, except the likelihood identity HYGARCH(amp = 1) = arch FIGARCH (tests/unit/test_extensions.py, tolerance 5.0); see _discrepancies.md, section "Extensions (E-01)".