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.

14.8 KB

# CHANGELOG — Révision scientifique complète (editorial board, 2026-10-17)

Papier : WP 7 — The Options-Implied Information Content for Cross-Asset Return and Volatility Prediction (finance/options-implied-cross-asset, dépôt wp7_uqo.git). État de départ figé : tag pre-revision-20261017, PDF docs/main_pre-revision-20261017.pdf (29 pages, v1.1). État d'arrivée : paper/main.pdf (53 pages, v1.2, October 2026), paper/main_anon.pdf. Rapport scientifique : docs/REVIEW-REPORT.md. Les CSV de résultats remplacés sont conservés dans results/_pre-revision-20261017/ (41 fichiers, copie exacte du tag).

Convention : C = correction (erreur démontrée), A = ajout/renforcement, E = éditorial.


# 1. Corrections majeures (avant → après, preuve)

# C1 — Cibles multi-jours mal alignées (erreur de code, affecte toute la partie « weekly » du papier)

  • Où : scripts/01_extract_data.py::compute_weekly_rv (et 06_rq5_ml_rv_forecast.py pour SPX). ret_5d = daily_return.shift(-1).rolling(5).sum() : la fenêtre rolling est rétrospective, donc ret_5d(t) = r_{t-3} + r_{t-2} + r_{t-1} + r_t + r_{t+1} — quatre termes passés/contemporains sur cinq. Idem pour rv_fwd_5d et rv_fwd_22d (RQ5).
  • Preuve : data/processed/realized_vol.parquet — 100 % des valeurs de ret_5d coïncident avec la définition fautive, 0,005 % avec la vraie somme forward ; corr(ret_5d, daily_return_t) = 0,42 (contrôle exécuté le 2026-10-17, voir REVIEW-REPORT §4.1). ret_1d et rv_fwd_1d étaient corrects.
  • Correction : src/wp7/data_io.py::forward_sum / fix_forward_targets (somme strictement forward sum_{j=1..5} x_{t+j}, 5 observations exigées) appliquée par défaut dans load_merged() ; colonnes ret_5d_legacy, rv_fwd_5d_legacy conservées ; WP7_LEGACY_TARGETS=1 reproduit v1.1. Parquets livrés inchangés.
  • Conséquences chiffrées (v1.1 → v1.2) :
Résultat v1.1 v1.2
R² rendement 5 j, actions / ETF / indices / tous 4,76 % / 12,4 % / 19,3 % / 5,29 % 0,29 % / 0,61 % / 1,01 % / 0,31 %
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
Tri PC volume ratio −30,3 %, Sharpe −2,48, t = −21,8 +5,1 %, Sharpe 0,42, t_NW = 2,64
Tri skew 25δ −37,5 %, Sharpe −1,87 +5,9 %, Sharpe 0,31, t_NW = 1,54
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
R² HAR-RV, cible RV 5 j 0,888 0,421 (échantillon commun)
R² HAR+IV, cible RV 5 j 0,896 0,515
RQ5 R²_OOS HAR-RV 5 j / 22 j 0,948 / 0,994 retirés (non recalculables, données brutes absentes)
Sous-périodes, R² 5 j 3,1 %–14,4 % 0,13 %–4,2 %
Régimes VIX, R² 5 j 2,7 %–19,8 % 0,11 %–3,0 %
Leave-one-year-out, R² 5 j [4,7 %, 5,7 %] [0,26 %, 0,53 %]
Placebo 0,0008 vs 0,0529 0,0004 vs 0,0031
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)
Winsorisation : t kurtosis sans winsorisation 13,8 −0,47
Robustesse SE 5 j : # prédicteurs sig. HC1 / NW(5) / DC 10 / 9 / 8 7 / 4 / 1

# C2 — Inférence des tris et doubles tris

  • Où : src/wp7/portfolio.py. v1.1 : t = moyenne/(σ/√N) sur la série quotidienne de rendements 5 j chevauchants ; double tri : t calculé en empilant tous les titre-jours d'une cellule (ignore la dépendance transversale et le chevauchement).
  • Après : t Newey–West (h−1 = 4 retards) sur la série de portefeuille ; cellules du double tri = portefeuilles 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). Facteur d'inflation mesuré : 1,4–1,8.

