SPB Git forge

spb/wp15_uqo

Public MIT
3commits 1branches 1releases
7.6 MBsize
maindefault branch
6 min agolast push
TeX 53.6% Python 46.2%
11.6 KB

# ⚡ Faster, Wider, More Fragile?

UQO Working Paper No. 15 — The Evolution of Intraday Shock Propagation in U.S. Equity Markets, 1992–2026

Paper Journal version Python Data Reproducible Institution Author

TL;DR — Using 7.69 billion one-minute bars on the full listed and delisted U.S. equity cross-section (1992–2026), we track how intraday shocks propagate. (1) Markets absorb idiosyncratic shocks: across 1.85 million isolated ±6σ minute events, abnormal market-wide propagation against matched within-stock placebos is economically zero at 1–120 minutes, in every decade. (2) Transmission is concentrated and intensifying: the shocked stock's twenty closest lagged-correlation neighbours respond strongly (+64×10⁻⁴ abnormal jump probability at five minutes) and this network channel tripled from the 1990s (+28) to the 2020s (+90) while market-wide spillover stayed at zero. (3) Tail synchronisation migrated to the market-wide minute: ordinary extreme minute returns became 108× rarer than in the 1990s, the Epps curve flattened (one-minute pairwise correlation 0.004 in 1996 vs 0.30 in 2015), and severe co-jump minutes spike by orders of magnitude in 2008 and 2020. Modern markets absorb the idiosyncratic and transmit the systemic.


# 📌 Status

Item Value
Version 1.0 (July 2026) — UQO working-paper cover added 2026-10-17
SSRN not yet submitted
Journal International Review of Financial Analysis — submission package ready in outputs/release/ (manuscript, anonymous manuscript, highlights, cover letter, title page, online appendix), not yet submitted (outputs/release/submission_checklist.md: online appendix and data-licence note still open)
Code & data reproducible from scripts/ (see Quick start); raw minute bars (88 GB) not redistributed

# 🎯 What this paper does

Has the U.S. equity market become faster, wider and more fragile at the intraday horizon? The paper answers with the longest and broadest minute-level panel assembled to date — every listed and delisted common stock from 1992 to 2026 — and three complementary measurement devices:

  1. Shock-propagation event studies: 1.85 million isolated ±6σ one-minute events, each matched to a within-stock placebo minute, tracked at horizons of 1 to 120 minutes for breadth (share of other stocks jumping), gradient (response by liquidity/size tier) and network response (twenty nearest lagged-correlation neighbours);
  2. Epps curves: pairwise correlation as a function of sampling interval, by year;
  3. Co-jump counts: the number of stocks with extreme minute returns in the same minute, with a severity scale calibrated on calm, GFC and COVID periods.

All headline numbers are macro-generated from machine-readable registries (paper/results_macros.tex, built by scripts/15_build_results_macros.py); no number is hand-typed.

# 🏆 Headline results

Object Estimate
Panel 7,686,275,524 bars, 81,306 tickers, 221,957 listing spells
Isolated ±6σ events (real / placebo) 1,854,384 / 1,766,058
Abnormal market-wide breadth, 5 min / 30 min −1.04 (0.90) / −3.10 (1.01) ×10⁻⁴ — zero
Network response (20 neighbours), 5 / 15 / 30 min +64.0 (1.8) / +55.4 (1.8) / +49.6 (1.8) ×10⁻⁴
Network response by decade (5 min) 1990s +28 → 2000s +30 → 2010s +81 → 2020s +90
Extreme minute returns (>1%), 1990s → 2010s 518 → 4.8 per million (÷108)
Epps: 1-min correlation, 1996 / 2015 / 2024 0.004 / 0.30 / 0.21
Severe co-jump minutes, calm / GFC / COVID 3.5 / 9.3 / 6.4 per 10,000 ; COVID severe share 83.7 % vs 9.53 % pre-COVID
Robustness (Table VIII) 11 designs incl. placebo-network falsification, month-cluster bootstrap, post-decimalisation

# 🗂 Repository layout

text
intraday-fragility/
├── config/                   # all parameters (YAML) — no magic constants in code
├── src/intraday_fragility/   # package: download, audit, cleaning, features, shocks, networks, econometrics, tables, figures
├── scripts/                  # 00_download_pilot … 16_robustness (numbered pipeline)
├── tests/                    # pytest (7 tests)
├── data/                     # manifests only (raw bars never committed)
├── outputs/
│   ├── estimates/            # machine-readable estimates (707 MB, not committed)
│   ├── diagnostics/          # audit JSON reports
│   ├── figures/, tables/     # generated figures (PDF+PNG with source CSV) and LaTeX tables
│   └── release/              # IRFA submission package (manuscript, anonymous, highlights, cover letter, title page, online appendix)
├── appendix/                 # Internet Appendix (internet_appendix.tex → .pdf)
├── docs/                     # DATA_AUDIT, DATA_DICTIONARY, DECISION_LOG, EMPIRICAL_DESIGN, LIMITATIONS, LITERATURE_MAP, REPRODUCIBILITY, COMPUTE_LOG
├── logs/                     # pipeline logs
├── STATUS.md                 # stage-by-stage progress log
└── paper/
    ├── main.tex              # UQO working-paper version (template cover) → main.pdf
    ├── main_irfa.tex         # journal version (elsarticle, IRFA) → main_irfa.pdf
    ├── main_irfa_anon.tex    # anonymous journal version → main_irfa_anon.pdf
    ├── highlights.tex        # Elsevier highlights
    ├── sections/, figures/, tables/, bibliography/references.bib, results_macros.tex

