SPB Git

Repository Public Research preview

README.md 30.4 KB

UQO Working Paper No. 12 — Forecasting Realized Volatility Across Asset Classes

peer review: completed ✓ review score: 56.0 → 67.1 / 100 gain: +11.1 pts integrity: PASS reproducibility: R1 · reproduced from analysis data maturity: grade B referee reports: 6 review items addressed: 85

version: 0.3 · November 2026 pages: 83 figures: 12 tables: 26 numbered equations: 26 references: 91 words: 35 200

revised branch: review-20261103 @ 3104ce5 review commits: 29 ahead of main commits on main: 12 files: 96 Python: 24 files LaTeX: 23 files UQO: Sciences administratives

📄: Revised manuscript (PDF) 📖: Interactive reader 🔍: Review branch 🧾: Revision commits 🌐: Paper page

📈 In one sentence (revised, peer-reviewed version 0.3) — One out-of-sample race of 33 realized-variance forecasts on 25 instruments from four asset classes (2013–2026) shows that log-HAR is the relevant benchmark, lowering HAR's QLIKE by 25 percent (10 percent at the median); ridge on extended predictors beats log-HAR significantly on 64 percent of instruments at one day but ties it at one month, tree and deep learners are mostly worse, and net of costs no forecaster beats a turnover-free trailing-variance rule (smallest p = 0.23).

# 🔬 Peer review at a glance

This paper went through the full multi-referee review of the UQO working-paper series: 6 independent referee reports, 85 review items, an editorial decision (major revision), re-execution of the analysis, a complete revision of text, figures and tables, and an independent verification before sign-off. The revised manuscript and every change live on the branch review-20261103 of this repository (29 commits ahead of main, head 3104ce5, 2026-11-04).

Review scores before and after revision

Dimension Submitted Revised Δ
Originality 57.0 58.0 +1.0
Rigor 56.2 68.0 +11.8
Identification 52.2 68.0 +15.8
Data & reproducibility 52.5 70.0 +17.5
Robustness 56.0 70.0 +14.0
Writing 67.5 72.0 +4.5
Figures & tables 62.2 69.0 +6.8
Literature 59.2 75.0 +15.8
Weighted total 56.0 67.1 +11.1

Scientific integrity: PASS · Reproducibility: R1 · reproduced from analysis data · Maturity: grade B

# What the review changed

Peer review moved the benchmark from HAR in levels to log-HAR, against which the machine-learning gain is confined to the one-day horizon. Three earlier claims were withdrawn after errors were found: the one-month lead of a forecast combination, the failure of cross-asset transfer, and the conclusion that smooth forecasters beat accurate ones in volatility timing. A time-stamp error in the cryptocurrency data was also corrected and the affected forecasts re-run.

  • Benchmark: ridge on extended predictors beats HAR on 24 of 25 instruments → against log-HAR it is significantly better on 64 percent of instruments at one day, 12 percent at one week and 4 percent at one month.
  • Forecast combination: the inverse-MSE combination led at one month → withdrawn; its weights used targets not yet realized at the forecast origin.
  • Transfer to unseen assets: fails outside a homogeneous class → a pooled model without the target's identity has a median one-day QLIKE ratio to HAR of 0.937 and beats HAR on 19 of 25 instruments; the earlier collapse was an encoding artefact.
  • Volatility timing: smooth forecasters earn more than accurate ones net of costs → no forecaster beats a turnover-free trailing-variance rule under the panel statistic (smallest p = 0.23).
  • Value-at-Risk at 1 percent: no forecaster is calibrated → the Gaussian quantile passes on 23 percent of instrument–model pairs, a Student-t or filtered-historical-simulation quantile on 63 and 60 percent.
  • Cryptocurrency time stamps: treated as Eastern → established as UTC; same-day FX and futures predictors of crypto targets are now lagged one day, and no conclusion changed.

# Limitations stated in the revised paper

  • The cryptocurrency bars are not tick-cleaned; a bar-level filter would reduce the crypto gains further rather than enlarge them.
  • The deep learners are trained instrument by instrument, with one seed on 21 of the 25 instruments, and no pooled network was trained, so the deep-learning rows are a lower bound on what sequence models can do.
  • Window-length sensitivity was run at one re-estimation frequency, and jump statistics are biased upward for instruments with frequent zero 5-minute returns.
  • The raw data source has been retired and cannot be redistributed; the inputs are documented by checksums and archived, and the derived daily panel awaits a licence decision before deposit.

