Commit
révision scientifique complète (editorial board, 2026-10-17)
- Correction de l'alignement des cibles multi-jours (ret_5d / rv_fwd_5d étaient des fenêtres rétrospectives) ; tous les résultats hebdomadaires recalculés, résultats v1.1 rétractés - Inférence des tris (Newey-West), double tri par portefeuilles, stratégies calendar-time avec turnover mesuré et coûts ; RQ2 sur échantillon commun, sans colinéarité, DM sur 30 titres ; RQ3 sans design singulier (NW(h)) ; FEVD Cholesky (deux ordres) - Tables du papier générées (scripts/14) ; bibliographie 45 -> 97 références vérifiées (Crossref) - Sections réécrites, v1.2 October 2026, main_anon recompilé ; docs/REVIEW-REPORT.md et docs/CHANGELOG-REVISION.md ; CSV v1.1 conservés dans results/_pre-revision-20261017/ Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
modified
Makefile
+2 −1
@@ -23,7 +23,8 @@ ANALYSIS_SCRIPTS := \ | ||
| 23 | 23 | scripts/09_portfolio_sorts.py \ |
| 24 | 24 | scripts/10_robustness.py \ |
| 25 | 25 | scripts/11_granger_var.py \ |
| 26 | − scripts/13_extended_robustness.py | |
| 26 | + scripts/13_extended_robustness.py \ | |
| 27 | + scripts/14_make_paper_tables.py | |
| 27 | 28 | |
| 28 | 29 | .PHONY: all pipeline extract figures paper clean-paper |
| 29 | 30 | |
modified
README.md
+68 −55
@@ -3,14 +3,16 @@ | ||
| 3 | 3 | |
| 4 | 4 | **UQO Working Paper No. 7** — *Evidence from 3.8 Billion Option Contracts* |
| 5 | 5 | |
| 6 | −[-b31b1b?logo=latex&logoColor=white)](paper/main.pdf) | |
| 6 | +[-b31b1b?logo=latex&logoColor=white)](paper/main.pdf) | |
| 7 | 7 | [](requirements.txt) |
| 8 | 8 | [](data/raw/README.md) |
| 9 | −[](docs/AUDIT.md) | |
| 9 | +[](docs/CHANGELOG-REVISION.md) | |
| 10 | 10 | [](https://uqo.ca) |
| 11 | 11 | [](mailto:simon-pierre.boucher@uqo.ca) |
| 12 | 12 | |
| 13 | −> **TL;DR** — 3.83 billion option contracts on 11,077 underlyings (2010–2025) are merged with 11.5 billion intraday OHLCV bars across stocks, ETFs, indices, futures, FX and crypto. Implied kurtosis, skewness and put–call ratios predict 5-day returns (kurtosis long–short **Sharpe 2.33**, t = 19.8); adding IV-surface features to HAR-RV raises 1-day RV forecast R² by **+23.3 %** (0.359 → 0.442) in every subperiod; the implied/realized correlation ratio predicts market stress at 5–20 days (t = 3.9–8.3); ATM IV Granger-causes RV in **100 %** of tickers and explains **73.8 %** of its 20-day FEVD. Everything survives HAC, double clustering, quantiles, winsorization, leave-one-year-out and a within-ticker placebo. | |
| 13 | +> **TL;DR** — A daily panel of option-implied features and 5-minute realized variances for 69 liquid US underlyings (49 large stocks, 17 ETFs, 3 indices; 264,383 ticker-days, 2010–2025) is built from 3.83 billion option records. Option-implied features predict weekly returns in a statistically detectable but economically marginal way (R² **0.3 %** for stocks, 0.6 % ETFs, 1.0 % indices; only the 25δ skew survives two-way clustering; one strategy of fourteen is profitable after 10 bps, with t = 2.2). The IV surface raises the HAR-RV R² from **0.415 to 0.457** (1-day) and **0.421 to 0.515** (5-day) on a common sample, in every subperiod; out of sample the gain holds under MSE but not under QLIKE. The implied/realized correlation ratio predicts stress at 5–20 days (t 2.3–4.1); ATM IV Granger-causes RV in 100 % of tickers but explains **20–29 %** of its 20-day FEVD. Price magnets rejected; tree-based ML does not beat HAR-RV. | |
| 14 | +> | |
| 15 | +> ⚠️ **Version 1.2 (2026-10-17) corrects a target-alignment error in v1.1**: the 5-day "forward" targets were trailing windows (r_{t−3}+…+r_{t+1}). The v1.1 headline results (weekly R² 5–19 %, kurtosis Sharpe 2.33, R²_OOS 0.99) are withdrawn. See `docs/CHANGELOG-REVISION.md`. | |
| 14 | 16 | |
| 15 | 17 | --- |
| 16 | 18 | |
@@ -18,35 +20,38 @@ | ||
| 18 | 20 | |
| 19 | 21 | | Item | Value | |
| 20 | 22 | |---|---| |
| 21 | −| Version | 1.1 (May 2026) | | |
| 22 | −| SSRN | [7626643](https://ssrn.com/abstract=7626643) — PRELIMINARY_UPLOAD 2026-10-17 (SSRN comments pending, see dashboard) | | |
| 23 | −| Journal | — | | |
| 24 | −| Code & data | reproducible from `scripts/` (raw DuckDB stores no longer available, derived parquets shipped) | | |
| 23 | +| Version | **1.2 (October 2026)** — revised 2026-10-17 (editorial-board review; `docs/REVIEW-REPORT.md`, `docs/CHANGELOG-REVISION.md`) | | |
| 24 | +| SSRN | [7626643](https://ssrn.com/abstract=7626643) — uploaded 2026-10-17 **with the v1.1 results; must be replaced by `paper/main.pdf` (v1.2)** | | |
| 25 | +| Journal | target *Journal of Futures Markets* (double-anonymous; `paper/main_anon.pdf`); fallback JBF / JFM. Not yet submitted | | |
| 26 | +| Code & data | parquet-only pipeline reproducible in < 2 min (`make pipeline`); raw DuckDB stores no longer available | | |
| 25 | 27 | |
| 26 | 28 | ## 🎯 What this paper does |
| 27 | 29 | |
| 28 | −Five research questions on the information content of equity option markets, answered on the largest options panel assembled for this purpose: | |
| 30 | +Five research questions on the information content of equity option markets, answered on a panel of 69 liquid underlyings: | |
| 29 | 31 | |
| 30 | −| RQ | Question | Headline result | | |
| 32 | +| RQ | Question | Result (v1.2) | | |
| 31 | 33 | |---|---|---| |
| 32 | −| **RQ1** | Do implied moments predict cross-sectional returns? | Weekly yes (R² 4.8–19.3 %), daily no; kurtosis L/S Sharpe **2.33** | | |
| 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 | | |
| 34 | −| **RQ3** | Implied − realized correlation → market stress? | Correlation ratio predicts stress at 5–20 d (t: 3.91–8.30) | | |
| 35 | −| **RQ4** | Greeks decay by DTE; max-OI "price magnets"? | Information rises with DTE; magnet hypothesis **rejected** (47.0 % < 50 %) | | |
| 36 | −| **RQ5** | ML on the SPX surface vs the VIX? | HAR-RV beats RF/GBM and VIX out of sample; 2-week ATM IV = 50.8 % of importance | | |
| 34 | +| **RQ1** | Do implied moments predict cross-sectional returns, and is it tradable? | Weekly R² 0.3 % (stocks) → 1.0 % (indices); daily ≈ 0; only Skew₂₅δ robust (t_DC 2.91, positive sign); best net strategy (ATM IV sort) Sharpe 0.34 at 10 bps | | |
| 35 | +| **RQ2** | IV surface vs HAR-RV for RV forecasting? | In-sample +9.9 % (1-day) / +22.3 % (5-day) on a common sample, positive in 9/9 subperiods; OOS: better under MSE (14/30 tickers), worse under QLIKE (15/30); IV level alone best at 5 days | | |
| 36 | +| **RQ3** | Implied − realized correlation → market stress? | Ratio predicts stress at 5/10/20 d (t_NW 3.27 / 4.13 / 2.33), Feb 2016–Dec 2025 | | |
| 37 | +| **RQ4** | Greeks by DTE; max-OI "price magnets"? | RV fit rises with DTE (3.8 % → 9.5 %); magnet share 47.0 % < 50 % (frozen output) | | |
| 38 | +| **RQ5** | ML on the SPX surface vs the VIX? | HAR-RV (R²_OOS 0.437) beats VIX (0.336), RF (0.143), GBM (0.095); 2-week ATM IV = 50.8 % of RF importance (frozen output) | | |
| 37 | 39 | |
| 38 | 40 | ## 🏆 Headline results |
| 39 | 41 | |
| 40 | 42 | | Object | Estimate | |
| 41 | 43 | |---|---| |
| 42 | −| Option contracts / underlyings / period | 3.83 B / 11,077 / 2010–2025 | | |
| 43 | −| Analysis panel | 264,383 ticker-days, 69 tickers | | |
| 44 | −| Kurtosis-sorted long–short Sharpe (annualized) | **2.33** (t = 19.84) | | |
| 45 | −| HAR-RV → HAR-RV + IV surface, 1-day R² | 0.359 → 0.442 (**+23.3 %**), COVID +19.4 % | | |
| 46 | −| Implied/realized correlation → stress, t-stats (5/10/20 d) | 3.91–8.30 | | |
| 47 | −| IV → RV Granger causality | 100 % of tickers (F = 62.4) | | |
| 48 | −| RV FEVD explained by IV shocks at 20 d | 73.8 % | | |
| 49 | −| Placebo R² (within-ticker permutation) | 0.0008 vs 0.053 actual | | |
| 44 | +| Option records / underlyings / period | 3.83 B / 11,077 / 2010–2025 | | |
| 45 | +| Analysis panel | 264,383 ticker-days, 69 tickers (119,081 with all ten predictors) | | |
| 46 | +| 5-day return R², stocks / ETFs / indices / all | 0.29 % / 0.61 % / 1.01 % / 0.31 % | | |
| 47 | +| Only predictor significant under two-way clustering (5-day) | Skew₂₅δ: +19 bps per SD, t_DC = 2.91 | | |
| 48 | +| Best long-short sort (5-day, calendar time) | ATM IV: 13.6 %/yr, Sharpe 0.54 gross (t_NW 2.19), 0.34 net of 10 bps, break-even 27 bps | | |
| 49 | +| HAR-RV → HAR-RV + IV surface, 1-day / 5-day R² (common sample) | 0.415 → 0.457 (+9.9 %) / 0.421 → 0.515 (+22.3 %) | | |
| 50 | +| OOS (30 tickers): median MSE ratio / QLIKE ratio | 0.967 (DM>1.96: 14, <−1.96: 0) / 1.171 (DM>1.96: 0, <−1.96: 15) | | |
| 51 | +| Implied/realized correlation ratio → stress, t_NW (5/10/20 d) | 3.27 / 4.13 / 2.33 | | |
| 52 | +| IV → RV Granger causality | 100 % of tickers (mean F = 62.4) | | |
| 53 | +| RV FEVD explained by IV shocks at 20 d (RV first / IV first) | 20.2 % / 28.5 % | | |
| 54 | +| Placebo R² (within-ticker permutation) | 0.0004 vs 0.0031 actual | | |
| 50 | 55 | |
| 51 | 56 | ## 🗂 Repository layout |
| 52 | 57 | |
@@ -54,14 +59,15 @@ Five research questions on the information content of equity option markets, ans | ||
| 54 | 59 | options-implied-cross-asset/ |
| 55 | 60 | ├── data/ |
| 56 | 61 | │ ├── raw/ # external DuckDB stores (not shipped — see data/raw/README.md) |
| 57 | −│ └── processed/ # 5 derived parquets (authoritative surviving data) | |
| 62 | +│ └── processed/ # 5 derived parquets (unchanged; forward targets re-derived at load time) | |
| 58 | 63 | ├── src/wp7/ # analysis library (config, data_io, econometrics, forecasting, portfolio) |
| 59 | −├── scripts/ # numbered entry points 01–13 (table below) | |
| 60 | −├── results/ # 41 CSV result tables (every paper table derives from these) | |
| 64 | +├── scripts/ # numbered entry points 01–14 (table below) | |
| 65 | +├── results/ # CSV result tables (every paper table derives from these) | |
| 66 | +│ └── _pre-revision-20261017/ # v1.1 CSVs kept for audit | |
| 61 | 67 | ├── figures/ # supplementary figures (the paper itself is tables-only) |
| 62 | −├── docs/ # AUDIT.md, CHANGES.md, verify/ (rerun logs + CSV comparator) | |
| 68 | +├── docs/ # REVIEW-REPORT.md, CHANGELOG-REVISION.md, AUDIT.md, CHANGES.md, verify/ | |
| 63 | 69 | ├── Makefile # make pipeline | figures | paper | all |
| 64 | −└── paper/ # main.tex + preamble.tex + sections/ + appendix/ + references.bib → main.pdf | |
| 70 | +└── paper/ # main.tex + preamble.tex + sections/ + tables/ (generated) + appendix/ + references.bib → main.pdf | |
| 65 | 71 | ``` |
| 66 | 72 | |
| 67 | 73 | ## 🚀 Quick start |
@@ -69,51 +75,56 @@ options-implied-cross-asset/ | ||
| 69 | 75 | ```bash |
| 70 | 76 | python3 -m pip install -r requirements.txt # scripts bootstrap src/ themselves |
| 71 | 77 | make pipeline # scripts 02–13 (raw-dependent steps skip themselves gracefully) |
| 78 | +python3 scripts/14_make_paper_tables.py # regenerate paper/tables/*.tex from results/ | |
| 72 | 79 | make figures # supplementary figures from the result CSVs |
| 73 | −cd paper && make # latexmk → main.pdf | |
| 80 | +cd paper && make # latexmk → main.pdf (latexmk -pdf main_anon.tex for the anonymous version) | |
| 74 | 81 | ``` |
| 75 | 82 | |
| 76 | 83 | | Script | Question | Needs raw stores? | |
| 77 | 84 | |---|---|---| |
| 78 | 85 | | `01_extract_data.py` | raw → processed parquets | **yes (entirely)** | |
| 79 | −| `02_rq1_return_predictability.py` | RQ1 panel + Fama–MacBeth | no | | |
| 80 | −| `03_rq2_rv_forecasting.py` | RQ2 HAR-RV vs IV surface | no | | |
| 81 | −| `04_rq3_correlation_divergence.py` | RQ3 correlation divergence | stage 1 only | | |
| 86 | +| `02_rq1_return_predictability.py` | RQ1 panel + Fama–MacBeth (NW) | no | | |
| 87 | +| `03_rq2_rv_forecasting.py` | RQ2 HAR-RV vs IV surface, OOS, DM (30 tickers) | no | | |
| 88 | +| `04_rq3_correlation_divergence.py` | RQ3 correlation divergence (3 specifications, NW) | stage 1 only | | |
| 82 | 89 | | `05_rq4_greeks_decay_magnets.py` | RQ4 Greeks decay + magnets | part A; part B has a parquet fallback | |
| 83 | −| `06_rq5_ml_rv_forecast.py` | RQ5 ML vs VIX | **yes (entirely)** | | |
| 84 | −| `07_descriptive_stats.py` | descriptive panels A–H | panels F, H only | | |
| 85 | −| `08_subperiod_regime.py` | subperiods, regimes, rolling R² | section B only | | |
| 86 | −| `09_portfolio_sorts.py` | portfolio sorts + double sorts | no | | |
| 87 | −| `10_robustness.py` | NW / clustered SE / quantile / ticker R² | section E only | | |
| 88 | −| `11_granger_var.py` | Granger, VAR, IRF, FEVD | no | | |
| 90 | +| `06_rq5_ml_rv_forecast.py` | RQ5 ML vs VIX (code corrected, not re-run) | **yes (entirely)** | | |
| 91 | +| `07_descriptive_stats.py` | descriptive panels A–H | panel H only | | |
| 92 | +| `08_subperiod_regime.py` | subperiods, VIX regimes, rolling R² | no (VIX from the RQ3 parquet) | | |
| 93 | +| `09_portfolio_sorts.py` | sorts, double sorts, calendar-time strategies + costs | no | | |
| 94 | +| `10_robustness.py` | HC1 / NW(5,22) / double-clustered SE / controls / quantile / ticker R² | no | | |
| 95 | +| `11_granger_var.py` | Granger, VAR, orthogonalized IRF / FEVD | no | | |
| 89 | 96 | | `12_make_figures.py` | supplementary figures | no | |
| 90 | −| `13_extended_robustness.py` | winsorization / NW-lag sensitivity, Spearman ICs, decile sorts, leave-one-year-out, placebo | no | | |
| 97 | +| `13_extended_robustness.py` | winsorization / NW lags / Spearman ICs / deciles / leave-one-year-out / placebo | no | | |
| 98 | +| `14_make_paper_tables.py` | all LaTeX table fragments (`paper/tables/`) | no | | |
| 91 | 99 | |
| 92 | −Environment variables: `WP7_RAW_DATA_DIR` (raw DuckDB stores, default `data/raw/`), `WP7_RESULTS_DIR` (default `results/`). | |
| 100 | +Environment variables: `WP7_RAW_DATA_DIR` (raw DuckDB stores, default `data/raw/`), `WP7_RESULTS_DIR` (default `results/`), `WP7_LEGACY_TARGETS=1` (reproduce the mis-aligned v1.1 targets, audit only). | |
| 93 | 101 | |
| 94 | 102 | ## 🗃 Data |
| 95 | 103 | |
| 96 | −Options chains with Greeks (3.83 B contracts, 11,077 underlyings, 2010–2025) and 1-minute OHLCV bars (11.5 B rows) from the HF Market Data lake, stored as DuckDB; the five derived parquets in `data/processed/` (daily implied moments, surface features, realized measures, correlation panels, SPX surface) are shipped and sufficient for every table of the paper. The raw stores are no longer on this machine (`docs/AUDIT.md` §6.1). | |
| 104 | +Options chains with Greeks (3.83 B records, 11,077 underlyings, 2010–2025) and 1-minute/5-minute OHLCV bars (11.5 B rows) from the HF Market Data lake, stored as DuckDB; the five derived parquets in `data/processed/` (daily implied features, surface features, realized measures, correlation panels, SPX magnet data) are shipped and sufficient for every table of the paper except the frozen RQ4-A and RQ5 outputs. The raw stores are no longer on this machine (`docs/AUDIT.md` §6.1). The analysis universe is a fixed, ex-post list of liquid names (survivorship bias acknowledged in the paper). | |
| 97 | 105 | |
| 98 | 106 | ## 🔬 Methodology |
| 99 | 107 | |
| 100 | −1. **Implied moments** (ATM IV, skew, kurtosis, put–call ratios, term slope) per ticker-day from the option surface (`src/wp7/data_io.py`). | |
| 101 | −2. **Return predictability**: panel and Fama–MacBeth regressions, quintile/decile sorts, double sorts (`econometrics.py`, `portfolio.py`). | |
| 102 | −3. **RV forecasting**: HAR-RV augmented with surface features vs GARCH, by subperiod and VIX regime (`forecasting.py`). | |
| 103 | −4. **Correlation divergence**: implied vs realized S&P 500 constituent correlation as a stress predictor. | |
| 104 | −5. **Greeks decay & price magnets**: information by days-to-expiry; max-open-interest pinning test. | |
| 105 | −6. **Granger / VAR / IRF / FEVD** between ATM IV and RV. | |
| 106 | −7. **Robustness**: Newey–West (≤ 22 lags), double clustering, quantile regressions, winsorization, rank ICs, leave-one-year-out, within-ticker permutation placebo. | |
| 108 | +1. **Implied features** (ATM IV 30/90 d, term slope, 25δ skew, smile-based skewness and kurtosis proxies, put–call ratios, net gamma) per ticker-day (`src/wp7/data_io.py`, `scripts/01`). | |
| 109 | +2. **Forward targets**: strictly forward sums `Σ_{j=1..5} x_{t+j}` (`data_io.fix_forward_targets`). | |
| 110 | +3. **Return predictability**: pooled OLS (HC1, NW, two-way clustering), Fama–MacBeth with NW, quintile/decile sorts with NW t-stats, calendar-time overlapping-cohort strategies with measured turnover and net-of-cost Sharpe ratios (`econometrics.py`, `portfolio.py`). | |
| 111 | +4. **RV forecasting**: HAR-RV (RV_t, RV^(w), RV^(m)) vs IV models on a common sample; rolling OOS (500/250), MSE, QLIKE, R²_OOS, DM with NW variance (`forecasting.py`). | |
| 112 | +5. **Correlation divergence**: equal-weight implied correlation (CBOE/Skintzi–Refenes analogue), 22-day realized correlation, LPM with NW(h). | |
| 113 | +6. **Greeks decay & price magnets**: by DTE bucket; max-OI attraction test. | |
| 114 | +7. **Granger / VAR**: per-ticker F-tests; bivariate VAR(5) with Cholesky-orthogonalized IRF/FEVD under both orderings. | |
| 115 | +8. **Robustness**: subperiods, VIX regimes, controls, quantiles, ticker R², winsorization, NW lags, Spearman ICs, deciles, leave-one-year-out, placebo. | |
| 107 | 116 | |
| 108 | 117 | ## 🖼 Figures & tables inventory |
| 109 | 118 | |
| 110 | −The paper is tables-only (41 CSV tables in `results/`, typeset in `paper/sections/results.tex`, `robustness.tex` and `appendix/`). Supplementary figures from `scripts/12_make_figures.py` are in `figures/`. | |
| 119 | +The paper is tables-only: 27 table fragments generated by `scripts/14_make_paper_tables.py` into `paper/tables/` (plus the frozen raw-data inventory table typed in `sections/data.tex`). Supplementary figures from `scripts/12_make_figures.py` are in `figures/`. | |
| 111 | 120 | |
| 112 | 121 | ## ⚠️ Limitations |
| 113 | 122 | |
| 114 | −- Raw option and OHLCV stores are not redistributable; raw-dependent steps (01, 06, parts of 04/05/07/08/10) cannot be re-run from this repository. | |
| 115 | −- The 69-ticker analysis panel is liquidity-selected; results for thinly traded options may differ. | |
| 116 | −- Weekly predictability is in-sample Sharpe before transaction costs. | |
| 123 | +- Fixed ex-post universe of 69 liquid names (survivorship bias); results do not speak to small caps, where the literature locates most option-implied return predictability. | |
| 124 | +- "Implied skewness/kurtosis" are smile-based proxies, not model-free risk-neutral moments; results are sensitive to tail trimming. | |
| 125 | +- Long-short strategies are equal-weighted, not factor-adjusted; costs are proportional assumptions. | |
| 126 | +- RQ4-A (Greeks by DTE) and RQ5 (ML) are frozen outputs of the original run (raw stores unavailable); only their 1-day components are reported. | |
| 127 | +- RQ3 stress indicator is defined from the VIX, which is also a regressor; realized correlation available from Feb 2016 only. | |
| 117 | 128 | |
| 118 | 129 | ## 📝 Citation |
| 119 | 130 | |
@@ -125,7 +136,8 @@ The paper is tables-only (41 CSV tables in `results/`, typeset in `paper/section | ||
| 125 | 136 | type = {Working Paper}, |
| 126 | 137 | number = {7}, |
| 127 | 138 | year = {2026}, |
| 128 | − month = {May} | |
| 139 | + month = {October}, | |
| 140 | + note = {Version 1.2} | |
| 129 | 141 | } |
| 130 | 142 | ``` |
| 131 | 143 | |
@@ -137,6 +149,7 @@ Université du Québec en Outaouais (UQO), Gatineau, QC. | ||
| 137 | 149 | |
| 138 | 150 | ## 🗒 Notes |
| 139 | 151 | |
| 140 | −- Reproduction audit (2026-08-05): 28/28 regenerable result files re-run — 10 byte-identical, 15 within floating-point noise, 1 explained deviation (RQ3 collinearity), 2 newly regenerated; details in `docs/AUDIT.md` §7 and `docs/CHANGES.md`, evidence in `docs/verify/`. | |
| 141 | −- The May 2026 flat version (`_old/`) is archived in `Recherche-UQO/_archives/versions-mai-2026/options-implied-cross-asset--_old/`; the original project is in `…/options-implied-cross-asset--hf-wp7-20260519/`. | |
| 142 | −- Harmonisation 2026-10-17: canonical title page, bibliography style switched from apalike to aer, `pyproject.toml` dropped in favour of the pinned `requirements.txt`. The SSRN PDF (uploaded 2026-10-17) predates this cover; re-upload `paper/main.pdf`. | |
| 152 | +- **Revision 2026-10-17 (v1.2)**: full editorial-board review — `docs/REVIEW-REPORT.md` (diagnosis, methodology verdicts, literature, maturity) and `docs/CHANGELOG-REVISION.md` (every corrected number, scripts re-run, items not re-executable). Pre-revision state: git tag `pre-revision-20261017`, `docs/main_pre-revision-20261017.pdf`, `results/_pre-revision-20261017/`. Bibliography 45 → 97 entries, all verified on Crossref (`docs/verify/crossref/`). | |
| 153 | +- Reproduction audit of v1.0 (2026-08-05): `docs/AUDIT.md`, `docs/CHANGES.md`, evidence in `docs/verify/` (v1.1 logs and CSVs). | |
| 154 | +- The May 2026 flat version is archived in `Recherche-UQO/_archives/versions-mai-2026/options-implied-cross-asset--_old/`; the original project is in `…/options-implied-cross-asset--hf-wp7-20260519/`. | |
| 155 | +- Harmonisation 2026-10-17: canonical title page, bibliography style `aer`, pinned `requirements.txt`. | |
modified
docs/AUDIT.md
+3 −0
@@ -5,6 +5,9 @@ Contact: contact@spboucher.ai | ||
| 5 | 5 | |
| 6 | 6 | # AUDIT — WP7 "Options-Implied Information Content" (source: `UQO/UQO_WP/hf-wp7-spb20260519`) |
| 7 | 7 | |
| 8 | +> **Note (2026-10-17).** This audit describes the v1.0 → v1.1 restructuring. The scientific revision of 2026-10-17 (v1.2) found that the multi-day forward targets of the extraction step were mis-aligned and corrected several methodological issues; the regenerated results supersede the ones discussed below. See `REVIEW-REPORT.md` and `CHANGELOG-REVISION.md`. | |
| 9 | + | |
| 10 | + | |
| 8 | 11 | Audit performed on 2026-08-05, **before any restructuring**. The full original tree is preserved |
| 9 | 12 | verbatim in [`_old/`](_old/). |
| 10 | 13 | |
added
docs/CHANGELOG-REVISION.md
+178 −0
@@ -0,0 +1,178 @@ | ||
| 1 | +<!-- | |
| 2 | +Author: Simon-Pierre Boucher | |
| 3 | +Contact: contact@spboucher.ai | |
| 4 | +--> | |
| 5 | + | |
| 6 | +# CHANGELOG — Révision scientifique complète (editorial board, 2026-10-17) | |
| 7 | + | |
| 8 | +Papier : **WP 7 — The Options-Implied Information Content for Cross-Asset Return and Volatility | |
| 9 | +Prediction** (`finance/options-implied-cross-asset`, dépôt `wp7_uqo.git`). | |
| 10 | +État de départ figé : tag `pre-revision-20261017`, PDF `docs/main_pre-revision-20261017.pdf` (29 pages, v1.1). | |
| 11 | +État d'arrivée : `paper/main.pdf` (53 pages, v1.2, October 2026), `paper/main_anon.pdf`. | |
| 12 | +Rapport scientifique : `docs/REVIEW-REPORT.md`. Les CSV de résultats remplacés sont conservés dans | |
| 13 | +`results/_pre-revision-20261017/` (41 fichiers, copie exacte du tag). | |
| 14 | + | |
| 15 | +Convention : **C** = correction (erreur démontrée), **A** = ajout/renforcement, **E** = éditorial. | |
| 16 | + | |
| 17 | +--- | |
| 18 | + | |
| 19 | +## 1. Corrections majeures (avant → après, preuve) | |
| 20 | + | |
| 21 | +### C1 — Cibles multi-jours mal alignées (erreur de code, affecte toute la partie « weekly » du papier) | |
| 22 | +- **Où** : `scripts/01_extract_data.py::compute_weekly_rv` (et `06_rq5_ml_rv_forecast.py` pour SPX). | |
| 23 | + `ret_5d = daily_return.shift(-1).rolling(5).sum()` : la fenêtre `rolling` est **rétrospective**, donc | |
| 24 | + `ret_5d(t) = r_{t-3} + r_{t-2} + r_{t-1} + r_t + r_{t+1}` — quatre termes passés/contemporains sur cinq. | |
| 25 | + Idem pour `rv_fwd_5d` et `rv_fwd_22d` (RQ5). | |
| 26 | +- **Preuve** : `data/processed/realized_vol.parquet` — 100 % des valeurs de `ret_5d` coïncident avec la | |
| 27 | + définition fautive, 0,005 % avec la vraie somme forward ; corr(`ret_5d`, `daily_return_t`) = 0,42 | |
| 28 | + (contrôle exécuté le 2026-10-17, voir REVIEW-REPORT §4.1). `ret_1d` et `rv_fwd_1d` étaient corrects. | |
| 29 | +- **Correction** : `src/wp7/data_io.py::forward_sum` / `fix_forward_targets` (somme strictement forward | |
| 30 | + `sum_{j=1..5} x_{t+j}`, 5 observations exigées) appliquée par défaut dans `load_merged()` ; colonnes | |
| 31 | + `ret_5d_legacy`, `rv_fwd_5d_legacy` conservées ; `WP7_LEGACY_TARGETS=1` reproduit v1.1. Parquets livrés **inchangés**. | |
| 32 | +- **Conséquences chiffrées (v1.1 → v1.2)** : | |
| 33 | + | |
| 34 | +| Résultat | v1.1 | v1.2 | | |
| 35 | +|---|---|---| | |
| 36 | +| R² rendement 5 j, actions / ETF / indices / tous | 4,76 % / 12,4 % / 19,3 % / 5,29 % | **0,29 % / 0,61 % / 1,01 % / 0,31 %** | | |
| 37 | +| Tri quintile kurtosis implicite, L/S 5 j | +44,0 %/an, Sharpe 2,33, t = 19,84 | **−6,1 %/an, Sharpe −0,33, t_NW = −1,66** | | |
| 38 | +| Tri PC volume ratio | −30,3 %, Sharpe −2,48, t = −21,8 | +5,1 %, Sharpe 0,42, t_NW = 2,64 | | |
| 39 | +| Tri skew 25δ | −37,5 %, Sharpe −1,87 | +5,9 %, Sharpe 0,31, t_NW = 1,54 | | |
| 40 | +| Double tri IV × skew, cellule High IV/High skew | −47,8 bps/sem. (t = −6,17) | +34,0 bps (t = 2,59) ; différences H−L skew non significatives | | |
| 41 | +| R² HAR-RV, cible RV 5 j | 0,888 | 0,421 (échantillon commun) | | |
| 42 | +| R² HAR+IV, cible RV 5 j | 0,896 | 0,515 | | |
| 43 | +| RQ5 R²_OOS HAR-RV 5 j / 22 j | 0,948 / 0,994 | **retirés** (non recalculables, données brutes absentes) | | |
| 44 | +| Sous-périodes, R² 5 j | 3,1 %–14,4 % | 0,13 %–4,2 % | | |
| 45 | +| Régimes VIX, R² 5 j | 2,7 %–19,8 % | 0,11 %–3,0 % | | |
| 46 | +| Leave-one-year-out, R² 5 j | [4,7 %, 5,7 %] | [0,26 %, 0,53 %] | | |
| 47 | +| Placebo | 0,0008 vs 0,0529 | 0,0004 vs 0,0031 | | |
| 48 | +| IC Spearman 5 j kurtosis / PC vol | +0,098 (t 16,8) / −0,059 (t −13,8) | −0,019 (t −3,2) / +0,016 (t 3,9) | | |
| 49 | +| Winsorisation : t kurtosis sans winsorisation | 13,8 | −0,47 | | |
| 50 | +| Robustesse SE 5 j : # prédicteurs sig. HC1 / NW(5) / DC | 10 / 9 / 8 | 7 / 4 / 1 | | |
| 51 | + | |
| 52 | +### C2 — Inférence des tris et doubles tris | |
| 53 | +- **Où** : `src/wp7/portfolio.py`. v1.1 : t = moyenne/(σ/√N) sur la série quotidienne de rendements 5 j | |
| 54 | + **chevauchants** ; double tri : t calculé en empilant tous les titre-jours d'une cellule (ignore la dépendance | |
| 55 | + transversale et le chevauchement). | |
| 56 | +- **Après** : t Newey–West (h−1 = 4 retards) sur la série de portefeuille ; cellules du double tri = portefeuilles | |
| 57 | + quotidiens, t NW sur la série, différences H−L sur séries de différences. L'ancien t est conservé (`t_statistic_iid`). | |
| 58 | + Facteur d'inflation mesuré : 1,4–1,8. | |
| 59 | + | |
| 60 | +### C3 — Analyse de coûts de transaction | |
| 61 | +- v1.1 : coûts appliqués au seul tri sur l'implied skewness avec un turnover **supposé** de 2/5 par jour. | |
| 62 | +- v1.2 : implémentation calendar-time (Jegadeesh–Titman) de **chaque** stratégie (h = 1 et 5) : série | |
| 63 | + quotidienne non chevauchante, turnover **mesuré** Σ|W_t − W_{t−1}|, coût de rentabilité nul, Sharpe net à | |
| 64 | + 5/10/25/50 bps (`portfolio.calendar_time_long_short`, `results/calendar_time_strategies.csv`, | |
| 65 | + `transaction_cost_analysis.csv`, Table 8). Seule la stratégie IV ATM garde un Sharpe net positif à 10 bps (0,34, t brut 2,19). | |
| 66 | + | |
| 67 | +### C4 — Comparaison de modèles RQ2 sur des échantillons différents + colinéarité exacte | |
| 68 | +- v1.1 : HAR-RV R² = 0,359 sur 264 345 obs. vs HAR+IV R² = 0,442 sur 119 093 obs. (« +23,3 % ») ; | |
| 69 | + « IV only » contenait `iv_atm_30d`, `iv_atm_90d` **et** `iv_term_slope = iv_atm_90d − iv_atm_30d` (dépendance | |
| 70 | + linéaire exacte) → prévisions OOS explosives (R²_OOS médian −539, QLIKE 73 606 dans `rq2_oos_results.csv` v1.1, | |
| 71 | + jamais rapportées) ; composante journalière HAR = RV_{t−1} au lieu de RV_t ; plancher QLIKE à 1e-10. | |
| 72 | +- v1.2 : échantillon commun (119 093), RV_t comme composante journalière (éq. HAR du papier), blocs IV sans la pente, | |
| 73 | + prévisions plancher = 1er centile de la cible d'entraînement, DM avec variance NW(h) pour les 30 titres (et non | |
| 74 | + 4 titres choisis parmi 10). Résultat : HAR 0,415 → 0,457 (+9,9 %) à 1 j ; 0,421 → 0,515 (+22,3 %) à 5 j ; | |
| 75 | + OOS : MSE ratio médian 0,967, DM > 1,96 pour 14/30, < −1,96 pour 0 ; **QLIKE ratio 1,17, pire pour 15/30**. | |
| 76 | +- Omission réparée : v1.1 citait AAPL, AMD, CAT, COST (DM positifs) et taisait BA (−39 %, DM −6,4) et CSCO (−34 %, DM −3,8). | |
| 77 | + | |
| 78 | +### C5 — RQ3 : design singulier | |
| 79 | +- v1.1 régressait sur `corr_divergence`, `corr_ratio`, `implied_corr`, `realized_corr` ensemble ; | |
| 80 | + `corr_divergence = implied_corr − realized_corr` ⇒ X'X singulier, t « 0,00 » de la divergence = artefact (déjà | |
| 81 | + signalé dans AUDIT.md §7). Erreurs-types HC1 sur un indicateur forward chevauchant. | |
| 82 | +- v1.2 : trois spécifications séparées (ratio ; divergence ; composantes) + VIX + IV SPX, NW(h). Ratio : | |
| 83 | + t = 3,27/4,13/2,33 (v1.1 : 4,07/8,30/3,91) ; divergence : 2,14/1,89/1,38. Période explicitée : fév. 2016–déc. 2025 | |
| 84 | + (la corrélation réalisée n'existe qu'à partir de 2016-02-02 ; N = 2 486). | |
| 85 | + | |
| 86 | +### C6 — FEVD non orthogonalisée | |
| 87 | +- v1.1 : « parts » calculées à partir des IRF réduites à chocs unitaires (sans Σ) : 73,8 % à 20 j. | |
| 88 | +- v1.2 : `econometrics.orthogonalized_irf_fevd` (Cholesky, deux ordres). Part de la variance de RV due aux chocs IV à 20 j : | |
| 89 | + **20,2 % (RV d'abord) / 28,5 % (IV d'abord)** ; corrélation résiduelle moyenne 0,20 ; part de IV due à RV < 6 %. | |
| 90 | + | |
| 91 | +### C7 — Bibliographie | |
| 92 | +- `ni2009does` (« Does option trading convey stock price information?, JF 60(3) 2009 ») : titre, revue, volume, | |
| 93 | + pages erronés → remplacé par **Ni, Pearson & Poteshman (2005), JFE 78(1), 49–87**, DOI 10.1016/j.jfineco.2004.08.005. | |
| 94 | +- `barbon2022option` (« JFE 143(1) 316–348 ») : aucune publication trouvée (Crossref) → @unpublished SSRN 3725454. | |
| 95 | +- DOI ajoutés aux 45 entrées existantes ; titres complétés (Blair et al. 2001, Busch et al. 2011, Driessen et al. 2009, | |
| 96 | + Easley et al. 1998, Patton & Sheppard 2015). | |
| 97 | + | |
| 98 | +### C8 — Chiffres du texte non reproductibles (signalés dans AUDIT/CHANGES v1.1, désormais régénérés) | |
| 99 | +- Colonne HC1 de l'ancienne Table « robust_se » (kurtosis 25,87) et distribution R² par titre (5,9 % / 4,7 %) | |
| 100 | + ne correspondaient à aucun CSV → toutes les tables sont désormais **générées** par `scripts/14_make_paper_tables.py`. | |
| 101 | + | |
| 102 | +--- | |
| 103 | + | |
| 104 | +## 2. Éditorial et structure (E) | |
| 105 | +- Toutes les tables du papier (27 fragments `paper/tables/*.tex`) sont générées depuis `results/` ; plus aucun nombre tapé | |
| 106 | + à la main (sauf la table d'inventaire des données brutes, figée). | |
| 107 | +- Introduction réécrite (contribution, résultats, paragraphe « Relation to the previous version ») ; revue de littérature | |
| 108 | + restructurée (5 sous-sections, 52 références ajoutées, discussion des résultats contradictoires) ; données | |
| 109 | + (univers fixe, biais de survie, proxys ≠ moments BKM, équation des cibles + note de bas de page sur l'erreur) ; | |
| 110 | + méthodologie (équations FM, calendar-time, pertes MSE/QLIKE, DM, corrélation implicite dérivée, VAR/FEVD) ; | |
| 111 | + résultats, robustesse, discussion, conclusion réécrits sur les nouveaux chiffres ; appendice (univers, crises, | |
| 112 | + DM par titre, features SPX, importance RF). | |
| 113 | +- Résumé, mots-clés, `\WPversion` 1.2, `\WPdate` October 2026 ; `main_anon.tex` régénéré. | |
| 114 | +- Vocabulaire : « GARCH proxy » → « ARCH-type benchmark » ; « implied skewness/kurtosis » qualifiés de proxys. | |
| 115 | + | |
| 116 | +## 3. Références ajoutées (52, toutes vérifiées Crossref — `docs/verify/crossref/*.json|log`) | |
| 117 | +Bakshi–Kapadia–Madan 2003 (10.1093/rfs/16.1.0101) ; Bakshi–Madan 2000 (10.1016/S0304-405X(99)00050-1) ; | |
| 118 | +Britten-Jones–Neuberger 2000 (10.1111/0022-1082.00228) ; Jiang–Tian 2005 (10.1093/rfs/hhi027) ; | |
| 119 | +Dennis–Mayhew 2002 (10.2307/3594989) ; Bali–Hovakimian 2009 (10.1287/mnsc.1090.1063) ; Rehman–Vilkov 2012 (SSRN 1301648) ; | |
| 120 | +Conrad–Dittmar–Ghysels 2013 (10.1111/j.1540-6261.2012.01795.x) ; Bali–Murray 2013 (10.1017/S0022109013000410) ; | |
| 121 | +Mixon 2007 (10.1016/j.jempfin.2006.06.003) ; Vasquez 2017 (10.1017/S002210901700076X) ; Borochin–Chang–Wu 2020 | |
| 122 | +(10.1016/j.jempfin.2020.06.003) ; Martin 2017 (10.1093/qje/qjw034) ; Martin–Wagner 2019 (10.1111/jofi.12778) ; | |
| 123 | +Christoffersen–Jacobs–Chang 2013 (10.1016/B978-0-444-53683-9.00010-4) ; Chakravarty–Gulen–Mayhew 2004 | |
| 124 | +(10.1111/j.1540-6261.2004.00661.x) ; Muravyev–Pearson–Broussard 2013 (10.1016/j.jfineco.2012.09.003) ; | |
| 125 | +Muravyev–Pearson–Pollet 2025 (10.1016/j.jfineco.2025.104153) ; Ni–Pan–Poteshman 2008 (10.1111/j.1540-6261.2008.01352.x) ; | |
| 126 | +Ni–Pearson–Poteshman–White 2021 (10.1093/rfs/hhaa082) ; Golez–Jackwerth 2012 (10.1016/j.jfineco.2012.06.010) ; | |
| 127 | +Baltussen–Da–Lammers–Martens 2021 (10.1016/j.jfineco.2021.04.029) ; Andersen–Bollerslev 1998 (10.2307/2527343) ; | |
| 128 | +Andersen–Bollerslev–Diebold–Ebens 2001 (10.1016/S0304-405X(01)00055-1) ; Liu–Patton–Sheppard 2015 | |
| 129 | +(10.1016/j.jeconom.2015.02.008) ; Taylor–Yadav–Zhang 2010 (10.1016/j.jbankfin.2009.09.015) ; Prokopczuk–Wese Simen 2014 | |
| 130 | +(10.1016/j.jbankfin.2013.12.002) ; Kourtis–Markellos–Symeonidis 2016 (10.1002/fut.21792) ; Bollerslev–Patton–Quaedvlieg 2016 | |
| 131 | +(10.1016/j.jeconom.2015.10.007) ; Bollerslev 1986 (10.1016/0304-4076(86)90063-1) ; Hansen–Lunde 2005 (10.1002/jae.800) ; | |
| 132 | +Patton 2011 (10.1016/j.jeconom.2010.03.034) ; Giacomini–White 2006 (10.1111/j.1468-0262.2006.00718.x) ; Clark–West 2007 | |
| 133 | +(10.1016/j.jeconom.2006.05.023) ; Hansen–Lunde–Nason 2011 (10.3982/ECTA5771) ; Poon–Granger 2003 (10.1257/jel.41.2.478) ; | |
| 134 | +Skintzi–Refenes 2005 (10.1002/fut.20137) ; Pollet–Wilson 2010 (10.1016/j.jfineco.2010.02.011) ; Buraschi–Trojani–Vedolin 2014 | |
| 135 | +(10.1111/jofi.12095) ; Faria–Kosowski–Wang 2022 (10.1016/j.jbankfin.2021.106399) ; Bollerslev–Todorov 2011 | |
| 136 | +(10.1111/j.1540-6261.2011.01695.x) ; Granger 1969 (10.2307/1912791) ; Sims 1980 (10.2307/1912017) ; Kilian–Lütkepohl 2017 | |
| 137 | +(10.1017/9781108164818) ; Hansen–Hodrick 1980 (10.1086/260910) ; Jegadeesh–Titman 1993 (10.1111/j.1540-6261.1993.tb04702.x) ; | |
| 138 | +Lo 2002 (10.2469/faj.v58.n4.2453) ; Novy-Marx–Velikov 2016 (10.1093/rfs/hhv063) ; Hou–Xue–Zhang 2020 (10.1093/rfs/hhy131) ; | |
| 139 | +McLean–Pontiff 2016 (10.1111/jofi.12365) ; Chordia–Goyal–Saretto 2020 (10.1093/rfs/hhaa018) ; Ang–Hodrick–Xing–Zhang 2006 | |
| 140 | +(10.1111/j.1540-6261.2006.00836.x). | |
| 141 | +Références retirées : `ni2009does` (remplacée). Total : 45 → **97 entrées, toutes citées, toutes vérifiées**. | |
| 142 | + | |
| 143 | +## 4. Réanalyses exécutées (laptop, Python 3.14 / pandas 3.0.2 / numpy 2.4.4 ; logs `docs/verify/logs-revision/`) | |
| 144 | + | |
| 145 | +| Script | Durée | Sorties (results/) | | |
| 146 | +|---|---|---| | |
| 147 | +| `02_rq1_return_predictability.py` (cibles corrigées, FM NW(4), coefficients bps, p exactes, Bonferroni) | 6 s | `rq1_regression_results.csv`, `rq1_meta.csv` | | |
| 148 | +| `03_rq2_rv_forecasting.py` (échantillon commun, modèles non colinéaires, plancher OOS, DM NW 30 titres) | 2 s | `rq2_insample.csv`, `rq2_oos_results.csv`, `rq2_diebold_mariano.csv` | | |
| 149 | +| `04_rq3_correlation_divergence.py` stage 2 (3 spécifications, NW(h)) | 1 s | `rq3_stress_prediction.csv`, `rq3_crisis_analysis.csv` | | |
| 150 | +| `05_rq4_greeks_decay_magnets.py` partie B (parquet) | <1 s | `rq4_price_magnet.csv` (inchangé) | | |
| 151 | +| `07_descriptive_stats.py` (+ panel F via VIX du parquet RQ3) | 1 s | `descriptive_*.csv` (A–G) | | |
| 152 | +| `08_subperiod_regime.py` (RV : échantillon commun + winsorisation par titre ; régimes VIX recalculés) | 19 s | `subperiod_results.csv`, `regime_results.csv`, `rolling_r2.csv`, `pre_post_covid.csv` | | |
| 153 | +| `09_portfolio_sorts.py` (t NW, double tri par portefeuilles, calendar-time + coûts) | 37 s | `portfolio_sort_results.csv`, `double_sort_iv_skew.csv`, `calendar_time_strategies.csv`, `transaction_cost_analysis.csv` | | |
| 154 | +| `10_robustness.py` (+ HC1 et NW(22) dans la table ; VIX<30 recalculé) | 17 s | `robustness_*.csv` | | |
| 155 | +| `11_granger_var.py` (FEVD Cholesky, deux ordres, corrélation résiduelle) | 3 s | `granger_causality.csv`, `var_results.csv`, `irf_results.csv`, `fevd_results.csv` | | |
| 156 | +| `13_extended_robustness.py` (cibles corrigées ; LOYO avec HAR et Δ) | 15 s | `extended_*.csv` | | |
| 157 | +| `14_make_paper_tables.py` (**nouveau**) | 1 s | `paper/tables/*.tex` (27 fragments) | | |
| 158 | +| `12_make_figures.py` | 2 s | `figures/fig_*.{png,pdf}` (supplémentaires) | | |
| 159 | + | |
| 160 | +Durée totale < 2 min. Les sorties v1.1 remplacées sont dans `results/_pre-revision-20261017/`. | |
| 161 | + | |
| 162 | +## 5. Non modifié faute de données (données brutes DuckDB absentes) | |
| 163 | +- `rq4_greeks_decay.csv` (RQ4 partie A) : conservé tel quel ; cibles 1 j correctes ; le papier ne rapporte plus que R² et t(IV) | |
| 164 | + (les t des autres grecques, ±150, traduisent une colinéarité). | |
| 165 | +- `rq5_model_comparison.csv`, `rq5_feature_importance.csv` : seules les lignes 1 j (VIX, HAR, RF, GBM) sont rapportées ; | |
| 166 | + lignes OLS surface (MSE 1e60, colinéarité exacte) et cibles 5/22 j (erreur C1) retirées du papier. Le code de `06` est corrigé | |
| 167 | + (cibles forward, RV_t) mais n'a pas pu être relancé. | |
| 168 | +- `descriptive_options_quality.csv` (panel H) : inchangé. | |
| 169 | +- Table d'inventaire des données brutes (`tab:data`) : chiffres figés de l'extraction originale. | |
| 170 | + | |
| 171 | +## 6. Fichiers dépôt | |
| 172 | +- Nouveaux : `scripts/14_make_paper_tables.py`, `paper/tables/`, `results/calendar_time_strategies.csv`, | |
| 173 | + `results/_pre-revision-20261017/`, `docs/REVIEW-REPORT.md`, `docs/CHANGELOG-REVISION.md`, | |
| 174 | + `docs/verify/logs-revision/`, `docs/verify/crossref/`. | |
| 175 | +- Modifiés : `src/wp7/{config,data_io,econometrics,forecasting,portfolio}.py`, `scripts/02,03,04,06,08,09,10,11,13`, | |
| 176 | + toutes les sections LaTeX, `references.bib`, `main.tex`, `main_anon.tex`, `preamble.tex`, `README.md`. | |
| 177 | +- Inchangés : `data/processed/*.parquet`, `paper/sections/titlepage*.tex`, `docs/AUDIT.md`, `docs/CHANGES.md`, | |
| 178 | + `docs/verify/{logs,results}` (v1.1). | |
modified
docs/CHANGES.md
+3 −0
@@ -5,6 +5,9 @@ Contact: contact@spboucher.ai | ||
| 5 | 5 | |
| 6 | 6 | # CHANGES — Restructuring report (2026-08-05) |
| 7 | 7 | |
| 8 | +> **Note (2026-10-17).** Superseded for all multi-day results by the v1.2 revision (`REVIEW-REPORT.md`, `CHANGELOG-REVISION.md`): the 5-day targets used in v1.0/v1.1 were trailing, not forward, windows. The v1.1 result CSVs are preserved in `results/_pre-revision-20261017/`. | |
| 9 | + | |
| 10 | + | |
| 8 | 11 | Source: `~/Desktop/UQO/UQO_WP/hf-wp7-spb20260519` (preserved verbatim in `_old/`). |
| 9 | 12 | Target: this repository (`~/Desktop/wp7_uqo`). **No original result or number was changed |
| 10 | 13 | anywhere.** Revision 1.1 (§6) *adds* new robustness analyses and references on the author's |
added
docs/REVIEW-REPORT.md
+156 −0
@@ -0,0 +1,156 @@ | ||
| 1 | +<!-- | |
| 2 | +Author: Simon-Pierre Boucher | |
| 3 | +Contact: contact@spboucher.ai | |
| 4 | +--> | |
| 5 | + | |
| 6 | +# REVIEW REPORT — Editorial board, révision scientifique complète (2026-10-17) | |
| 7 | + | |
| 8 | +**Papier** : WP 7 — *The Options-Implied Information Content for Cross-Asset Return and Volatility Prediction: | |
| 9 | +Evidence from 3.8 Billion Option Contracts* (v1.1, May 2026 → v1.2, October 2026). | |
| 10 | +**Board** : asset pricing, dérivés, microstructure, modélisation de la volatilité, économétrie financière. | |
| 11 | +**Revue cible** : *Journal of Futures Markets* (repli : *Journal of Banking & Finance*, *Journal of Financial Markets*). | |
| 12 | +**Journal des modifications** : `docs/CHANGELOG-REVISION.md`. **Preuves** : `docs/verify/logs-revision/`, `docs/verify/crossref/`, | |
| 13 | +`results/_pre-revision-20261017/` (CSV v1.1). | |
| 14 | + | |
| 15 | +--- | |
| 16 | + | |
| 17 | +## 1. Verdict d'ensemble | |
| 18 | + | |
| 19 | +Le manuscrit v1.1 reposait, pour toute sa partie « rendements hebdomadaires », sur une **erreur de code** : les cibles à 5 jours | |
| 20 | +(rendement et variance réalisée) étaient construites avec une fenêtre `rolling` rétrospective appliquée à une série décalée | |
| 21 | +d'un jour, soit `r_{t-3}+…+r_{t+1}` au lieu de `r_{t+1}+…+r_{t+5}`. Quatre des cinq termes étaient passés ou contemporains des | |
| 22 | +caractéristiques optionnelles mesurées à la clôture de `t`. Les résultats phares — R² hebdomadaires de 5 à 19 %, Sharpe 2,33 | |
| 23 | +(t = 19,84) du tri sur la kurtosis implicite, « +23,3 % » de R² HAR+IV, R²_OOS de 0,99 à 22 jours — étaient des artefacts. | |
| 24 | +L'alerte de l'orchestrateur (« un Sharpe de 2,33 sur des tris quintiles à 5 jours est une alerte rouge ») était fondée. | |
| 25 | + | |
| 26 | +La révision a (i) corrigé la construction des cibles et relancé toute la chaîne calculable depuis `data/processed/` ; | |
| 27 | +(ii) corrigé cinq autres défauts méthodologiques démontrables (inférence des tris, échantillons non comparables et colinéarité | |
| 28 | +exacte en RQ2, design singulier en RQ3, FEVD non orthogonalisée, cherry-picking des tests DM) ; (iii) ajouté une analyse de | |
| 29 | +turnover et de coûts calendar-time pour les 14 stratégies ; (iv) vérifié les 45 références et en a ajouté 52 ; (v) réécrit | |
| 30 | +l'ensemble du texte autour des résultats corrigés, avec un paragraphe explicite de rétractation des résultats v1.1. | |
| 31 | + | |
| 32 | +**Le papier corrigé est honnête et défendable, mais sa contribution change de nature** : il documente une prédictibilité | |
| 33 | +transversale des rendements statistiquement détectable mais économiquement marginale dans le segment le plus liquide du marché, | |
| 34 | +et une information réelle mais dépendante de la fonction de perte de la surface IV pour la variance réalisée. Voir §7 pour la | |
| 35 | +maturité et les risques de rejet. | |
| 36 | + | |
| 37 | +## 2. Diagnostic par section (v1.1 → v1.2) | |
| 38 | + | |
| 39 | +| Section | Forces (v1.1) | Faiblesses / erreurs trouvées | Traitement | | |
| 40 | +|---|---|---|---| | |
| 41 | +| Titre / résumé | Question claire, base de données exceptionnelle | « 3.8 billion contracts » / « 11,077 underlyings » alors que 69 sous-jacents sont analysés ; chiffres phares faux (C1) ; « cross-asset » = 3 groupes actions/ETF/indices seulement | Résumé réécrit ; ampleur réelle de l'échantillon explicitée dès l'introduction ; titre conservé (décision d'auteur recommandée §7) | | |
| 42 | +| Introduction | 5 RQ bien posées | Contribution « most comprehensive set of robustness checks » (promotionnel) ; aucun énoncé des résultats | Réécrite : contributions mesurées, résultats annoncés, paragraphe « Relation to the previous version » | | |
| 43 | +| Littérature | Classiques présents | 37 réf. en « citation dump », pas de discussion des résultats contradictoires (Xing et al. vs Conrad et al.), rien sur coûts/multiplicité/réplication, rien sur Muravyev et al. ; 2 références fausses (Ni et al., Barbon–Buraschi) | 5 sous-sections, 97 réf. vérifiées, tensions discutées, pont explicite vers l'univers liquide | | |
| 44 | +| Données | Tables descriptives correctes | Cibles 5 j fausses (C1) ; « implied skewness/kurtosis » présentés comme des moments alors que ce sont des proxys de smile ; N analysé (119 081) jamais distingué de N panel (264 383) ; univers fixe ex post (biais de survie) et entrées tardives (META 2021) non mentionnés ; outliers 1e40 du gamma | Équations des cibles et des composantes HAR, note de bas de page sur l'erreur, proxys qualifiés, N explicités, appendice univers | | |
| 45 | +| Méthodologie | Équations HAR / magnet présentes | Composante journalière HAR = RV_{t−1} dans le code vs RV_t dans l'équation ; équation de corrélation implicite non dérivée ; aucune équation pour FM, tris, coûts, pertes, DM, VAR/FEVD ; « GARCH proxy » n'est pas un GARCH | Toutes les équations ajoutées (FM–NW, calendar-time, MSE/QLIKE, DM, ρ_impl dérivée, VAR/Cholesky/FEVD) ; code aligné sur l'équation HAR | | |
| 46 | +| Résultats RQ1 | — | R² 5 j et tris artefactuels ; t des tris iid sur séries chevauchantes ; double tri avec t empilés ; pas de table de coefficients ; FM calculé mais jamais rapporté | Tables régénérées : panel, coefficients pooled + FM, tris (t_NW et t_iid), double tri par portefeuilles, calendar-time net de coûts | | |
| 47 | +| Résultats RQ2 | Comparaison de 5 modèles | R² comparés sur 264k vs 119k obs. ; bloc IV exactement colinéaire ; OOS jamais tabulé (R²_OOS médians −500 cachés) ; DM rapportés pour 4 titres favorables sur 10 (BA et CSCO, négatifs et significatifs, omis) | Échantillon commun ; modèles non colinéaires ; table OOS (30 titres, MSE + QLIKE) ; DM pour les 30 titres en appendice | | |
| 48 | +| Résultats RQ3 | Idée pertinente | Régression singulière (t = 0,00 de la divergence) ; HC1 sur indicateur chevauchant ; période (2016–2025) non dite | 3 spécifications, NW(h), période et taux de base explicités | | |
| 49 | +| Résultats RQ4 | Test du « max pain » utile | t des grecques ±150 (colinéarité) présentés sans réserve ; erreur-type du 47 % absente | Table limitée au R² et au t(IV) ; erreur-type binomiale ; statut « frozen » annoncé | | |
| 50 | +| Résultats RQ5 | Comparaison ML/VIX/HAR | Lignes OLS surface (MSE 1e60) omises silencieusement ; cibles 5/22 j fausses (R²_OOS 0,99) ; RF/GBM entraînés avant 2020 sans discussion | Table 1 j seulement, omissions expliquées, discussion (Christensen et al. 2023) | | |
| 51 | +| Granger / VAR | Tests par titre | FEVD = carrés d'IRF réduites (pas une décomposition) ; « options = dominant information venue » non étayé | FEVD Cholesky deux ordres (20–29 %), corrélation résiduelle, interprétation prudente | | |
| 52 | +| Robustesse | Batterie large | Entièrement calculée sur la cible fausse ; colonne HC1 et R² par titre non reproductibles (déjà signalé) ; quantiles « significatifs » sans erreurs-types | Tout régénéré ; HC1/NW5/NW22/DC ; sensibilité à la winsorisation désormais interprétée comme fragilité | | |
| 53 | +| Discussion / conclusion | — | « Kurtosis risk premium », comparaison Sharpe 2,33 vs 1,0 (BTZ) et 0,8 (XZZ), « 73.8 % » : tout reposait sur les artefacts | Réécrites ; interprétation : les options prévoient les seconds moments, pas les premiers | | |
| 54 | + | |
| 55 | +## 3. Méthodologie — verdict motivé sur chaque point du §3 du master prompt | |
| 56 | + | |
| 57 | +| Point | Verdict | Motif / action | | |
| 58 | +|---|---|---| | |
| 59 | +| Spécification justifiée | Partiellement, maintenant oui | HAR-RV = référence standard ; pooled OLS justifié ; modèles IV redéfinis sans dépendance linéaire ; LPM de stress maintenu avec NW(h) (logit recommandé, non exécuté) | | |
| 60 | +| Hypothèses d'estimation explicites | Oui (v1.2) | Winsorisation (par titre pour RV), standardisation, plancher des prévisions, fenêtres 500/250, ordre de Cholesky | | |
| 61 | +| Variables correctement définies | **Non en v1.1** → corrigé | Cibles 5 j (C1) ; composante HAR ; proxys de moments requalifiés ; ρ_impl dérivée (approximation équipondérée explicitée) | | |
| 62 | +| Effets fixes | Non pertinents tels quels | Les prédicteurs sont standardisés sur le panel ; FM (effets temps implicites) et R² par titre fournis ; effets fixes titre non ajoutés (recommandé §6) | | |
| 63 | +| Dépendance temporelle/transversale | **Insuffisante en v1.1** → traitée | NW (h−1 ; 5 ; 22), double clustering, FM–NW, séries calendar-time non chevauchantes | | |
| 64 | +| Erreurs-types | Corrigées | Tris : iid → NW ; double tri : empilé → portefeuilles ; RQ3 : HC1 → NW(h) ; DM : variance NW | | |
| 65 | +| Construction de l'échantillon transparente | Oui (v1.2) | N panel vs N complet ; univers fixe ex post et biais de survie reconnus ; période RQ3 | | |
| 66 | +| Robustesse ciblant de vraies menaces | Oui | Chevauchement, dépendance transversale, multiplicité (Bonferroni, Harvey et al.), queues (winsorisation, IC de rang), stabilité temporelle, placebo, coûts | | |
| 67 | +| Interprétation des coefficients | Corrigée | bps par écart-type ; pp de probabilité ; parts de variance orthogonalisées | | |
| 68 | +| Significativité statistique vs économique | Désormais centrale | R² 0,3 % « détectable mais marginal » ; Sharpe nets ; break-even ; IC < 0,04 | | |
| 69 | +| Langage causal | Nettoyé | « Granger-cause » strictement temporel ; « dominant venue » retiré ; FEVD « informative but secondary » | | |
| 70 | + | |
| 71 | +## 4. Vérifications empiriques effectuées | |
| 72 | + | |
| 73 | +### 4.1 Diagnostic de l'erreur C1 (reproductible) | |
| 74 | +``` | |
| 75 | +python3 -I - <<'EOF' | |
| 76 | +import pandas as pd, numpy as np | |
| 77 | +rv = pd.read_parquet('data/processed/realized_vol.parquet').sort_values(['ticker','trade_date']) | |
| 78 | +g = rv.groupby('ticker')['daily_return'] | |
| 79 | +bug = g.transform(lambda x: x.shift(-1).rolling(5, min_periods=3).sum()) | |
| 80 | +fwd = g.transform(lambda x: x[::-1].rolling(5, min_periods=3).sum()[::-1].shift(-1)) | |
| 81 | +print(np.isclose(bug, rv['ret_5d'], equal_nan=True).mean()) # 1.000 | |
| 82 | +print(np.isclose(fwd, rv['ret_5d'], equal_nan=True).mean()) # 0.00005 | |
| 83 | +print(rv[['ret_5d','daily_return']].corr().iloc[0,1]) # 0.416 | |
| 84 | +EOF | |
| 85 | +``` | |
| 86 | +`ret_1d` et `rv_fwd_1d` (shift(−1)) sont corrects : tous les résultats « 1 jour » de v1.1 sont confirmés. | |
| 87 | + | |
| 88 | +### 4.2 Cohérence des chiffres (v1.2) | |
| 89 | +Toutes les tables sont générées par `scripts/14_make_paper_tables.py` ; les nombres du texte ont été relus contre les CSV | |
| 90 | +(README, résumé, introduction, résultats, robustesse, conclusion). Aucun écart résiduel connu. Incohérences v1.1 relevées : | |
| 91 | +abstract/README/texte alignés entre eux mais sur des valeurs fausses ; HAR+IV = 0,442 (Table RQ2) vs 0,483 (note LOYO) | |
| 92 | +(winsorisation par titre vs poolée) — résolu par l'échantillon commun et la winsorisation par titre dans 03/08/13. | |
| 93 | + | |
| 94 | +### 4.3 Résultats corrigés (synthèse) | |
| 95 | +- RQ1 : R² 5 j = 0,29 % (actions), 0,61 % (ETF), 1,01 % (indices) ; 1 j = 0,08 / 0,14 / 0,43 %. Seul le skew 25δ reste | |
| 96 | + significatif en double clustering (t = 2,91) et en FM (t = 1,99), signe **positif** (Conrad et al. 2013) — contraire à Xing et al. (2010). | |
| 97 | + Tris 5 j : IV ATM Sharpe 0,57 (t_NW 2,71), PC vol 0,42 (2,64), PC OI 0,42 (2,04), impl. skewness −0,49 (−2,41), kurtosis −0,33 (−1,66). | |
| 98 | + Calendar-time : seule la stratégie IV ATM reste positive à 10 bps (Sharpe 0,34 ; break-even 27 bps) ; PC vol : turnover 51 %/j, break-even 3,8 bps. | |
| 99 | +- RQ2 : échantillon commun 119 093 : HAR 0,415 → HAR+IV 0,457 (+9,9 %) à 1 j ; 0,421 → 0,515 (+22,3 %) à 5 j (IV seule 0,463 > HAR). | |
| 100 | + OOS 30 titres : MSE ratio médian 0,967 (DM>1,96 : 14 ; <−1,96 : 0) ; **QLIKE ratio 1,17 (pire pour 15 titres)** ; à 5 j, IV seule | |
| 101 | + meilleure sous les deux pertes. | |
| 102 | +- RQ3 (fév. 2016–déc. 2025) : ratio t_NW = 3,27 / 4,13 / 2,33 ; divergence 2,14 / 1,89 / 1,38 ; R² 0,22 / 0,15 / 0,09. | |
| 103 | +- RQ4 (figé) : R² RV 3,8 % → 9,5 % (3 m) → 8,2 % (6 m) ; magnet 47,0 % (ET 0,5 pp), 45,8–48,0 % par quintile. | |
| 104 | +- RQ5 (figé, 1 j) : VIX 0,336 ; HAR 0,437 ; RF 0,143 ; GBM 0,095 ; importance 2 sem. 50,8 %. | |
| 105 | +- Granger : IV→RV 100 % (F 62,4) ; RV→IV 61 % ; skew→RV 94 % ; return→skew 96 % ; IV→return 25 % ; PC→return 6 %. | |
| 106 | + FEVD à 20 j : 20,2 % (RV d'abord) / 28,5 % (IV d'abord) ; corr. résiduelle 0,20. | |
| 107 | +- Robustesse : sous-périodes R² 5 j 0,13–4,2 % ; HAR+IV > HAR dans les 9 sous-périodes (+4 % à +114 %) ; régimes VIX 0,11 → 3,0 % ; | |
| 108 | + LOYO 0,26–0,53 % et Δ +9,2 à +19,5 % ; placebo 0,04 % vs 0,31 % ; sans winsorisation kurtosis t = −0,47 ; IC |ρ| ≤ 0,04. | |
| 109 | + | |
| 110 | +## 5. Littérature | |
| 111 | + | |
| 112 | +- **Vérifiées** : 45 entrées v1.1 via Crossref (`docs/verify/crossref/crossref_check*.json`) ; DOI ajoutés. | |
| 113 | +- **Corrigées** : `ni2009does` → Ni, Pearson & Poteshman (2005, JFE 78(1), 49–87, 10.1016/j.jfineco.2004.08.005) ; | |
| 114 | + `barbon2022option` → working paper SSRN 3725454 (aucune publication JFE trouvée) ; titres complétés (Blair et al., Busch et al., | |
| 115 | + Driessen et al., Easley et al., Patton & Sheppard). | |
| 116 | +- **Ajoutées** : 52 (liste avec DOI dans CHANGELOG §3), intégrées à l'argument : moments model-free (BKM 2003, Bakshi–Madan, | |
| 117 | + Britten-Jones–Neuberger, Jiang–Tian), signe du skew (Dennis–Mayhew, Bali–Hovakimian, Rehman–Vilkov, Conrad et al., Bali–Murray, | |
| 118 | + Borochin et al., Vasquez, Mixon), découverte des prix et microstructure (Chakravarty et al., Muravyev et al. 2013/2025, Ni–Pan–Poteshman), | |
| 119 | + bornes de Martin, prévision de volatilité (Andersen–Bollerslev, ABDE, Liu–Patton–Sheppard, Taylor et al., Prokopczuk–Wese Simen, | |
| 120 | + Kourtis et al. [JFM], Bollerslev–Patton–Quaedvlieg, Hansen–Lunde, Patton 2011, Giacomini–White, Clark–West, MCS, Poon–Granger), | |
| 121 | + corrélation (Skintzi–Refenes [JFM], Pollet–Wilson, Buraschi et al., Faria et al., Bollerslev–Todorov), pinning/gamma (Ni et al. 2005/2021, | |
| 122 | + Golez–Jackwerth, Baltussen et al.), inférence et anomalies (Granger, Sims, Kilian–Lütkepohl, Hansen–Hodrick, Jegadeesh–Titman, Lo, | |
| 123 | + Novy-Marx–Velikov, Hou–Xue–Zhang, McLean–Pontiff, Chordia–Goyal–Saretto, Ang et al. 2006). | |
| 124 | +- Total : 97 entrées, 100 % citées, 0 non vérifiée. | |
| 125 | + | |
| 126 | +## 6. Analyses recommandées, NON exécutées | |
| 127 | + | |
| 128 | +1. **Univers point-in-time** incluant les petites capitalisations (où la littérature situe la prédictibilité) — nécessite les | |
| 129 | + données brutes d'options (absentes du laptop). | |
| 130 | +2. **Moments risque-neutres model-free (BKM 2003)** à maturité fixe, en remplacement des proxys de smile — données brutes requises. | |
| 131 | +3. **Ajustement factoriel** (CAPM, FF5 + momentum) des stratégies long-short, en particulier du tri IV ATM — données de facteurs externes non téléchargées (règle du protocole). | |
| 132 | +4. **Logit / probit** pour RQ3 et indicateur de stress défini sur les rendements réalisés (drawdown) plutôt que sur le VIX régresseur. | |
| 133 | +5. **Model confidence set (Hansen–Lunde–Nason 2011)** et test Clark–West pour les modèles emboîtés en RQ2 ; HAR en logs ; HARQ ; correction de la prime de risque de variance (Prokopczuk–Wese Simen 2014). | |
| 134 | +6. **Erreurs-types bootstrap** pour les régressions quantiles (seuls les coefficients sont rapportés). | |
| 135 | +7. **Effets fixes titre** et prédicteurs standardisés dans la coupe (vs sur le panel) pour RQ1. | |
| 136 | +8. **Re-exécution de RQ4-A et RQ5** avec les cibles corrigées (code corrigé, données brutes absentes) ; régulariser (ridge/LASSO) la surface SPX. | |
| 137 | +9. **Bootstrap par blocs** des Sharpe calendar-time (Lo 2002) et coûts mesurés à partir des spreads effectifs. | |
| 138 | + | |
| 139 | +## 7. Maturité pour publication | |
| 140 | + | |
| 141 | +- **Forme** : standard UQO respecté ; 53 pages (27 tables générées) ; compilation propre (0 erreur, 0 référence/citation indéfinie, | |
| 142 | + 0 overfull) ; version anonyme vérifiée (0 occurrence de Boucher/UQO/Outaouais/Gatineau). | |
| 143 | +- **Fond** : les résultats sont désormais défendables et l'honnêteté sur la rétractation est un atout d'intégrité. Mais la contribution | |
| 144 | + « rendements » est devenue un résultat largement **négatif** (prédictibilité marginale dans les grandes capitalisations, un seul | |
| 145 | + prédicteur robuste au signe contre-intuitif, aucune stratégie nette robuste à la multiplicité). La contribution « volatilité » | |
| 146 | + (surface IV vs HAR-RV, dépendance à la fonction de perte, IV seule gagnante à 5 j) et la partie corrélation implicite sont | |
| 147 | + solides mais incrémentales par rapport à Busch et al. (2011), Taylor et al. (2010), Kourtis et al. (2016). | |
| 148 | +- **Risques de rejet (JFM)** : (i) univers de 69 titres ex post avec biais de survie face à un titre annonçant 3,8 G de contrats ; | |
| 149 | + (ii) proxys de moments plutôt que moments model-free ; (iii) absence d'ajustement factoriel et de coûts mesurés ; | |
| 150 | + (iv) RQ4/RQ5 figés et non ré-exécutables ; (v) cinq questions hétérogènes dans un seul papier (un arbitre demandera de recentrer). | |
| 151 | +- **Recommandations éditoriales** : (a) **retitrer** (« 3.8 Billion Option Contracts » survend l'échantillon analysé) ; (b) recentrer | |
| 152 | + le papier sur RQ2 + Granger/VAR + RQ3 (volatilité et corrélation) et reléguer RQ1 en « evidence from the liquid segment » ; | |
| 153 | + (c) retirer ou refaire RQ4-A/RQ5 avant soumission ; (d) **mettre à jour SSRN 7626643** (la version en ligne contient les résultats | |
| 154 | + rétractés) ; (e) soumettre à JFM avec une lettre expliquant la correction. | |
| 155 | +- **Niveau** : prêt pour re-dépôt SSRN et circulation comme working paper ; soumission JFM envisageable après (a)–(c), en acceptant | |
| 156 | + un risque de rejet élevé sur l'originalité des résultats « rendements ». | |
added
docs/verify/crossref/crossref_check.json
+4529 −0
Large diff (4,530 lines) is not loaded by default to keep the page fast.Load diff
added
docs/verify/crossref/crossref_check.log
+93 −0
Large diff (93 lines) is not loaded by default to keep the page fast.Load diff
added
docs/verify/crossref/crossref_check2.json
+2006 −0
Large diff (2,007 lines) is not loaded by default to keep the page fast.Load diff
added
docs/verify/crossref/crossref_check2.log
+68 −0
Large diff (68 lines) is not loaded by default to keep the page fast.Load diff
added
docs/verify/logs-revision/02_rq1_return_predictability.log
+69 −0
Large diff (69 lines) is not loaded by default to keep the page fast.Load diff
added
docs/verify/logs-revision/03_rq2_rv_forecasting.log
+42 −0
Large diff (42 lines) is not loaded by default to keep the page fast.Load diff
added
docs/verify/logs-revision/04_rq3_correlation_divergence.log
+102 −0
Large diff (102 lines) is not loaded by default to keep the page fast.Load diff
added
docs/verify/logs-revision/05_rq4_greeks_decay_magnets.log
+35 −0
Large diff (35 lines) is not loaded by default to keep the page fast.Load diff
added
docs/verify/logs-revision/07_descriptive_stats.log
+118 −0
Large diff (118 lines) is not loaded by default to keep the page fast.Load diff
added
docs/verify/logs-revision/08_subperiod_regime.log
+82 −0
Large diff (82 lines) is not loaded by default to keep the page fast.Load diff
added
docs/verify/logs-revision/09_portfolio_sorts.log
+55 −0
Large diff (55 lines) is not loaded by default to keep the page fast.Load diff
added
docs/verify/logs-revision/10_robustness.log
+187 −0
Large diff (187 lines) is not loaded by default to keep the page fast.Load diff
added
docs/verify/logs-revision/11_granger_var.log
+65 −0
Large diff (65 lines) is not loaded by default to keep the page fast.Load diff
added
docs/verify/logs-revision/13_extended_robustness.log
+75 −0
Large diff (75 lines) is not loaded by default to keep the page fast.Load diff
modified
figures/fig_irf.pdf
+0 −0
Binary file not shown.
modified
figures/fig_portfolio_sorts.pdf
+0 −0
Binary file not shown.
modified
figures/fig_portfolio_sorts.png
+0 −0
Binary file not shown.
modified
figures/fig_rolling_r2.pdf
+0 −0
Binary file not shown.
modified
figures/fig_rolling_r2.png
+0 −0
Binary file not shown.
modified
figures/fig_subperiod.pdf
+0 −0
Binary file not shown.
modified
figures/fig_subperiod.png
+0 −0
Binary file not shown.
modified
paper/appendix/appendix.tex
+11 −83
Large diff (107 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/main.pdf
+0 −0
Binary file not shown.
modified
paper/main.tex
+4 −9
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/main_anon.pdf
+0 −0
Binary file not shown.
modified
paper/main_anon.tex
+4 −9
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/preamble.tex
+1 −1
Large diff (8 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/references.bib
+644 −27
Large diff (953 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/sections/conclusion.tex
+7 −9
Large diff (25 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/sections/data.tex
+42 −72
Large diff (162 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/sections/discussion.tex
+17 −11
Large diff (39 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/sections/introduction.tex
+13 −10
Large diff (33 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/sections/literature.tex
+13 −13
Large diff (41 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/sections/methodology.tex
+65 −30
Large diff (123 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/sections/results.tex
+67 −201
Large diff (281 lines) is not loaded by default to keep the page fast.Load diff
modified
paper/sections/robustness.tex
+44 −202
Large diff (264 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/app_tickers.tex
+1 −0
Large diff (1 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_app_crises.tex
+28 −0
Large diff (28 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_app_dm.tex
+49 −0
Large diff (49 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_app_importance.tex
+29 −0
Large diff (29 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_autocorr.tex
+22 −0
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_calendar.tex
+36 −0
Large diff (36 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_controls.tex
+33 −0
Large diff (33 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_decile.tex
+25 −0
Large diff (25 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_desc_groups.tex
+25 −0
Large diff (25 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_dsort.tex
+26 −0
Large diff (26 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_fevd.tex
+25 −0
Large diff (25 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_granger.tex
+29 −0
Large diff (29 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_ic.tex
+29 −0
Large diff (29 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_loyo.tex
+33 −0
Large diff (33 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_magnet.tex
+24 −0
Large diff (24 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_quantile.tex
+27 −0
Large diff (27 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_robust_se.tex
+42 −0
Large diff (42 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_rq1_coef.tex
+31 −0
Large diff (31 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_rq1_panel.tex
+24 −0
Large diff (24 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_rq2_insample.tex
+24 −0
Large diff (24 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_rq2_oos.tex
+36 −0
Large diff (36 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_rq3.tex
+40 −0
Large diff (40 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_rq4.tex
+25 −0
Large diff (25 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_rq5.tex
+21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_sorts.tex
+34 −0
Large diff (34 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_subperiod.tex
+28 −0
Large diff (28 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_vix_regime.tex
+22 −0
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
added
paper/tables/tab_winsor.tex
+28 −0
Large diff (28 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/descriptive_autocorrelations.csv
+21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/descriptive_by_group.csv
+5 −0
Large diff (5 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/descriptive_correlation_matrix.csv
+12 −0
Large diff (12 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/descriptive_coverage_by_year.csv
+17 −0
Large diff (17 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/descriptive_cross_sectional_dispersion.csv
+17 −0
Large diff (17 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/descriptive_options_quality.csv
+17 −0
Large diff (17 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/descriptive_summary_stats.csv
+24 −0
Large diff (24 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/descriptive_vix_regimes.csv
+6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/double_sort_iv_skew.csv
+10 −0
Large diff (10 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/extended_decile_sorts.csv
+7 −0
Large diff (7 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/extended_information_coefficients.csv
+21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/extended_leave_one_year_out.csv
+17 −0
Large diff (17 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/extended_newey_west_lags.csv
+67 −0
Large diff (67 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/extended_placebo.csv
+12 −0
Large diff (12 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/extended_winsorization_sensitivity.csv
+6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/fevd_results.csv
+21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/granger_causality.csv
+13 −0
Large diff (13 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/irf_results.csv
+401 −0
Large diff (401 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/portfolio_sort_results.csv
+85 −0
Large diff (85 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/pre_post_covid.csv
+9 −0
Large diff (9 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/regime_results.csv
+16 −0
Large diff (16 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/robustness_double_clustered.csv
+23 −0
Large diff (23 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/robustness_newey_west.csv
+23 −0
Large diff (23 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/robustness_quantile_regression.csv
+56 −0
Large diff (56 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/robustness_ticker_r2.csv
+70 −0
Large diff (70 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/robustness_with_controls.csv
+33 −0
Large diff (33 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/rolling_r2.csv
+121 −0
Large diff (121 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/rq1_meta.csv
+13 −0
Large diff (13 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/rq1_regression_results.csv
+133 −0
Large diff (133 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/rq2_diebold_mariano.csv
+21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/rq2_insample.csv
+11 −0
Large diff (11 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/rq2_oos_results.csv
+301 −0
Large diff (301 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/rq3_crisis_analysis.csv
+10 −0
Large diff (10 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/rq3_stress_prediction.csv
+22 −0
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/rq4_greeks_decay.csv
+13 −0
Large diff (13 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/rq4_price_magnet.csv
+6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/rq5_feature_importance.csv
+25 −0
Large diff (25 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/rq5_model_comparison.csv
+19 −0
Large diff (19 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/subperiod_results.csv
+37 −0
Large diff (37 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/transaction_cost_analysis.csv
+8 −0
Large diff (8 lines) is not loaded by default to keep the page fast.Load diff
added
results/_pre-revision-20261017/var_results.csv
+21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
added
results/calendar_time_strategies.csv
+15 −0
Large diff (15 lines) is not loaded by default to keep the page fast.Load diff
modified
results/descriptive_correlation_matrix.csv
+10 −10
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
modified
results/descriptive_summary_stats.csv
+2 −2
Large diff (8 lines) is not loaded by default to keep the page fast.Load diff
modified
results/descriptive_vix_regimes.csv
+5 −5
Large diff (11 lines) is not loaded by default to keep the page fast.Load diff
modified
results/double_sort_iv_skew.csv
+16 −10
Large diff (26 lines) is not loaded by default to keep the page fast.Load diff
modified
results/extended_decile_sorts.csv
+6 −6
Large diff (13 lines) is not loaded by default to keep the page fast.Load diff
modified
results/extended_information_coefficients.csv
+10 −10
Large diff (23 lines) is not loaded by default to keep the page fast.Load diff
modified
results/extended_leave_one_year_out.csv
+17 −17
Large diff (34 lines) is not loaded by default to keep the page fast.Load diff
modified
results/extended_newey_west_lags.csv
+33 −33
Large diff (69 lines) is not loaded by default to keep the page fast.Load diff
modified
results/extended_placebo.csv
+11 −11
Large diff (23 lines) is not loaded by default to keep the page fast.Load diff
modified
results/extended_winsorization_sensitivity.csv
+5 −5
Large diff (11 lines) is not loaded by default to keep the page fast.Load diff
modified
results/fevd_results.csv
+21 −21
Large diff (42 lines) is not loaded by default to keep the page fast.Load diff
modified
results/granger_causality.csv
+11 −11
Large diff (24 lines) is not loaded by default to keep the page fast.Load diff
modified
results/irf_results.csv
+401 −401
Large diff (802 lines) is not loaded by default to keep the page fast.Load diff
modified
results/portfolio_sort_results.csv
+85 −85
Large diff (170 lines) is not loaded by default to keep the page fast.Load diff
modified
results/pre_post_covid.csv
+6 −6
Large diff (15 lines) is not loaded by default to keep the page fast.Load diff
modified
results/regime_results.csv
+16 −16
Large diff (32 lines) is not loaded by default to keep the page fast.Load diff
modified
results/robustness_double_clustered.csv
+22 −22
Large diff (45 lines) is not loaded by default to keep the page fast.Load diff
modified
results/robustness_newey_west.csv
+23 −23
Large diff (46 lines) is not loaded by default to keep the page fast.Load diff
modified
results/robustness_quantile_regression.csv
+55 −55
Large diff (111 lines) is not loaded by default to keep the page fast.Load diff
modified
results/robustness_ticker_r2.csv
+69 −69
Large diff (139 lines) is not loaded by default to keep the page fast.Load diff
modified
results/robustness_with_controls.csv
+32 −32
Large diff (65 lines) is not loaded by default to keep the page fast.Load diff
modified
results/rolling_r2.csv
+120 −120
Large diff (241 lines) is not loaded by default to keep the page fast.Load diff
modified
results/rq1_meta.csv
+13 −13
Large diff (26 lines) is not loaded by default to keep the page fast.Load diff
modified
results/rq1_regression_results.csv
+133 −133
Large diff (266 lines) is not loaded by default to keep the page fast.Load diff
modified
results/rq2_diebold_mariano.csv
+61 −21
Large diff (82 lines) is not loaded by default to keep the page fast.Load diff
modified
results/rq2_insample.csv
+11 −11
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
modified
results/rq2_oos_results.csv
+301 −301
Large diff (602 lines) is not loaded by default to keep the page fast.Load diff
modified
results/rq3_stress_prediction.csv
+40 −22
Large diff (62 lines) is not loaded by default to keep the page fast.Load diff
modified
results/subperiod_results.csv
+28 −28
Large diff (65 lines) is not loaded by default to keep the page fast.Load diff
modified
results/transaction_cost_analysis.csv
+71 −8
Large diff (79 lines) is not loaded by default to keep the page fast.Load diff
modified
results/var_results.csv
+21 −21
Large diff (42 lines) is not loaded by default to keep the page fast.Load diff
modified
scripts/02_rq1_return_predictability.py
+29 −43
Large diff (137 lines) is not loaded by default to keep the page fast.Load diff
modified
scripts/03_rq2_rv_forecasting.py
+107 −109
Large diff (252 lines) is not loaded by default to keep the page fast.Load diff
modified
scripts/04_rq3_correlation_divergence.py
+35 −29
Large diff (80 lines) is not loaded by default to keep the page fast.Load diff
modified
scripts/06_rq5_ml_rv_forecast.py
+10 −3
Large diff (26 lines) is not loaded by default to keep the page fast.Load diff
modified
scripts/08_subperiod_regime.py
+19 −7
Large diff (63 lines) is not loaded by default to keep the page fast.Load diff
modified
scripts/09_portfolio_sorts.py
+76 −79
Large diff (194 lines) is not loaded by default to keep the page fast.Load diff
modified
scripts/10_robustness.py
+8 −2
Large diff (31 lines) is not loaded by default to keep the page fast.Load diff
modified
scripts/11_granger_var.py
+27 −20
Large diff (84 lines) is not loaded by default to keep the page fast.Load diff
modified
scripts/13_extended_robustness.py
+9 −8
Large diff (31 lines) is not loaded by default to keep the page fast.Load diff
added
scripts/14_make_paper_tables.py
+601 −0
Large diff (601 lines) is not loaded by default to keep the page fast.Load diff
modified
src/wp7/config.py
+18 −9
Large diff (39 lines) is not loaded by default to keep the page fast.Load diff
modified
src/wp7/data_io.py
+80 −4
Large diff (112 lines) is not loaded by default to keep the page fast.Load diff
modified
src/wp7/econometrics.py
+86 −12
Large diff (135 lines) is not loaded by default to keep the page fast.Load diff
modified
src/wp7/forecasting.py
+14 −11
Large diff (44 lines) is not loaded by default to keep the page fast.Load diff
modified
src/wp7/portfolio.py
+151 −10
Large diff (195 lines) is not loaded by default to keep the page fast.Load diff