Skip to content
Skip to content
← all research
STUDY

"Equity Liquidity-Shock Research — v1 FINAL REPORT"

2026-10-05

·

Status: Complete — DO NOT PURSUE. Event study + calendar-time costed portfolio both run. No production, paper, or sleeve code was touched. This research is standalone and behind no promotion gate.

Companion artefacts:

  • reports/liquidity_shock_data_audit.md (Step-2 data audit)
  • reports/liq_shock_proxy_event_study.md (Track A, broad OHLCV proxy)
  • reports/liq_shock_micro_event_study.md (Track B, true SIP order flow)
  • reports/liq_shock_portfolio.md (calendar-time costed gating test) Scripts: validation/liq_shock_proxy_event_study.py, validation/liq_shock_micro_event_study.py, validation/liq_shock_portfolio.py.

#Data reality (audit summary)

True order flow exists (Alpaca SIP trades + NBBO via data/equity_ticks.py) but is cached for one name (AAPL) over 22 days. Every broad panel is OHLCV-only. Per the brief, the two were evaluated separately and labelled:

  • Track A — 498 symbols × 3y, 30-min bars; factors limited to return, volume, dollar-volume (a liquidity-pressure PROXY, not order flow).
  • Track B — AAPL 1-second NBBO/trades: spread, size imbalance, Cont OFI, Lee-Ready signed volume (TRUE order flow; single name, underpowered).

No Level-2 depth history exists (Alpaca limitation). No order-flow proxy was presented as real order flow.


#1. Strongest discovered mechanism

Idiosyncratic extreme moves revert; market-confirmed extreme moves continue. Define the confirmation split: at a shock bar, confirmed = the stock's k-bar move has the same sign as SPY over the same window and SPY moved larger than its median. Trade pos = -sign(move) when unconfirmed (reversal) and +sign(move) when confirmed (continuation).

  • Broad proxy, 30-min shocks (k=1), volume-z ≥ 2, fwd 90 min: +7.3 bps gross/event, 51.6% hit, day-clustered p=0.014.
  • Randomized-confirmation placebo collapses the same cell to +2.3 bps (p=0.35); the placebo at the other horizons is ~0. The confirmation label carries the effect, not the extreme move alone.

This is directionally exactly the brief's hypothesis, and it is statistically detectable at the shortest shock horizon.

Track B corroborates the asymmetry only (negative shocks reverse): AAPL −5min shocks show excess-vs-drift +4.7 bps @15 min, +16.7 bps @EOD, 64% hit. Positive shocks are mixed. But single-name, 22 days.

#2. Strongest failed mechanisms

  • Order-flow persistence ⇒ continuation. In Track B, signed OFI is mechanically collinear with the contemporaneous move (OFI_confirm ≈ 100%), so it cannot classify anything. Splitting on flow intensity (|OFI z|≥1) shows flow-driven down-moves reverse more, not less — the opposite of "persistence = information = continuation". No evidence for it.
  • Longer horizon / larger shock (k = 3, 6 bars). The apparent edge is IS-driven and decays or flips OOS (§4).
  • Spread-widening conditioning (Track B) is non-monotonic and n-thin; no reliable liquidity-restoration edge.
  • EOD/multi-day horizons: dominated by market drift and beta, not a clean signal.

#3. Gross vs net edge (Track A, confirmation split, vol-z ≥ 2)

k (shock)gross fwd+90m−2 bps−5 bps−10 bps
1 (30m)+7.32+5.32+2.32−2.68
2 (60m)+10.72+8.72+5.72+0.72
3 (90m)+13.68+11.68+8.68+3.68
6 (180m)+11.81+9.81+6.81+1.81

Units: bps of notional, one round trip per event. Big-cap round-trip effective spread is ~1–3 bps (AAPL measured spread ≈0.6 bps one-way), so 2–5 bps is the realistic band — not 10 bps. Even so, only k=1 and k=2 clear 5 bps.

#3b. Calendar-time portfolio — the gating test (reports/liq_shock_portfolio.md)

The split was turned into a calendar-time equal-weight long/short book (next-bar fill, intraday hold 3 bars) and costed. Sharpe(a) annualised √3276.

one-way bpsIS SharpeOOS SharpeHOLD Sharpe
0 (gross)+0.32+2.89+2.83
0.5−0.06+2.45+2.46
1−0.44+2.01+2.10
2−1.21+1.13+1.36
5−3.51−1.52−0.84

Event round trip trades 2 units, so realistic 1 bps round trip ≈ the 0.5 column. Gross in-sample Sharpe is only +0.32 — the edge is essentially absent before 2025 and strong only in the 2025–26 OOS/holdout block. That is time instability, not a stable edge. Placebo (shuffled confirmation) OOS net Sharpe @2 bps = −3.54, so the confirmation label is not pure noise in OOS — but an edge that only appears in the most recent regime fails the brief's stability bar. Parameter perturbation (thr 2.5–3.5 × vmin 1–3) is negative at every cell at 5 bps; hold 2/3/6 all negative at 5 bps; dollar-volume-tiered cost (2/3/5/8/12 bps) OOS net Sharpe −2.76.

#4. OOS result (train < 2025-08-13; OOS ≥ 2025-08-13)

kfwd+90m ISfwd+90m OOSOOS pn OOS
1+8.12+5.530.0045765
2+12.72+6.320.1324917
3+19.33+1.290.8713974
6+20.69−9.300.9311916