# Where to find the reviewed material

What Where
Revised manuscript (PDF, 83 pages) paper/main.pdf on review-20261103
Revised sources, code, figures and tables branch review-20261103
Commit-by-commit revision history review-20261103 commits
All branches (submitted main vs revised) branches
Interactive reader (figures, tables, citations) wp.spboucher.ai/papers/wp12/read
Paper page, abstract and citation formats wp.spboucher.ai/papers/wp12

# 🏆 Headline results (revised version)

Result What it is
−25% (−10% median) One-day mean QLIKE of log-HAR relative to HAR in levels, lower on all 25 instruments; the mean is dominated by a few instruments on which HAR in levels collapses (ratios of 0.34 for IWM and 0.30 for BTC), and the gain shrinks as the estimation window lengthens.
64% / 12% / 4% Share of instruments on which ridge on the extended predictor set is significantly better than log-HAR at one day, one week and one month (panel t = −4.88, −2.29, −0.09): a one-day gain and a tie at the monthly horizon. The gain comes from the predictors, not the estimator.
64% and 92% Share of instruments on which LightGBM on the extended set and the single-asset LSTM are significantly worse than log-HAR at one day; pooling the trees across instruments brings them to the level of log-HAR at one day and no further.
0.937, 19 of 25 Median one-day QLIKE ratio to HAR of a pooled LightGBM re-estimated without the target instrument and without its identifier, and the number of instruments on which it beats HAR; identity is worth about 4 percent of QLIKE at one day and nothing at one month.
p = 0.23 Smallest p-value for any forecaster against a turnover-free trailing-variance rule in volatility timing net of costs, under the panel statistic that accounts for common dates; cross-instrument intervals, which treat instruments as independent, exclude zero for 28 of 72 model–band pairs.
0.028 (s.e. 0.015) Paired net Sharpe difference of the LSTM, the highest-ranked forecaster in volatility timing net of 5 basis points, against HAR; it shrinks to 0.002 with a 20 percent no-trade band.
23% → 63% / 60% Share of instrument–model pairs passing the 1 percent VaR unconditional-coverage test with a Gaussian quantile versus a Student-t or filtered-historical-simulation quantile; no model passes on 80 percent or more of the instruments under any tail.
📄 Abstract

Which volatility forecaster should a multi-asset investor use, against which benchmark? One out-of-sample race of 33 forecasts—from HAR and GARCH to penalized regressions, tree ensembles, deep learners and combinations—is run under one protocol on 25 instruments from four asset classes, 2013–2026. Log-HAR is the relevant benchmark, lowering HAR's QLIKE by 25 percent (10 percent at the median). Ridge regression on extended predictors beats log-HAR significantly on 64 percent of instruments at one day but ties it at one month; LightGBM and single-asset deep learners are significantly worse on most instruments. A pooled model transfers to unseen instruments at one day. Net of costs, no forecaster beats a turnover-free trailing-variance rule under a panel statistic robust to common dates (smallest p = 0.23), although cross-instrument intervals exclude zero for 28 of 72 model–band pairs; a fat-tailed quantile restores one-percent VaR coverage for 60–63 percent of instrument–model pairs.

🧩 Contributions
  • One protocol across four asset classes — The target, rolling scheme, losses and inference are held fixed across equities and ETFs, FX, cryptocurrencies and futures, extending single-market races; the ranking those races disagree about is stable across classes while the size of the gain is not.
  • Log-HAR as the benchmark — Forecasting log realized variance with a retransformation accounts for most of the machine-learning gain in every class; penalized linear learners on an extended information set add about 5 QLIKE points at one day only. The paper presents this as a cross-class replication of known remedies, not a discovery.
  • A cross-class leave-one-out transfer test — A pooled tree learner is re-estimated with each instrument excluded and its ticker identifier dropped, extending universal-model results beyond equities; volatility dynamics transfer at one day.
  • Economic value with paired inference — Every forecaster is carried through to volatility timing with transaction costs, no-trade bands, a turnover-free benchmark and paired inference, and to Value-at-Risk under Gaussian, Student-t and filtered-historical-simulation quantiles.
