CLAUDE.md — UQO Research WP46: The Great GARCH Benchmark
Project ID: wp46_uqo · Folder: Recherche-UQO/finance/wp46_garch_benchmark · Repo: gitsrv:srv/git/wp46_uqo.git
Working title: Four Decades of Conditional Volatility Modeling: A Comprehensive Empirical Benchmark Across Assets,
Frequencies, and Market Regimes · PI: Simon-Pierre Boucher (UQO) · Language: English.
The owner's original brief is kept verbatim in docs/BRIEF.md and is the authoritative text; this file condenses it and
records the decisions taken while building (see docs/methodology_decisions.md, progress.md).
Core question
Across asset classes, horizons (1, 5, 22 days), 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?
Hard rules (non-negotiable)
- Never fabricate data, estimates, references, DOIs, p-values, run outcomes or novelty. Planned ≠ completed:
progress.mdanddocs/PHASE_N_REPORT.mdseparate the two; every number in the paper is generated by code fromresults/. - Pre-registration:
docs/preregistered_protocol.mdis frozen (git tagprereg-frozen) BEFORE any out-of-sample test loss is inspected. The test period is never used for selecting orders, optimizer settings, regime definitions or losses. - Data: FinData OS (
https://findata.spboucher.ai/api/v1, FirstRate Data private licence) is the only primary source. No raw bars in git, logs, figures, manuscript or release; aggregate forecasts/losses only. Keys only from~/Desktop/Cluster/secrets/findata/api-key-claude-code.txtor$FINDATA_API_KEY; never logged. - Units are explicit everywhere: daily log returns in percent; variances in percent²; forecasts are conditional variances of the h-day cumulative return matched to a same-horizon positive proxy.
- Failed fits are recorded as failures (never silently replaced by a baseline); unsupported model × distribution pairs are recorded as unsupported, not as bad performance.
- Every accepted implementation has: unit tests (recursion, likelihood, admissibility, multi-step), a likelihood
cross-check against
arch8.0.0 and/orrugarch1.5-6 on a shared fixture, seeded simulation recovery, and a model card. - No external publication, push to a new remote, SSRN deposit or paid compute without explicit authorization.
Pushing to the private
gitsrvmirror is routine. - Remote-first: computation runs on the MacLustr nodes (
~/wp46_uqoclones), the laptop is the LaTeX/mirror host.
Where things are
| Item | Location |
|---|---|
| Brief / decisions / progress | docs/BRIEF.md, docs/methodology_decisions.md, progress.md |
| Configs (frozen by the protocol) | configs/{study,instruments,model_registry,forecast_protocol}.yaml |
| Code | src/wp46/{findata_client,calendars,preprocessing,realized_measures,models,estimation,forecasts,scoring,inference,diagnostics,reporting} |
| Scripts | scripts/{audit_findata,run_pilot,run_benchmark,build_paper,…}.py |
| Tests | tests/{unit,integration,simulation,replication} (pytest; live tests need WP46_LIVE=1; R tests need rugarch) |
| Docs | docs/{findata_audit,literature_matrix,preregistered_protocol,feasibility_report,methodology_decisions,data_dictionary,replication_guide}.md |
| Model cards | model_cards/<slug>.md |
| Results | results/{manifests,metrics,figures,tables,logs} (forecast parquet files under results/forecasts/ are gitignored) |
| Paper | paper/main.tex, sections/, appendices/, figures/, tables/, references.bib (Crossref-verified) |
Compute
Data node M3U96a (hosts FinData; FINDATA_BASE_URL=http://127.0.0.1:8600/api/v1 there, http://192.168.2.80:8600/api/v1
from the LAN). Benchmark shards on M3U96a/M3U96b/M2U64/M5M36/M4M64a/M4M64c (scripts/node_run.sh). Cache
~/wp46-cache (outside git). Laptop: Python 3.14 + arch 8.0.0, R 4.6.1 + rugarch 1.5-6 for cross-checks.