SPB Git

spb/wp7_uqo Public

UQO Working Paper No. 7 — Options-implied information for cross-asset return and volatility prediction: evidence from 3.8B option contracts.

Python 66.5% TeX 32.7% Makefile 0.8%
7.5 KB · 149 lines markdown
Rendered Raw Blame History
1<!--2Author: Simon-Pierre Boucher3Contact: contact@spboucher.ai4-->56<div align="center">78# WP7 — The Options-Implied Information Content for Cross-Asset Return and Volatility Prediction910**Evidence from 3.8 Billion Option Contracts**1112*UQO Working Paper No. 7*1314[![Author](https://img.shields.io/badge/author-Simon--Pierre_Boucher-1f6feb?style=flat-square)](mailto:contact@spboucher.ai)15[![Contact](https://img.shields.io/badge/contact-contact%40spboucher.ai-brightgreen?style=flat-square&logo=maildotru&logoColor=white)](mailto:contact@spboucher.ai)16[![Institution](https://img.shields.io/badge/UQO-Sciences_administratives-00457c?style=flat-square)](https://uqo.ca)1718[![Paper](https://img.shields.io/badge/paper-29_pages-b31b1b?style=flat-square&logo=latex&logoColor=white)](paper/main.pdf)19[![Build](https://img.shields.io/badge/latexmk-passing-success?style=flat-square)](paper/main.tex)20[![References](https://img.shields.io/badge/references-45_(BibTeX)-8250df?style=flat-square)](paper/references.bib)21[![Python](https://img.shields.io/badge/python-3.11%2B-3776ab?style=flat-square&logo=python&logoColor=white)](requirements.txt)22[![Reproduction](https://img.shields.io/badge/reproduction-verified_(28%2F28_files)-success?style=flat-square)](AUDIT.md)23[![Results](https://img.shields.io/badge/results-41_CSV_tables-informational?style=flat-square)](results/)2425**Key findings**2627![Contracts](https://img.shields.io/badge/option_contracts-3.83_B-0b3d91?style=for-the-badge)28![Sample](https://img.shields.io/badge/panel-264%2C383_ticker--days_·_69_tickers_·_2010--2025-0b3d91?style=for-the-badge)2930![Sharpe](https://img.shields.io/badge/kurtosis_L%2FS_Sharpe-2.33_(t%3D19.8)-success?style=for-the-badge)31![RV](https://img.shields.io/badge/HAR%2BIV_ΔR²_(1d_RV)-%2B23.3%25-success?style=for-the-badge)32![Granger](https://img.shields.io/badge/IV_→_RV_Granger-100%25_of_tickers_(F%3D62.4)-success?style=for-the-badge)33![FEVD](https://img.shields.io/badge/RV_FEVD_by_IV_shocks_@20d-73.8%25-success?style=for-the-badge)34![Placebo](https://img.shields.io/badge/placebo_R²-0.0008_vs_actual_0.053-blueviolet?style=for-the-badge)3536</div>3738---3940## About4142Five research questions on the information content of equity option markets, answered with433.83 billion option contracts (11,077 underlyings, 2010–2025) merged with 11.5 billion44intraday OHLCV observations:4546| RQ | Question | Headline result |47|---|---|---|48| **RQ1** | Do implied moments predict cross-sectional returns? | Weekly yes (R² 4.8–19.3%), daily no; kurtosis L/S Sharpe **2.33** |49| **RQ2** | IV surface vs GARCH/HAR-RV for RV forecasting? | HAR+IV improves 1-day R² by **+23.3%**, robust in all 9 subperiods |50| **RQ3** | Implied−realized correlation → market stress? | Correlation ratio predicts stress at 5–20d ($t$: 3.91–8.30) |51| **RQ4** | Greeks decay by DTE; max-OI "price magnets"? | Info rises with DTE; magnet hypothesis **rejected** (47.0% < 50%) |52| **RQ5** | ML on the SPX surface vs the VIX? | HAR-RV beats RF/GBM and VIX OOS; 2w ATM IV = 50.8% of importance |5354## Author5556**Simon-Pierre Boucher** · Département des sciences administratives, Université du Québec en57Outaouais (UQO) · 📧 [contact@spboucher.ai](mailto:contact@spboucher.ai)5859## Repository layout6061```62wp7_uqo/63├── README.md              this file64├── AUDIT.md               pre-restructuring audit + reproducibility map + flags65├── CHANGES.md             everything that was moved, renamed, refactored, rewritten66├── requirements.txt       pinned Python dependencies67├── pyproject.toml         optional `pip install -e .` of the wp7 package68├── Makefile               make pipeline | figures | paper | all69├── data/70│   ├── raw/               external DuckDB stores (not shipped — see data/raw/README.md)71│   └── processed/         5 derived parquets (authoritative surviving data)72├── src/wp7/               analysis library (config, data_io, econometrics,73│                          forecasting, portfolio)74├── scripts/               numbered entry points 01–13 (see below)75├── results/               41 CSV result tables (all paper tables derive from these)76├── figures/               supplementary figures (the paper itself is tables-only)77├── paper/                 LaTeX source: main.tex + preamble.tex + sections/ +78│                          appendix/ + references.bib  →  main.pdf (29 pp.)79├── _verify/               reproduction evidence: rerun logs + CSV comparator80└── _old/                  local byte-for-byte backup of the original (untracked)81```8283## Setup8485```bash86python3 -m pip install -r requirements.txt87```8889No installation of the `wp7` package is required — every script bootstraps90`src/` onto its path. (Optional: `pip install -e .`)9192## Reproducing the results9394```bash95make pipeline    # runs scripts 02–13 (skips raw-dependent steps gracefully)96make figures     # supplementary figures from the result CSVs97make paper       # compiles paper/main.pdf with latexmk + bibtex98```99100The pipeline entry points, in execution order:101102| Script | Question | Needs raw stores? |103|---|---|---|104| `01_extract_data.py` | raw → processed parquets | **yes (entirely)** |105| `02_rq1_return_predictability.py` | RQ1 panel + Fama-MacBeth | no |106| `03_rq2_rv_forecasting.py` | RQ2 HAR-RV vs IV surface | no |107| `04_rq3_correlation_divergence.py` | RQ3 correlation divergence | stage 1 only |108| `05_rq4_greeks_decay_magnets.py` | RQ4 Greeks decay + magnets | part A; part B has a parquet fallback |109| `06_rq5_ml_rv_forecast.py` | RQ5 ML vs VIX | **yes (entirely)** |110| `07_descriptive_stats.py` | descriptive panels A–H | panels F, H only |111| `08_subperiod_regime.py` | subperiods, regimes, rolling R² | section B only |112| `09_portfolio_sorts.py` | portfolio sorts + double sorts | no |113| `10_robustness.py` | NW / clustered SE / quantile / ticker R² | section E only |114| `11_granger_var.py` | Granger, VAR, IRF, FEVD | no |115| `12_make_figures.py` | supplementary figures | no |116| `13_extended_robustness.py` | winsorization/NW-lag sensitivity, Spearman ICs, decile sorts, leave-one-year-out, placebo | no |117118The raw DuckDB stores no longer exist on this machine (see `AUDIT.md` §6.1);119raw-dependent steps detect their absence and skip themselves. Every table in120the paper is nonetheless backed by a shipped CSV in `results/`.121122**Reproduction status (2026-08-05):** all 28 regenerable result files were re-run123and compared against the originals — 10 byte-identical, 15 equal to floating-point124noise, 1 explained deviation (collinearity-degenerate t-statistics, RQ3), and 2125files newly regenerated that were missing from the original archive. Full details126in `AUDIT.md` §7 and `CHANGES.md`.127128## Configuration129130| Environment variable | Purpose | Default |131|---|---|---|132| `WP7_RAW_DATA_DIR` | location of the raw DuckDB stores | `data/raw/` |133| `WP7_RESULTS_DIR` | where scripts write result CSVs | `results/` |134135## Paper136137`paper/main.tex` (metadata + skeleton) → `preamble.tex`, one file per section under138`sections/`, appendix under `appendix/`, BibTeX bibliography in `references.bib`139(45 entries, all cited). Revision 1.1 adds four robustness subsections (estimator140sensitivity, rank-based information coefficients, decile sorts, temporal141stability + placebo) backed by `scripts/13_extended_robustness.py`.142Build: `make paper` or `cd paper && latexmk`.143144---145146<div align="center">147<sub>© 2026 Simon-Pierre Boucher · <a href="mailto:contact@spboucher.ai">contact@spboucher.ai</a> · Université du Québec en Outaouais</sub>148</div>149