# C3 — Analyse de coûts de transaction

  • v1.1 : coûts appliqués au seul tri sur l'implied skewness avec un turnover supposé de 2/5 par jour.
  • v1.2 : implémentation calendar-time (Jegadeesh–Titman) de chaque stratégie (h = 1 et 5) : série quotidienne non chevauchante, turnover mesuré Σ|W_t − W_{t−1}|, coût de rentabilité nul, Sharpe net à 5/10/25/50 bps (portfolio.calendar_time_long_short, results/calendar_time_strategies.csv, 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).

# C4 — Comparaison de modèles RQ2 sur des échantillons différents + colinéarité exacte

  • v1.1 : HAR-RV R² = 0,359 sur 264 345 obs. vs HAR+IV R² = 0,442 sur 119 093 obs. (« +23,3 % ») ; « IV only » contenait iv_atm_30d, iv_atm_90d et iv_term_slope = iv_atm_90d − iv_atm_30d (dépendance linéaire exacte) → prévisions OOS explosives (R²_OOS médian −539, QLIKE 73 606 dans rq2_oos_results.csv v1.1, jamais rapportées) ; composante journalière HAR = RV_{t−1} au lieu de RV_t ; plancher QLIKE à 1e-10.
  • v1.2 : échantillon commun (119 093), RV_t comme composante journalière (éq. HAR du papier), blocs IV sans la pente, prévisions plancher = 1er centile de la cible d'entraînement, DM avec variance NW(h) pour les 30 titres (et non 4 titres choisis parmi 10). Résultat : HAR 0,415 → 0,457 (+9,9 %) à 1 j ; 0,421 → 0,515 (+22,3 %) à 5 j ; 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.
  • 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).

# C5 — RQ3 : design singulier

  • v1.1 régressait sur corr_divergence, corr_ratio, implied_corr, realized_corr ensemble ; corr_divergence = implied_corr − realized_corr ⇒ X'X singulier, t « 0,00 » de la divergence = artefact (déjà signalé dans AUDIT.md §7). Erreurs-types HC1 sur un indicateur forward chevauchant.
  • v1.2 : trois spécifications séparées (ratio ; divergence ; composantes) + VIX + IV SPX, NW(h). Ratio : 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 (la corrélation réalisée n'existe qu'à partir de 2016-02-02 ; N = 2 486).

# C6 — FEVD non orthogonalisée

  • v1.1 : « parts » calculées à partir des IRF réduites à chocs unitaires (sans Σ) : 73,8 % à 20 j.
  • v1.2 : econometrics.orthogonalized_irf_fevd (Cholesky, deux ordres). Part de la variance de RV due aux chocs IV à 20 j : 20,2 % (RV d'abord) / 28,5 % (IV d'abord) ; corrélation résiduelle moyenne 0,20 ; part de IV due à RV < 6 %.

# C7 — Bibliographie

  • ni2009does (« Does option trading convey stock price information?, JF 60(3) 2009 ») : titre, revue, volume, pages erronés → remplacé par Ni, Pearson & Poteshman (2005), JFE 78(1), 49–87, DOI 10.1016/j.jfineco.2004.08.005.
  • barbon2022option (« JFE 143(1) 316–348 ») : aucune publication trouvée (Crossref) → @unpublished SSRN 3725454.
  • DOI ajoutés aux 45 entrées existantes ; titres complétés (Blair et al. 2001, Busch et al. 2011, Driessen et al. 2009, Easley et al. 1998, Patton & Sheppard 2015).

# C8 — Chiffres du texte non reproductibles (signalés dans AUDIT/CHANGES v1.1, désormais régénérés)

  • Colonne HC1 de l'ancienne Table « robust_se » (kurtosis 25,87) et distribution R² par titre (5,9 % / 4,7 %) ne correspondaient à aucun CSV → toutes les tables sont désormais générées par scripts/14_make_paper_tables.py.