🗄️ Data
  • 1-minute bars for 25 instruments, January 2013 – July 2026 — Five ETFs and five large-capitalization stocks, five major currency pairs, five cryptocurrencies (BTC, ETH, SOL, ADA, XRP) and five continuous front-month futures (ES, NQ, CL, GC, ZN), plus the VIX as a predictor, downloaded on 10 August 2026 from the HF Market Data API. The pipeline processes 84.2 million 1-minute bars and produces a panel of 84,898 asset-days of realized measures.
  • Sessions and time stamps — Equities and ETFs use regular trading hours; FX and futures use the Eastern calendar day; cryptocurrency bars are stamped in UTC and use the UTC day, as established by an audit against public exchange candles. Days with too few valid bars are discarded and no further bar cleaning is applied.
  • Common evaluation sample — 59,798 asset-days at one day (59,606 at five days, 58,776 at 22 days) on which all 33 forecasts exist, starting in November 2016 for the series that begin in 2013 and later for the altcoins. Mean losses are computed per instrument and then averaged across the 25 instruments.
⚙️ Methodology
  • Target and rolling protocol — Average subsampled 5-minute realized variance over the next 1, 5 and 22 trading days; 1,000-day rolling estimation window, re-estimation every 22 days, daily forecasts, with estimation samples restricted to fully realized targets.
  • Thirty-three forecasts — Eleven HAR specifications (including HARQ, the semivariance HAR, a weighted-least-squares HAR and log-HAR), GARCH, GJR, EGARCH and Realized GARCH, thirteen penalized regressions and tree ensembles on the HAR set and on eighteen extended predictors, an LSTM and a Transformer encoder, a LightGBM pooled across instruments, and two combinations.
  • Forecast evaluation — QLIKE and MSE losses; Diebold–Mariano tests against three benchmarks (HAR in levels, log-HAR, ridge on the HAR set) with HAC variances, multiplicity adjustments across instruments and a panel statistic; model confidence sets; calibration, encompassing and fluctuation tests.
  • Robustness — Sub-periods, estimation-window length, alternative realized measures, implausible cryptocurrency days, leave-one-instrument-out transfer and random seeds.
  • Economic value — Volatility timing with transaction costs, no-trade bands and a turnover-free trailing-variance benchmark, utility gains, and 1 and 5 percent Value-at-Risk backtests under three tail assumptions.
♻️ Reproducibility
  • The replication package runs from one entry point with per-step logs under a pinned Python environment: it verifies the data manifest, builds the realized measures, produces the forecasts, runs the evaluation, robustness and economic-value blocks and generates every figure and table.
  • Numbers quoted in the text are macros written from the same outputs; thirty-nine unit and regression tests cover the chronology of every information set and the reproduction of the evaluation layer.
  • The data service was retired on 2 October 2026 and its terms do not permit redistribution of the raw bars; the package documents the inputs with a manifest of checksums, sizes, row counts and timestamps, and an archived copy of the cache is available to replicators on request.
  • An appendix corrigendum records the values that changed when the cross-asset predictors of the cryptocurrency targets were lagged by one day.
  • Realized GARCH and multi-step EGARCH forecasts differ at the fourth significant digit across processor architectures, and LSTM training on the GPU is not bitwise deterministic.

Keywords realized volatility · HAR model · GARCH · machine learning · forecast evaluation · model confidence set · volatility timing
JEL C22, C45, C53, G17

# 📚 How to cite

