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 bps | IS Sharpe | OOS Sharpe | HOLD 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)
| k | fwd+90m IS | fwd+90m OOS | OOS p | n OOS |
|---|---|---|---|---|
| 1 | +8.12 | +5.53 | 0.004 | 5765 |
| 2 | +12.72 | +6.32 | 0.132 | 4917 |
| 3 | +19.33 | +1.29 | 0.871 | 3974 |
| 6 | +20.69 | −9.30 | 0.931 | 1916 |
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)
- Bars: 30-min RTH, 498 US names.
- At each bar,
shock = k-bar return / (trailing rvol·√k); act when|shock| ≥ 3andvol_z ≥ 2(volume vs same-time-of-day trailing 20-day baseline). confirmediffsign(ret_k) == sign(SPY ret_k)and|SPY ret_k| > median.- Position:
−sign(ret_k)if unconfirmed,+sign(ret_k)if confirmed. - Enter at shock-bar close; exit after 3 bars (90 min). One round trip.
- 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)
| id | event | features | horizon | universe | IS gross | OOS gross | OOS p | placebo | status |
|---|---|---|---|---|---|---|---|---|---|
| A-k1 | 30m shock z≥3, volz≥2 | ret,vol,SPY-conf | +90m | 498 US | +8.1 bp | +5.5 bp | 0.004 | +2.3 bp | event-only |
| A-k2 | 60m | same | +90m | 498 | +12.7 | +6.3 | 0.132 | −0.7 | fail-OOS |
| A-k3 | 90m | same | +90m | 498 | +19.3 | +1.3 | 0.871 | +4.9 | fail-OOS |
| A-k6 | 180m | same | +90m | 498 | +20.7 | −9.3 | 0.931 | +3.3 | fail-OOS |
| P-k1 | calendar book, k=1 | same | 3-bar hold | 498 | +0.32 SR | +2.89 SR | — | −1.8 SR g | fail |
| P-pert | thr×vmin grid | same | 3-bar | 498 | — | all neg @5bp | — | — | fail |
| P-tier | quintile cost | same | 3-bar | 498 | — | −2.76 SR | — | — | fail |
| B-neg | 5m shock z≥3 (AAPL) | true OFI/spread/sv | +15m..EOD | AAPL 22d | +4.7..+16.7 bp excess | n/a | n/a | n/a | mechanism |
| B-ofi | flow intensity split | |OFI z| | +15m | AAPL | flow-driven reverses more | n/a | n/a | n/a | rejects 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.