Only k=1 survives OOS (gross +5.5 bps, clustered p=0.004, hit ~51.6%). Larger/longer shocks decay to zero or invert.

#5. Holdout result

No untouched holdout was consumed. The final ~1y is used as the OOS block above; a truly sealed holdout was not burned because the edge did not clear the promotion bar in OOS.

#6. Placebo result

Randomized confirmation label (Track A, vol-z ≥ 2), fwd+90m gross bps: k=1 +2.33 (p=0.35), k=2 −0.69, k=3 +4.91, k=6 +3.27. The confirmation effect vanishes/degrades under the placebo, supporting that the discriminator is the market-confirmation information, not generic reversal. But the k=1 placebo is itself positive, so part of the gross is generic short-term reversal — a known effect that spreads eat.

#7. Transaction-cost sensitivity

See §3. At the realistic 2–5 bps round-trip band the OOS-robust k=1 cell nets roughly +0.5 to +3.5 bps/event. That is positive but extremely thin and within estimation noise for a 51.6% hit rate. At 10 bps it is negative. No impact/partial-fill model was applied (only flat per-trade spread), so these are optimistic.

#8. Robustness analysis

  • No look-ahead: all features use only bars ≤ t; forward returns measured strictly after the shock bar. Day-bounded shifts prevent overnight leakage.
  • Clustering: event significance uses a day-cluster bootstrap (events cluster in time); naive t-stats would overstate.
  • Survivorship: the 498-name list is a current snapshot, not PIT; the broad result may be mildly optimistic. PIT membership exists but was not applied in this pass.
  • Sectors: only 97/499 names have GICS labels; market (SPY) confirmation was used instead of sector confirmation.
  • Not tested: liquidity-tier stability, cross-universe stability, parameter perturbation surface, news confirmation (news cache empty), calendar portfolio Sharpe.

#9. Exact edge definition (as tested)

  1. Bars: 30-min RTH, 498 US names.
  2. At each bar, shock = k-bar return / (trailing rvol·√k); act when |shock| ≥ 3 and vol_z ≥ 2 (volume vs same-time-of-day trailing 20-day baseline).
  3. confirmed iff sign(ret_k) == sign(SPY ret_k) and |SPY ret_k| > median.
  4. Position: −sign(ret_k) if unconfirmed, +sign(ret_k) if confirmed.
  5. Enter at shock-bar close; exit after 3 bars (90 min). One round trip.
  6. Best cell: k = 1 (30-min shock). Gross ≈ +7 bps, OOS net ≈ +0.5–3.5 bps.

#10. Final verdict

DO NOT PURSUE

The confirmation split is a real but regime-dependent, sub-cost effect. The event study looked encouraging at the shortest horizon (k=1, gross OOS +5.5 bps, p=0.004, placebo collapses), but the calendar-time book — the only test that matters for promotion — is flat/negative in-sample (+0.32 gross Sharpe) and positive only in the 2025–26 OOS/holdout window. It dies at realistic cost before even 1 bps one-way (IS Sharpe −0.44 at 1 bps, while IS gross is only +0.32). Parameter perturbation is uniformly negative at 5 bps, and the dollar-volume-tiered cost is −2.76 Sharpe.

By the brief's own criteria this is a FAIL: not stable across time (§20.3), no net expectancy in-sample, and no survival at realistic spreads for the in-sample period. The apparent OOS edge is a recent-regime artifact, not a liquidity/information mechanism that can be banked.

Recommendation: close the direction. Do not build a cross-sectional promotion candidate. If it is ever revisited, the only honest route is a longer true-order-flow panel (the current SIP cache is AAPL × 22 days) — with no expectation from the evidence here that it will clear costs.

#Experiment ledger (item 19)

ideventfeatureshorizonuniverseIS grossOOS grossOOS pplacebostatus
A-k130m shock z≥3, volz≥2ret,vol,SPY-conf+90m498 US+8.1 bp+5.5 bp0.004+2.3 bpevent-only
A-k260msame+90m498+12.7+6.30.132−0.7fail-OOS
A-k390msame+90m498+19.3+1.30.871+4.9fail-OOS
A-k6180msame+90m498+20.7−9.30.931+3.3fail-OOS
P-k1calendar book, k=1same3-bar hold498+0.32 SR+2.89 SR—−1.8 SR gfail
P-pertthr×vmin gridsame3-bar498—all neg @5bp——fail
P-tierquintile costsame3-bar498—−2.76 SR——fail
B-neg5m shock z≥3 (AAPL)true OFI/spread/sv+15m..EODAAPL 22d+4.7..+16.7 bp excessn/an/an/amechanism
B-ofiflow intensity split|OFI z|+15mAAPLflow-driven reverses moren/an/an/arejects persistence

No experiment was discarded; failures are recorded above.

#Constraints / honest limitations

  • True order flow covers one name / 22 days — not enough for any cross-sectional order-flow claim.
  • Track A is a proxy; OFI/spread/depth shocks were not available broad.
  • No news confirmation (cache empty), no sector ETF/breadth confirmation.
  • Costs are flat spread only (plus a dollar-volume-tiered variant); no impact/queue/partial-fill model.
  • The 498-name universe is a current snapshot, not PIT; PIT membership check was not run because the direction failed on stability first.
  • No production change, per instruction.

All trading described is paper (simulated). Not investment advice.

← all research