bibtex
@techreport{boucher2026wp12,
  author      = {Simon-Pierre Boucher},
  title       = {Forecasting Realized Volatility Across Asset Classes: HAR, GARCH, and Machine Learning in a Unified Multi-Asset Horse Race, 2013–2026},
  institution = {Université du Québec en Outaouais},
  type        = {UQO Working Paper No. 12},
  year        = {2026},
  note        = {Version 0.3, November 2026, revised after peer review},
  url         = {https://wp.spboucher.ai/papers/wp12}
}

ℹ️ Below: documentation of the main branch (the version submitted to review). Numbers and claims that the review corrected are superseded by the block above and by the branch review-20261103.


# 📉 Forecasting Realized Volatility Across Asset Classes

UQO Working Paper No. 12 — HAR, GARCH, and Machine Learning in a Unified Multi-Asset Horse Race, 2013–2026

Paper Python Data Reproducible Institution Author

TL;DR — One out-of-sample horse race of 27 forecasts of daily realized variance (6 HAR specifications, GARCH/GJR/EGARCH/Realized GARCH, 12 penalized regressions and tree ensembles, LSTM, Transformer, a pooled multi-asset LightGBM, 2 combinations) on 25 assets from four classes (equities/ETFs, FX, crypto, futures), 2013–2026, with a common 5-minute subsampled RV target, 1,000-day rolling windows, QLIKE/MSE, Diebold–Mariano, MCS, Mincer–Zarnowitz, encompassing, Giacomini–Rossi, volatility timing and VaR backtests, on a common evaluation sample of 59,323 asset-days. Log-linear models win: log-HAR cuts the QLIKE of HAR-in-levels by 25 % at h = 1 on all 25 assets; ridge on an extended predictor set is the best single model (ratio 0.70, significantly better than HAR on 24/25 assets). Trees and deep learners trail; pooling helps trees but does not transfer to unseen assets. Gains are largest for crypto (0.62) and smallest for FX (0.85). Net of 5 bps, smooth forecasters (LSTM, GARCH) beat accurate ones in volatility timing.


# 📌 Status

Item Value
Version 0.2 — draft, results complete (revised 2026-10-17 by the editorial-board review; v0.1 of August 2026 had no results)
SSRN not yet submitted (wait for version 1.0 after the open items in Limitations)
Journal —
Code & data pipeline executed end to end on 2026-10-17 (econometric family, pooled and leave-one-out models, evaluation, robustness, economic value, figures, tables); tabular ML and deep forecasts reused from the author's run of 2026-08-10 (unchanged code)
Review documents docs/REVIEW-REPORT.md, docs/CHANGELOG-REVISION.md, docs/bib-verification.csv; pre-revision PDF docs/main_pre-revision-20261017.pdf

# 🎯 What this paper does

Volatility-forecasting comparisons are usually run on one asset class with heterogeneous targets and evaluation designs, and they disagree on whether machine learning beats HAR. This paper fixes a single design — same RV estimator, same rolling window, same horizons (1, 5, 22 days), same losses, same inference, same common sample — and runs it on 25 liquid instruments spanning equities, FX, crypto and futures:

text
RV_t^{(5min, subsampled)} → {HAR, HAR-J, HAR-CJ, SHAR, HARQ, log-HAR | GARCH, GJR, EGARCH, Realized GARCH |
                              ridge/LASSO/elastic net/RF/XGBoost/LightGBM × {HAR set, extended set} | LSTM, Transformer |
                              pooled LightGBM (+ leave-one-out) | mean & inverse-MSE combinations}
→ rolling OOS (1,000 d, refit 22 d) → QLIKE / MSE → DM, MCS, MZ, encompassing, GR → volatility timing, VaR

# 🏆 Headline results

Finding Evidence (file)
Log-HAR: QLIKE ratio to HAR 0.75 / 0.63 / 0.79 at h = 1 / 5 / 22; lower loss than HAR on 25/25 assets at h = 1 results/reproduced/losses_overall.csv, losses_by_ticker.csv
Ridge, extended set: 0.70 / 0.61 / 0.79; best model for 13/25 assets; DM significantly better than HAR on 24/25 assets at h = 1, worse on 0; in the 90 % MCS for 25/25 losses_overall.csv, dm_summary.csv, mcs_inclusion.csv
Inverse-MSE combination: 0.72 / 0.61 / 0.77 (best at one month) losses_overall.csv
Trees: RF-X 0.79 / 0.72 / 0.95, XGBoost-X 0.80 / 0.80 / 1.12, LightGBM-X 0.85 / 0.85 / 1.16; LSTM 1.33 / 1.05 / 1.05; Transformer 1.89 / 1.48 / 1.46 losses_overall.csv
Pooled LightGBM 0.77 / 0.70 / 0.95, beats asset-level LightGBM on 23/25 assets; leave-one-out transfer works only within FX (GBPUSD 0.123 vs HAR 0.128), fails for ETH/NVDA transferability.csv
By class (ridge-X, h = 1): crypto 0.62, equity 0.72, futures 0.78, FX 0.85 losses_by_class.csv
Realized GARCH 0.78 / 0.66 / 0.88 and better than GARCH(1,1) on 25/25 assets; daily GARCH/GJR/EGARCH 12–57 % worse than HAR losses_overall.csv
HARQ unstable (ratio 2.01 at h = 1; median loss on SPY better than HAR, mean dominated by a few collapsed forecasts) losses_by_ticker.csv, §5.2
Gains over HAR shrink over time (ridge-X ratio 0.51 pre-2020 → 0.88 in 2024–26) and grow with the noise of the RV measure (log-HAR/HAR 0.43 with 1-min RV, 0.72 with 5-min, 0.86 with kernel) subperiod_losses.csv, frequency_sensitivity.csv
Volatility timing net of 5 bps: Sharpe LSTM 0.38, GARCH 0.35, HAR 0.34, ridge-X 0.30, LightGBM-X 0.26; utility gain vs HAR +33 bps (LSTM), −47 (ridge-X), −121 (LightGBM-X); at 0 bps all ≈ 0.39–0.41 timing_overall.csv, timing_by_ticker.csv, utility_summary.csv
VaR 5 %: all calibrated (ridge-X passes Kupiec/CC on 96/96 % of assets); VaR 1 %: violation rates 1.6–2.2 %, all fail var_summary.csv

# 🗂 Repository layout

text
realized-volatility-horse-race/
├── config.yaml               # universe, sample, RV settings, horizons, models, seeds
├── data/
│   ├── raw/                  # parquet cache from HF Market Data (1.6 GB, see data/raw/README.md) — not committed
│   └── processed/            # rv_<ticker>.parquet, panel.parquet, forecasts/, merged_forecasts.parquet — not committed
├── src/wp12/                 # api_client, data_pipeline, realized_vol, models_econ, models_ml, evaluation, robustness, backtest, plots
├── scripts/                  # 01_download_data … 08_make_tables, 09_build_paper; 90_verify_bib, 91_key_numbers (review utilities)
├── tests/                    # pytest: realized_vol, evaluation (18 tests)
├── results/                  # reproduced/ (25 CSV), tables/ (12 LaTeX fragments, generated)
├── figures/                  # 9 PNG figures (generated)
├── docs/                     # REVIEW-REPORT.md, CHANGELOG-REVISION.md, bib-verification.csv, pre-revision PDF
└── paper/                    # main.tex + sections/ + references.bib (73 entries, DOIs) → main.pdf

# 🚀 Quick start

bash
python3 -m pip install -r requirements.txt
python3 scripts/01_download_data.py                    # ≈ 1.6 GB of 1-min bars (HF Market Data API)
python3 scripts/02_build_rv.py                         # realized measures per ticker + panel
python3 scripts/03_run_models.py --family econ --workers 16   # 6 min on 18 cores
python3 scripts/03_run_models.py --family ml   --workers 16   # ≈ 2 h
python3 scripts/03_run_models.py --family deep --workers 8    # ≈ 20 min
python3 scripts/03_run_models.py --family pooled              # ≈ 10–25 min (3 processes)
python3 scripts/05_robustness.py --part loo-forecast          # ≈ 10–25 min (12 processes)
python3 scripts/04_evaluate.py                                # 35 s (incl. MCS, 5,000 bootstraps)
for p in subperiods loo gr outliers; do python3 scripts/05_robustness.py --part $p; done
python3 scripts/05_robustness.py --part freq                  # ≈ 20 min (not re-run in v0.2)
python3 scripts/05_robustness.py --part window                # ≈ 20 min (NOT run — see Limitations)
python3 scripts/03_run_models.py --family interpret           # SHAP + permutation importance
python3 scripts/06_economic_value.py && python3 scripts/07_make_figures.py && python3 scripts/08_make_tables.py
python3 scripts/91_key_numbers.py                             # prints every number quoted in the text
cd paper && make                                              # latexmk → main.pdf
python3 -m pytest tests/

# 🗃 Data

1-minute and daily bars for 25 assets + VIX, 2013-01-01 → 2026-07-31, from the HF Market Data API (93.8 million 1-minute bars); equities use regular trading hours, futures/FX/crypto the calendar day in US Eastern time (timestamps are served naive-Eastern; no time-zone conversion is applied). Headline RV = 5-minute subsampled realized variance (5 offset grids), with 1-minute RV, realized kernel (Parzen), bipower variation, tripower quarticity, realized quarticity, BNS jumps and semivariances as alternatives. Panel: 84,898 asset-days. Known issue: uncleaned crypto feeds contain days with implausible RV (> 1,000 % annualized) in 2013, 2017 and early 2021; see §3.4, §6.5 and the review report.

# 🔬 Methodology

  1. Realized measures (src/wp12/realized_vol.py): RV, subsampled RV, realized kernel, BPV, TQ, RQ, BNS jumps, semivariances.
  2. Econometric models (models_econ.py): HAR, HAR-J, HAR-CJ, SHAR, HARQ, log-HAR (direct projections); GARCH, GJR, EGARCH (arch, daily refiltering, RV-unit mapping); Realized GARCH (QML). Insanity filter on all forecasts.
  3. Machine learning (models_ml.py): ridge/LASSO/elastic net, RF, XGBoost, LightGBM on the HAR set and an extended set of 18 predictors (walk-forward tuning); LSTM and Transformer (torch, quarterly refit); pooled LightGBM with asset identifiers (+ leave-one-out); SHAP and permutation importance.
  4. Evaluation (evaluation.py, scripts/04): common sample per (asset, horizon); QLIKE/MSE; DM with Bartlett bandwidth h−1; MCS (T_max, stationary bootstrap, 5,000 reps); Mincer–Zarnowitz; encompassing; mean and inverse-MSE combinations.
  5. Robustness (robustness.py, scripts/05): sub-periods, RV measure, implausible crypto days, transferability, Giacomini–Rossi fluctuation test.
  6. Economic value (backtest.py, scripts/06): volatility timing (10 % target, cap 3, 0–20 bps), Fleming–Kirby–Ostdiek utility gains, VaR 1 %/5 % with Kupiec and Christoffersen tests.

# 🖼 Figures & tables inventory

Figure Content Table Content
fig_rv_series annualized RV by class representative summary_stats descriptive statistics by instrument
fig_measures 1-min RV vs 5-min ss RV vs kernel (SPY, BTC) losses_main QLIKE and ratio to HAR, 27 models × 3 horizons
fig_acf ACF of log RV losses_class QLIKE ratio by asset class
fig_qlike_ratio QLIKE ratio dot plot dm_mcs DM shares and MCS inclusion
fig_mcs MCS inclusion shares mz_encompassing Mincer–Zarnowitz and encompassing
fig_subperiods ratio by sub-period subperiods ratio by sub-period
fig_shap SHAP of pooled LightGBM sensitivity RV-measure sensitivity
fig_gr Giacomini–Rossi paths outliers crypto with/without implausible days
fig_timing cumulative timing returns, SPY transferability, timing, var, by_ticker_appendix transfer, timing, VaR, per-asset QLIKE

# ⚠️ Limitations

  • Window-length sensitivity (500/1,000/2,000 days) not run; RV-measure sensitivity not re-run after the GARCH-code corrections (unaffected code paths).
  • Tabular ML and deep forecasts reused from the author's 2026-08-10 run (code unchanged); the strictly positive insanity-filter bound added in v0.2 would only matter on the two ADA zero-RV days.
  • Crypto bars are not tick-cleaned; HARQ is unstable with 5-minute realized quarticity; deep learners are trained asset by asset with quarterly refits.
  • Timing targets volatility with intraday-variance forecasts and a single cost schedule; crypto and FX timing Sharpe ratios are ≈ 0 for every model.
  • 2026-10-17 run times exceeded the 30-minute budget assumed before the run (econ 6 + 2.5 + 2.5 min, pooled 24 min and leave-one-out 24 min in parallel, evaluation ≈ 3 min).

# 📝 Citation

bibtex
@techreport{boucher2026rvhorserace,
  author      = {Boucher, Simon-Pierre},
  title       = {Forecasting Realized Volatility Across Asset Classes: HAR, GARCH, and Machine Learning in a Unified Multi-Asset Horse Race, 2013--2026},
  institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives},
  type        = {Working Paper},
  number      = {12},
  year        = {2026},
  month       = {October},
  note        = {Version 0.2}
}

# 👤 Author & contact

Simon-Pierre Boucher — Département des sciences administratives, Université du Québec en Outaouais (UQO), Gatineau, QC. 📧 simon-pierre.boucher@uqo.ca

# 🗒 Notes

  • Harmonisation 2026-10-17: canonical title page, contact e-mail switched to UQO.
  • Revision 2026-10-17 (editorial board): version 0.1 → 0.2; introduction, results, robustness, economic value, conclusion, appendix and abstract written from the executed pipeline; GARCH-family forecasting bug (forecasts frozen between refits, one-day lag), Realized GARCH filter lag, MCS studentisation, missing GARCH insanity filter and zero lower bound of the filter corrected; common evaluation sample added; 16 verified references added, DOIs on all entries. Details in docs/CHANGELOG-REVISION.md and docs/REVIEW-REPORT.md.
  • scripts/90_verify_bib.py and scripts/91_key_numbers.py are review utilities, not pipeline steps.
Files main
Menu

Theme