SPB Git

spb/wp46_uqo

Public
5.2 KB

# WP46 progress log

All times ET. "Done" means executed with the listed command and artefact; "planned" means not yet executed.

# Phase 0 — Inventory and literature (done 2026-11-09)

  • Repository reconnaissance: Recherche-UQO/ conventions (HARMONISATION.md), WP41 as the FinData template; folder finance/wp46_garch_benchmark, repo gitsrv:srv/git/wp46_uqo.git created 2026-11-09.
  • FinData audit: .venv/bin/python scripts/audit_findata.py → docs/findata_audit.md, results/manifests/findata_audit.json (live API, 42 candidates, 0 errors). Dedicated API key wp46_uqo_c (scopes read:market, query, export; two earlier keys revoked).
  • Literature: scripts/build_references.py → paper/references.bib (205 entries: 200 Crossref/arXiv/OpenAlex-verified + 5 manual URL), docs/literature_matrix.md, results/metrics/references_verification.json (1 unverified: Chung 1999, excluded).
  • Gate 0: PASS (evidence-backed instrument list; no invented endpoints).

# Phase 1 — Pre-registered protocol (done 2026-11-09, freeze tag prereg-frozen)

  • docs/preregistered_protocol.md, configs/{model_registry,forecast_protocol,study,instruments}.yaml, docs/methodology_decisions.md (D-01…D-15).
  • Disclosure: SPY 2024 forecast values (no losses) were inspected during driver smoke tests before the freeze (D-15); the pilot (Phase 2) used the validation period 2012–2015 only.

# Phase 2 — Trusted data and pilot (done 2026-11-09)

  • Ingestion on M3U96a: scripts/ingest_bars.py --workers 3 (1-min + daily bars, 42 instruments + VIX/SPX; manifest results/manifests/ingest_manifest.json with dataset versions and SHA-256) — cache M3U96a:~/wp46-cache/bars (not in git).
  • Panels: scripts/build_panels.py (3 runs: tz fix, per-instrument session length D-05, crypto cutoff D-06) → ~/wp46-cache/panels/*.parquet on M3U96a, laptop and the 5 other compute nodes; results/manifests/panels_manifest.json.
  • Tests: pytest tests/unit tests/integration (19 passed), pytest tests/simulation -m slow (5 passed after fixing the NAGARCH parameter index in the test), pytest tests/replication -m r (rugarch 1.5-6 cross-check PASS; results/metrics/rugarch_crosscheck.json).
  • Pilot: scripts/run_pilot.py --symbols SPY,AAPL and --symbols CL,EURUSD (validation period) → results/metrics/pilot/; leakage check passed (future returns perturbed → forecasts unchanged).
  • Gate 2: PASS (see docs/feasibility_report.md).

# Phase 3–5 — Benchmark, realized/multivariate tiers, inference (in progress)

  • Job list: scripts/make_jobs.py --name main → 3,276 jobs (42 instruments × 29 implemented models × distributions), OOS 2012-01-03 → 2026-10-30.
  • Dispatch: scripts/dispatch_nodes.py launch --jobs results/manifests/jobs_main.json --name main (M3U96a/M3U96b/M2U64/M5M36/M4M64a/M4M64c).

# Open issues

  • FIGARCH: arch and rugarch differ by 1.47 log-likelihood units on the fixture (truncation/constraints) — caveat in the model card.
  • Crypto realized measures unusable before 2022 (D-06): crypto Tier B / proxy-based evaluation covers 2022–2026 only.

# Amendments after the freeze

  • A-01 (2026-11-09, during the main run): the arch wrapper passed a seeded generator only for Gaussian innovations; simulation forecasts (h > 1) of EGARCH/APARCH/TGARCH/AVGARCH with t/GED/skew-t innovations were drawn from an unseeded generator. Fixed (DISTS[dist](seed=seed)); the 504 affected jobs are re-run so that every forecast is bit-reproducible. No change to the protocol (Monte Carlo noise only; 2,000 paths). Found by the model-card audit (model_cards/_discrepancies.md).
  • A-02 (2026-11-09): registry bibkeys corrected to the verified keys (zumbach2009riskmetrics, gonzalezrivera1998smooth, hansen2016exponential). Documentation only.
  • A-03 (2026-11-09): tests added for GARCH-M (nesting of GARCH(1,1) at delta = 0, recovery), QGARCH (recovery), and cross-checks extended to TGARCH (rugarch fGARCH/TGARCH), GAS-t (R package GAS, inverse-information scaling), GARCH-X return equation (rugarch external regressor) and MS-GARCH likelihood and 22-step forecasts (R package MSGARCH). Verification only.
  • A-04 (2026-11-09): performance bug — custom models with skew-t innovations recomputed kappa = E[z^2 1{z<0}] (20,000 quantile evaluations) at every likelihood evaluation, making those jobs ~100x slower and stalling the nodes; kappa is now held at 0.5 inside the optimizer (it only enters the first-observation initialization of the GJR recursion) and computed exactly once after the fit. Runs restarted with the fix; completed jobs kept (results unaffected: the likelihood maximised is identical up to the first-observation term of the custom GJR, which is not a registry model).
  • Note (2026-11-09): the first main run wrote one _runs.jsonl per node under the same name, so the rsync merge kept a single node's manifest, and cpu_s was the cumulative CPU of the worker process. Compute accounting in the paper therefore uses the complete per-refit (time_s) and per-origin (time_fc_s) timings stored in every fits/forecast table (exact, 3,276 jobs); maxrss is reported as the per-worker peak (≈ 0.4 GB). run_benchmark.py now records per-job CPU deltas in _runs_<host>.jsonl.
Files · main
Menu

Theme