# 2. Éditorial et structure (E)

  • Toutes les tables du papier (27 fragments paper/tables/*.tex) sont générées depuis results/ ; plus aucun nombre tapé à la main (sauf la table d'inventaire des données brutes, figée).
  • Introduction réécrite (contribution, résultats, paragraphe « Relation to the previous version ») ; revue de littérature restructurée (5 sous-sections, 52 références ajoutées, discussion des résultats contradictoires) ; données (univers fixe, biais de survie, proxys ≠ moments BKM, équation des cibles + note de bas de page sur l'erreur) ; méthodologie (équations FM, calendar-time, pertes MSE/QLIKE, DM, corrélation implicite dérivée, VAR/FEVD) ; résultats, robustesse, discussion, conclusion réécrits sur les nouveaux chiffres ; appendice (univers, crises, DM par titre, features SPX, importance RF).
  • Résumé, mots-clés, \WPversion 1.2, \WPdate October 2026 ; main_anon.tex régénéré.
  • Vocabulaire : « GARCH proxy » → « ARCH-type benchmark » ; « implied skewness/kurtosis » qualifiés de proxys.

# 3. Références ajoutées (52, toutes vérifiées Crossref — docs/verify/crossref/*.json|log)

Bakshi–Kapadia–Madan 2003 (10.1093/rfs/16.1.0101) ; Bakshi–Madan 2000 (10.1016/S0304-405X(99)00050-1) ; Britten-Jones–Neuberger 2000 (10.1111/0022-1082.00228) ; Jiang–Tian 2005 (10.1093/rfs/hhi027) ; Dennis–Mayhew 2002 (10.2307/3594989) ; Bali–Hovakimian 2009 (10.1287/mnsc.1090.1063) ; Rehman–Vilkov 2012 (SSRN 1301648) ; Conrad–Dittmar–Ghysels 2013 (10.1111/j.1540-6261.2012.01795.x) ; Bali–Murray 2013 (10.1017/S0022109013000410) ; Mixon 2007 (10.1016/j.jempfin.2006.06.003) ; Vasquez 2017 (10.1017/S002210901700076X) ; Borochin–Chang–Wu 2020 (10.1016/j.jempfin.2020.06.003) ; Martin 2017 (10.1093/qje/qjw034) ; Martin–Wagner 2019 (10.1111/jofi.12778) ; Christoffersen–Jacobs–Chang 2013 (10.1016/B978-0-444-53683-9.00010-4) ; Chakravarty–Gulen–Mayhew 2004 (10.1111/j.1540-6261.2004.00661.x) ; Muravyev–Pearson–Broussard 2013 (10.1016/j.jfineco.2012.09.003) ; Muravyev–Pearson–Pollet 2025 (10.1016/j.jfineco.2025.104153) ; Ni–Pan–Poteshman 2008 (10.1111/j.1540-6261.2008.01352.x) ; Ni–Pearson–Poteshman–White 2021 (10.1093/rfs/hhaa082) ; Golez–Jackwerth 2012 (10.1016/j.jfineco.2012.06.010) ; Baltussen–Da–Lammers–Martens 2021 (10.1016/j.jfineco.2021.04.029) ; Andersen–Bollerslev 1998 (10.2307/2527343) ; Andersen–Bollerslev–Diebold–Ebens 2001 (10.1016/S0304-405X(01)00055-1) ; Liu–Patton–Sheppard 2015 (10.1016/j.jeconom.2015.02.008) ; Taylor–Yadav–Zhang 2010 (10.1016/j.jbankfin.2009.09.015) ; Prokopczuk–Wese Simen 2014 (10.1016/j.jbankfin.2013.12.002) ; Kourtis–Markellos–Symeonidis 2016 (10.1002/fut.21792) ; Bollerslev–Patton–Quaedvlieg 2016 (10.1016/j.jeconom.2015.10.007) ; Bollerslev 1986 (10.1016/0304-4076(86)90063-1) ; Hansen–Lunde 2005 (10.1002/jae.800) ; Patton 2011 (10.1016/j.jeconom.2010.03.034) ; Giacomini–White 2006 (10.1111/j.1468-0262.2006.00718.x) ; Clark–West 2007 (10.1016/j.jeconom.2006.05.023) ; Hansen–Lunde–Nason 2011 (10.3982/ECTA5771) ; Poon–Granger 2003 (10.1257/jel.41.2.478) ; Skintzi–Refenes 2005 (10.1002/fut.20137) ; Pollet–Wilson 2010 (10.1016/j.jfineco.2010.02.011) ; Buraschi–Trojani–Vedolin 2014 (10.1111/jofi.12095) ; Faria–Kosowski–Wang 2022 (10.1016/j.jbankfin.2021.106399) ; Bollerslev–Todorov 2011 (10.1111/j.1540-6261.2011.01695.x) ; Granger 1969 (10.2307/1912791) ; Sims 1980 (10.2307/1912017) ; Kilian–Lütkepohl 2017 (10.1017/9781108164818) ; Hansen–Hodrick 1980 (10.1086/260910) ; Jegadeesh–Titman 1993 (10.1111/j.1540-6261.1993.tb04702.x) ; Lo 2002 (10.2469/faj.v58.n4.2453) ; Novy-Marx–Velikov 2016 (10.1093/rfs/hhv063) ; Hou–Xue–Zhang 2020 (10.1093/rfs/hhy131) ; McLean–Pontiff 2016 (10.1111/jofi.12365) ; Chordia–Goyal–Saretto 2020 (10.1093/rfs/hhaa018) ; Ang–Hodrick–Xing–Zhang 2006 (10.1111/j.1540-6261.2006.00836.x). Références retirées : ni2009does (remplacée). Total : 45 → 97 entrées, toutes citées, toutes vérifiées.

# 4. Réanalyses exécutées (laptop, Python 3.14 / pandas 3.0.2 / numpy 2.4.4 ; logs docs/verify/logs-revision/)

Script Durée Sorties (results/)
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
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
04_rq3_correlation_divergence.py stage 2 (3 spécifications, NW(h)) 1 s rq3_stress_prediction.csv, rq3_crisis_analysis.csv
05_rq4_greeks_decay_magnets.py partie B (parquet) <1 s rq4_price_magnet.csv (inchangé)
07_descriptive_stats.py (+ panel F via VIX du parquet RQ3) 1 s descriptive_*.csv (A–G)
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
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
10_robustness.py (+ HC1 et NW(22) dans la table ; VIX<30 recalculé) 17 s robustness_*.csv
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
13_extended_robustness.py (cibles corrigées ; LOYO avec HAR et Δ) 15 s extended_*.csv
14_make_paper_tables.py (nouveau) 1 s paper/tables/*.tex (27 fragments)
12_make_figures.py 2 s figures/fig_*.{png,pdf} (supplémentaires)

Durée totale < 2 min. Les sorties v1.1 remplacées sont dans results/_pre-revision-20261017/.

# 5. Non modifié faute de données (données brutes DuckDB absentes)

  • rq4_greeks_decay.csv (RQ4 partie A) : conservé tel quel ; cibles 1 j correctes ; le papier ne rapporte plus que R² et t(IV) (les t des autres grecques, ±150, traduisent une colinéarité).
  • rq5_model_comparison.csv, rq5_feature_importance.csv : seules les lignes 1 j (VIX, HAR, RF, GBM) sont rapportées ; 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é (cibles forward, RV_t) mais n'a pas pu être relancé.
  • descriptive_options_quality.csv (panel H) : inchangé.
  • Table d'inventaire des données brutes (tab:data) : chiffres figés de l'extraction originale.

# 6. Fichiers dépôt

  • Nouveaux : scripts/14_make_paper_tables.py, paper/tables/, results/calendar_time_strategies.csv, results/_pre-revision-20261017/, docs/REVIEW-REPORT.md, docs/CHANGELOG-REVISION.md, docs/verify/logs-revision/, docs/verify/crossref/.
  • Modifiés : src/wp7/{config,data_io,econometrics,forecasting,portfolio}.py, scripts/02,03,04,06,08,09,10,11,13, toutes les sections LaTeX, references.bib, main.tex, main_anon.tex, preamble.tex, README.md.
  • Inchangés : data/processed/*.parquet, paper/sections/titlepage*.tex, docs/AUDIT.md, docs/CHANGES.md, docs/verify/{logs,results} (v1.1).
Files · main
Menu

Theme