# WP7 — The Options-Implied Information Content for Cross-Asset Return and Volatility Prediction
**Evidence from 3.8 Billion Option Contracts**
*UQO Working Paper No. 7*
[](mailto:contact@spboucher.ai)
[](mailto:contact@spboucher.ai)
[](https://uqo.ca)
[](paper/main.pdf)
[](paper/main.tex)
[-8250df?style=flat-square)](paper/references.bib)
[](requirements.txt)
[-success?style=flat-square)](AUDIT.md)
[](results/)
**Key findings**


-success?style=for-the-badge)
-%2B23.3%25-success?style=for-the-badge)
-success?style=for-the-badge)


---
## About
Five research questions on the information content of equity option markets, answered with
3.83 billion option contracts (11,077 underlyings, 2010–2025) merged with 11.5 billion
intraday OHLCV observations:
| RQ | Question | Headline result |
|---|---|---|
| **RQ1** | Do implied moments predict cross-sectional returns? | Weekly yes (R² 4.8–19.3%), daily no; kurtosis L/S Sharpe **2.33** |
| **RQ2** | IV surface vs GARCH/HAR-RV for RV forecasting? | HAR+IV improves 1-day R² by **+23.3%**, robust in all 9 subperiods |
| **RQ3** | Implied−realized correlation → market stress? | Correlation ratio predicts stress at 5–20d ($t$: 3.91–8.30) |
| **RQ4** | Greeks decay by DTE; max-OI "price magnets"? | Info rises with DTE; magnet hypothesis **rejected** (47.0% < 50%) |
| **RQ5** | ML on the SPX surface vs the VIX? | HAR-RV beats RF/GBM and VIX OOS; 2w ATM IV = 50.8% of importance |
## Author
**Simon-Pierre Boucher** · Département des sciences administratives, Université du Québec en
Outaouais (UQO) · 📧 [contact@spboucher.ai](mailto:contact@spboucher.ai)
## Repository layout
```
wp7_uqo/
├── README.md this file
├── AUDIT.md pre-restructuring audit + reproducibility map + flags
├── CHANGES.md everything that was moved, renamed, refactored, rewritten
├── requirements.txt pinned Python dependencies
├── pyproject.toml optional `pip install -e .` of the wp7 package
├── Makefile make pipeline | figures | paper | all
├── data/
│ ├── raw/ external DuckDB stores (not shipped — see data/raw/README.md)
│ └── processed/ 5 derived parquets (authoritative surviving data)
├── src/wp7/ analysis library (config, data_io, econometrics,
│ forecasting, portfolio)
├── scripts/ numbered entry points 01–13 (see below)
├── results/ 41 CSV result tables (all paper tables derive from these)
├── figures/ supplementary figures (the paper itself is tables-only)
├── paper/ LaTeX source: main.tex + preamble.tex + sections/ +
│ appendix/ + references.bib → main.pdf (29 pp.)
├── _verify/ reproduction evidence: rerun logs + CSV comparator
└── _old/ local byte-for-byte backup of the original (untracked)
```
## Setup
```bash
python3 -m pip install -r requirements.txt
```
No installation of the `wp7` package is required — every script bootstraps
`src/` onto its path. (Optional: `pip install -e .`)
## Reproducing the results
```bash
make pipeline # runs scripts 02–13 (skips raw-dependent steps gracefully)
make figures # supplementary figures from the result CSVs
make paper # compiles paper/main.pdf with latexmk + bibtex
```
The pipeline entry points, in execution order:
| Script | Question | Needs raw stores? |
|---|---|---|
| `01_extract_data.py` | raw → processed parquets | **yes (entirely)** |
| `02_rq1_return_predictability.py` | RQ1 panel + Fama-MacBeth | no |
| `03_rq2_rv_forecasting.py` | RQ2 HAR-RV vs IV surface | no |
| `04_rq3_correlation_divergence.py` | RQ3 correlation divergence | stage 1 only |
| `05_rq4_greeks_decay_magnets.py` | RQ4 Greeks decay + magnets | part A; part B has a parquet fallback |
| `06_rq5_ml_rv_forecast.py` | RQ5 ML vs VIX | **yes (entirely)** |
| `07_descriptive_stats.py` | descriptive panels A–H | panels F, H only |
| `08_subperiod_regime.py` | subperiods, regimes, rolling R² | section B only |
| `09_portfolio_sorts.py` | portfolio sorts + double sorts | no |
| `10_robustness.py` | NW / clustered SE / quantile / ticker R² | section E only |
| `11_granger_var.py` | Granger, VAR, IRF, FEVD | no |
| `12_make_figures.py` | supplementary figures | no |
| `13_extended_robustness.py` | winsorization/NW-lag sensitivity, Spearman ICs, decile sorts, leave-one-year-out, placebo | no |
The raw DuckDB stores no longer exist on this machine (see `AUDIT.md` §6.1);
raw-dependent steps detect their absence and skip themselves. Every table in
the paper is nonetheless backed by a shipped CSV in `results/`.
**Reproduction status (2026-08-05):** all 28 regenerable result files were re-run
and compared against the originals — 10 byte-identical, 15 equal to floating-point
noise, 1 explained deviation (collinearity-degenerate t-statistics, RQ3), and 2
files newly regenerated that were missing from the original archive. Full details
in `AUDIT.md` §7 and `CHANGES.md`.
## Configuration
| Environment variable | Purpose | Default |
|---|---|---|
| `WP7_RAW_DATA_DIR` | location of the raw DuckDB stores | `data/raw/` |
| `WP7_RESULTS_DIR` | where scripts write result CSVs | `results/` |
## Paper
`paper/main.tex` (metadata + skeleton) → `preamble.tex`, one file per section under
`sections/`, appendix under `appendix/`, BibTeX bibliography in `references.bib`
(45 entries, all cited). Revision 1.1 adds four robustness subsections (estimator
sensitivity, rank-based information coefficients, decile sorts, temporal
stability + placebo) backed by `scripts/13_extended_robustness.py`.
Build: `make paper` or `cd paper && latexmk`.
---