📊 Four Decades of Conditional Volatility Modeling
UQO Working Paper No. 46 — A Comprehensive Empirical Benchmark Across Assets, Frequencies, and Market Regimes
TL;DR — Across asset classes, horizons (1, 5, 22 days), market regimes and information sets, when — if ever — do more complex conditional volatility models reliably beat GARCH(1,1), and is any gain worth the numerical and computational cost? A pre-registered benchmark (protocol frozen at git tag
prereg-frozenbefore any test-period loss was computed) of 29 scored architectures × innovation laws (ARCH, GARCH, IGARCH, GARCH-M, GJR, TGARCH, EGARCH, NAGARCH, QGARCH, AVGARCH, APARCH, FIGARCH, component, MS-GARCH, GAS-t; HAR, Realized GARCH, HEAVY, GARCH-X; CCC/DCC/aDCC/BEKK) on 42 instruments (ETFs, stocks, futures, FX, crypto; FinData OS 1-minute and daily bars 2000–2026), with QLIKE against a full-day realized proxy, DM/MCS/SPA inference, VaR/ES backtests, regime splits, failure and compute accounting. Headline results are filled in byscripts/build_paper.pyafter the benchmark; see the Status section.
📌 Status
| Item | Value |
|---|---|
| Version | 1.0 (November 2026) — built autonomously on 2026-11-09 under the owner's brief (docs/BRIEF.md) |
| Protocol | docs/preregistered_protocol.md, frozen 2026-11-09 (commit 3590bd6, tag prereg-frozen) |
| SSRN / journal | not yet submitted |
| Code & data | code, manifests, checksums and aggregate results in this repository; raw bars under the FirstRate Data private licence (not redistributed) |
🎯 What this paper does
C1 a definition-faithful taxonomy and mathematical reference (configs/model_registry.yaml, model_cards/); C2 a multi-asset
out-of-sample benchmark with identical rolling origins, targets and losses within each information tier; C3 a
complexity–accuracy–robustness frontier (failures, inadmissible estimates, compute cost, regimes); C4 an open benchmark and
replication package (docs/replication_guide.md).
🏆 Headline results
See paper/main.pdf (Sections 6–10) and results/tables/pooled_main_test.csv; this table is regenerated by scripts/build_paper.py.
🗂 Repository layout
wp46_garch_benchmark/
├── CLAUDE.md · README.md · pyproject.toml · progress.md
├── configs/ study · instruments · model_registry · forecast_protocol (.yaml, frozen)
├── docs/ BRIEF · findata_audit · literature_matrix · preregistered_protocol · feasibility_report · methodology_decisions · data_dictionary · replication_guide
├── src/wp46/ findata_client · calendars · preprocessing · realized_measures · models (arch wrappers, custom MLE, baselines, multivariate, distributions)
│ · estimation (rolling driver) · scoring (losses, proxies, evaluate) · inference (DM, MCS, SPA, joint bootstrap) · diagnostics (VaR/ES) · reporting
├── scripts/ audit_findata · ingest_bars · build_panels · build_rcov · run_pilot · make_jobs · run_benchmark · node_run.sh · dispatch_nodes
│ · run_tier_c · compute_losses · analyze · analyze_tier_c · build_paper · build_references
├── tests/ unit · integration · simulation (Monte Carlo recovery) · replication (rugarch cross-check)
├── model_cards/ one card per architecture
├── results/ manifests (audit, ingest, panels, jobs, figure audit) · metrics (pilot, losses, analysis, cross-checks) · tables · figures · logs
└── paper/ main.tex · sections/ · appendices/ · tables/ (generated) · figures/ (generated) · references.bib (Crossref-verified) · main.pdf🚀 Quick start
See docs/replication_guide.md. Without a FinData credential: make test (unit, integration) and the synthetic fixture.
💾 Data
FinData OS (FirstRate Data): 1-minute and daily bars for 42 instruments, audited on 2026-11-09 (docs/findata_audit.md);
session conventions and realized measures in docs/data_dictionary.md; decisions D-01…D-15 in docs/methodology_decisions.md.
🔬 Methodology
Rolling window 1,000 days, re-estimation every 5 days with daily filtering; horizons 1/5/22 with same-horizon cumulative
proxies; QLIKE primary (MSE/MAE secondary; six proxy variants); DM-HAC, 90 % MCS, SPA, joint block bootstrap across instruments,
Holm counts; VaR/ES 1 %/5 % (Kupiec, Christoffersen, DQ, FZ0); regimes defined without look-ahead; failure policy and compute
accounting (docs/preregistered_protocol.md).
📈 Figures & tables inventory
results/manifests/figure_audit.csv (sources of every figure); paper/tables/*.tex generated by scripts/build_paper.py.
⚠️ Limitations
Surviving liquid instruments only; vendor futures roll rule undocumented; crypto realized measures valid from 2022 only; FIEGARCH/FIAPARCH/HYGARCH/ST-GARCH/GARCH-MIDAS/SV/Realized EGARCH inventoried but not scored (no vetted implementation or outside the information set); Tier C at h = 1 only.
📖 Citation
@techreport{boucher2026garchbenchmark,
title = {Four Decades of Conditional Volatility Modeling: A Comprehensive Empirical Benchmark Across Assets, Frequencies, and Market Regimes},
author = {Boucher, Simon-Pierre},
year = {2026},
institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives},
type = {UQO Working Paper},
number = {46}
}👤 Author & contact
Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca — Département des sciences administratives, UQO.
📝 Notes
Folder named wp46_garch_benchmark as requested by the brief (standard slug convention otherwise). Pre-registration disclosure:
SPY 2024 forecast values (no losses) were inspected during driver smoke tests before the freeze (D-15).