# 🚀 Quick start

bash
uv sync                                                 # or: pip install -e .
python -m intraday_fragility.cli probe-data
python -m intraday_fragility.cli download --start 1992-01 --end 2026-03   # 411 monthly parquet files, 87.7 GB
python -m intraday_fragility.cli verify-download
make                                                     # runs scripts/00 … 16 in order (see Makefile)
python scripts/15_build_results_macros.py                # → paper/results_macros.tex
cd paper && make                                         # UQO WP → main.pdf
cd paper && latexmk -pdf main_irfa.tex main_irfa_anon.tex   # journal + anonymous versions

Full download and cleaning run on the MacLustr cluster (see docs/COMPUTE_LOG.md); the estimation stages run on a 64 GB Apple-silicon node.

# 🗃 Data

Minute-level OHLCV bars from the Hugging Face dataset mito0o852/OHLCV-1m, pinned at revision 776328445b7ac6e7815ef3a483e9c8ded1eb6d56 (411 monthly Parquet files, 87.7 GB, 1992-01 → 2026-03, no missing months; upstream source Finnhub.io per the dataset card). Schema: UTC bar-start timestamp, unadjusted OHLC, integer volume, ticker; no zero-volume bars (missing minute = no trade). Delisted securities are present (only 22–26 % of 1992 tickers survive). Cleaning: exchange calendar truncation, split/reverse-split screens (6,944 events), OHLC-violation and duplicate screens, corporate-action filters before any variance-based measure. Full audit: docs/DATA_AUDIT.md; variable definitions: docs/DATA_DICTIONARY.md. The dataset card carries no licence — the raw data are therefore not redistributed (docs/LIMITATIONS.md).

# 🔬 Methodology

  1. Universe & cleaning (scripts/04–08, src/…/cleaning.py): monthly audits, split refinement, clean minute panel by listing spell.
  2. Aggregates (09–10): extreme-return frequencies, realised variance, Epps curves, staleness.
  3. Shock detection & propagation (11–14, src/…/shocks.py, networks.py): isolated ±6σ events, matched within-stock placebos, breadth / gradient / network responses at 1–120 min, difference-in-differences by decade.
  4. Co-jumps (13–14): market-wide extreme-minute counts and severity regimes.
  5. Inference (src/…/econometrics.py): event-clustered and month-cluster bootstrap standard errors.
  6. Robustness (16): 11 designs — post-decimalisation, mid-day, ex-announcement, calm/crisis, |z| ≥ 8/12, ex-non-common, placebo network.
  7. Reporting (15, src/…/tables.py, figures.py): results macros, LaTeX tables, CVD-safe vector figures.

# 🖼 Figures & tables inventory

Figure Content
figP1_coverage, figP2_seasonality pilot coverage and intraday seasonality
figE1_coverage … figE9_splits universe coverage, survivorship, seasonality, concentration, extreme minutes, realised variance, staleness, Epps curves, splits
figF1_irf_decade propagation impulse responses by decade
figF2_evolution evolution of breadth vs network channel
figF3_gradient_state response gradient by liquidity tier and market state
figF4_network nearest-neighbour network response
figF5_cojumps co-jump counts and severity regimes

Tables (paper/tables/*.tex): data audit, sample cascade, propagation estimates by horizon and decade, gradient, network, co-jumps, Epps, robustness battery (Table VIII).

# ⚠️ Limitations

  • Bars are trade-conditional (no zero-volume bars) and the venue scope (consolidated vs single venue) is not documented upstream.
  • Security-type classification relies on suffix heuristics; non-common securities are excluded in robustness only.
  • Data licence unspecified on the dataset card: research use with citation, no redistribution of derived minute data.
  • Extended online appendix tables still to be finalised before journal submission.

# 📝 Citation

bibtex
@techreport{boucher2026fragile,
  author      = {Boucher, Simon-Pierre},
  title       = {Faster, Wider, More Fragile? The Evolution of Intraday Shock Propagation in U.S. Equity Markets, 1992--2026},
  institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives},
  type        = {Working Paper},
  number      = {15},
  year        = {2026},
  month       = {July}
}

# 👤 Author & contact

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

# 🗒 Notes

  • Numbering: the project was first filed as UQO_WP_001; it is Working Paper No. 15 since 2026-10-17 (No. 1 is the amenity-capitalisation paper).
  • paper/main.tex (UQO cover, template of Recherche-UQO/_modele-working-paper) was created on 2026-10-17 from the IRFA manuscript; the pre-existing skeleton (“Preliminary — do not cite”) was discarded. Scientific content is identical to main_irfa.tex; only the cover, bibliography style (aer) and layout differ.
  • Three PDFs are committed on purpose: main.pdf (working paper), main_irfa.pdf (journal), main_irfa_anon.pdf (anonymous review copy).
  • outputs/estimates/ (707 MB) is excluded from git; regenerate with the pipeline.
  • Original project brief: docs/PROMPT_INITIAL_CLAUDE.md; development conventions: docs/CLAUDE.md.