SPB Git

spb/wp46_uqo

Public
11.2 KB

UQO Working Paper No. 46 — Four Decades of Conditional Volatility Modeling

peer review: not yet peer reviewed field: Finance & Economics

commits: 38 last commit: 2026-11-09 files: 314 Python: 59 files LaTeX: 33 files Shell: 2 files UQO: Sciences administratives

📄: Manuscript (PDF) 🧾: Commit history 🌐: Reviewed papers of the series

📈 In one sentence — 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-frozen before 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 by scripts/build_paper.py after the benchmark; see the Status section.

# 🔬 Review status

This working paper has not yet gone through the multi-referee review of the UQO working-paper series (blinded referee reports, editorial decision, re-execution, full revision, independent verification). Its results should be read as preliminary. Only reviewed papers of the series are presented on wp.spboucher.ai and www.spboucher.ai.


# 📊 Four Decades of Conditional Volatility Modeling

UQO Working Paper No. 46 — A Comprehensive Empirical Benchmark Across Assets, Frequencies, and Market Regimes

Paper Python Data Reproducible Institution Author

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-frozen before 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 by scripts/build_paper.py after 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 (test period 2016-01-04 → 2026-10-30, pre-registered set, QLIKE ratio to GARCH(1,1)-normal, equal-weight mean over 42 instruments, 90 % joint block-bootstrap CI)

Finding h = 1 h = 22 Evidence
Best daily (Tier A) architecture: FIGARCH(1,d,1)-GED 0.966 [0.95, 0.98] 0.964 results/tables/pooled_main_test.csv
Component GARCH-t / GARCH(1,1)-t / GARCH(1,1)-skew-t 0.977 / 0.991 / 0.992 1.018 / 0.980 / 0.976 idem
Asymmetric models (GJR-t, TGARCH-t, APARCH-t) — immaterial on average, 0.93–0.97 on equities only 0.999 / 0.998 / 1.006 0.979 / 0.942 / 0.967 pooled_by_class_main_test.csv
MS-GARCH(2)-t, GAS-t, ARCH(5)-t, EWMA, hist. var. 22d 1.006 / 1.021 / 1.100 / 1.042 / 1.265 1.032 / 0.975 / 1.207 / 1.142 / 1.481 idem
Unconstrained EGARCH: explosive forecasts on ≈ 1/3 of instruments (α < 0, β ≈ 1) mean 2·10⁶ (trimmed 2·10⁵) — §6, A-06; constrained twin in §11
Realized tier (one day of intraday data): log-HAR / GARCH-X-t / HEAVY-t / Realized GARCH-N 0.864 / 0.862 / 0.864 / 0.885 (wins on 25–31 of 42) 0.929 / 1.028 / 1.027 / 0.949 tab_pooled_tierB.tex
Tails: 1 % VaR median breach rate (UC rejection share): GARCH-N 1.84 % (90 %), -t 1.30 % (36 %), -skew-t 1.21 % (10 %) tailrisk_main_test.csv
Tier C: DCC / aDCC vs CCC (mv-QLIKE) equity basket 0.85, cross-asset 0.97 tier_c_test.csv
Failures: estimation failures < 0.5 %; inadmissible fat-tailed GARCH fits 4–7 %; compute ≈ 90 CPU-h for 3,276 jobs accounting_main_test.csv

Regimes: rankings stable across trailing-volatility terciles; during the COVID jump realized-measure models gain 15–29 % and asymmetric models lose 6–9 %. Seven post-registration extensions (ST-GARCH, Beta-t-EGARCH, Realized EGARCH, GARCH-MIDAS, HYGARCH, FIAPARCH, FIEGARCH) and the constrained EGARCH are reported separately (§11, exploratory).

# 🗂 Repository layout

text
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

bibtex
@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).

Files · main
Menu

Theme