Event study + backtest
Free public data
30-day diagnostic
Liquidation Cascade Mean Reversion
After a large, rapid liquidation event flushes leveraged positions in one
direction, the forced flow is exhausted — and price should snap back. This site tests the
core concept with an event study on real exchange data (Binance OI, Bybit
klines, Hyperliquid candles) and a trade-level backtest with real fees.
The strategy idea
What we tested
The idea (from a practitioner strategy doc) has three parts:
- Mechanism: forced market orders from liquidations overshoot fair value. Once the
leveraged pool on the wrong side is exhausted (OI drops sharply), directional pressure disappears and price snaps back.
- Entry: after a flush, fade it — buy the drop (long-liquidations) or sell the squeeze (short-liquidations).
- Falsifiable elements: it fails if the flush is genuine fundamental deterioration, or
in strong trends where over-leveraged late entrants keep getting flushed in waves.
Scope of this test: directionality of mean reversion after cascades — does price actually pull back, at what horizon, under which conditions? A trade-level build follows only if the concept survives.
Data availability
Can you pull liquidation data for free?
Verified live on 2026-09-10 — the honest answer is partially:
| Exchange | Historical liq REST | Real-time liq WS | Historical OI | Historical OHLCV |
|---|
| Binance | GONE (404) | forceOrder WS | futures-data OI (30d) | klines (deep) |
| Hyperliquid | GONE (rejected) | per-user only | no deep free OI | candleSnapshot (deep) |
| Bybit | never existed | allLiquidation WS | 1h OI (~4.5y) | klines (deep) |
- Binance removed
allForceOrders (deprecated Apr 2026) — only the real-time
forceOrder WS stream remains. Its 5m open-interest history is the fine-grained cascade detector (30-day cap).
- Hyperliquid rejects the documented
liquidations info request; only per-user WS events exist.
- Bybit never had a liq REST endpoint — real-time
allLiquidation WS only.
But its 1h OI history walks back ~4.5 years with zero gaps.
Consequence: you cannot replay actual historical liquidation prints for free. This study uses the OI-proxy cascade — OI destruction + price shock — which is the strategy's own confirming condition. True-print forward validation is Phase 4 (collector not yet deployed).
Methodology
How cascades were detected
A cascade for symbol S is a 15-minute window where:
- OI drop ≤ −1% (pooled p1 across the universe; looser 0.5% variant used for sample size)
- Price shock ≥ 2 ATR (price-relative) and |move| ≥ 0.5% absolute
- Side: price fell → long-liq flush (buyers liquidated); price rose → short-liq flush
- 6h cooldown; both OI samples within 15m of window edges (guards against coarse-OI artifacts)
No lookahead: cascade detection uses only past/current bars; forward returns are measured
from the wick extreme (the flush low/high). Universe: top-30 cross-listed perps by 24h
turnover. Realistic fills enter at the open of the first bar after the wick —
buying the exact wick is not executable and inflates results ~9×.
Events (30 days)
Total cascades
64
OI-proxy, 0.5% variantLong-liq flushes
33
buy the dipShort-liq flushes
31
sell the rip
Real events captured
- 08-22 crash cluster: ARB −9.6%, USELESS −12.1%, WLD −10.8%, DOGE −8.4% (long-liq)
- 08-19 cross-market squeeze: SOL/TRUMP/AAVE/DOGE short-liq
Event study
Does price snap back after the flush? (H1)
Forward fade returns from the flush, by side and horizon. The tradable column is
open-entry (next bar open after the wick); wick-entry is shown to expose the
optimism gap.
| Cohort | Horizon | n | Wick-entry | Open-entry (realistic) |
|---|
| Long-liq flush (buy the dip) | 1h | 32 | +4.34% | +0.49% |
| Long-liq flush (buy the dip) | 4h | 32 | +4.64% | +0.73% |
| Long-liq flush (buy the dip) | 24h | 30 | +6.80% | +2.80% |
| Short-liq flush (sell the rip) | 1h | 31 | +1.02% | +0.06% |
| Short-liq flush (sell the rip) | 4h | 31 | +2.14% | +1.20% |
| Short-liq flush (sell the rip) | 24h | 31 | +1.19% | +0.26% |
- Long-liq (buy the dip): net-positive at every horizon; +0.49% @1h,
+2.80% @24h on realistic fills (net of 11bps taker). t=2.25 @1h.
- Short-liq (sell the rip): flat-to-marginal on realistic fills — no robust edge.
- Continuation rate (price moved through the wick within the horizon):
long-liq 9.4% @1h (91% snapped back); short-liq 35.5% @1h.
Conditioning
When is the snap-back stronger? (H2 & H3)
- H2 — exhaustion scaling: SUPPORTED. Quartile by |ΔOI|: mildest → +1.0%,
most severe → +5.4% mean 1h fade (monotonic, Spearman +1.0). Bigger OI destruction → stronger snap-back.
- H3 — trend filter: SUPPORTED for long-liq. Counter-trend long flushes
+0.57% @1h vs trend-aligned −0.09% (n=28 vs 4). Short-liq inconclusive (n=9 counter).
Trade-level backtest
Phase 3 — engine results
Frozen rules: fade the flush (long-liq → long, short-liq → short); entry at first bar
open after the wick; stop 1/2/3 ATR beyond the wick; target 1/1.5/2R; time stop 2/4/24h;
first-touch exits (TP-first on same-bar ties); real Bybit fees (taker 11bps RT / maker 4bps RT);
1% risk per trade, $1,000 start, compounded.
Headline configuration
Config
s2 ATR / tp2.0R / 24h
long (fade)Net total (taker)
+15.2R
net PF 2.24MC P(loss)
2.25%
median +15.3R
Direction split — the decisive finding
| Cohort | Configs net+ | Both train/test halves + | Best | Worst |
|---|
| Long-only fades | 27/27 | 24/27 | +15.2R | +0.2R |
| Short-only fades | 23/27 | 0/27 | +7.9R | -7.5R |
Long-only fades are a parameter CLUSTER — 27/27 configs net-positive, 24/27 positive in BOTH train/test halves (24/27 of the long grid survives the time split). Short-only fades fail out-of-sample by time — 0/27 configs positive in both halves (the short edge lived only in the first 2/3 of the sample). Cluster-vs-spike across the full grid: 24/54 (44%) — a borderline cluster (thresholds: spike ≤20%, cluster ≥60%).
Top configurations (by net total R, taker)
| Direction | Stop | TP | Hold | n | Win% | Net R | PF | Both halves+ |
|---|
| long | 2 ATR | 2.0R | 24h | 32 | 50% | +15.2R | 2.24 | YES |
| long | 1 ATR | 2.0R | 24h | 32 | 50% | +14.9R | 2.10 | YES |
| long | 2 ATR | 1.5R | 24h | 32 | 56% | +13.7R | 2.35 | YES |
| long | 3 ATR | 1.5R | 24h | 32 | 53% | +11.8R | 2.13 | YES |
| long | 1 ATR | 1.5R | 24h | 32 | 53% | +10.4R | 1.84 | YES |
| long | 2 ATR | 1.0R | 24h | 32 | 62% | +9.9R | 2.23 | YES |
| long | 3 ATR | 2.0R | 24h | 32 | 47% | +9.4R | 1.75 | YES |
| long | 3 ATR | 1.0R | 24h | 32 | 59% | +8.7R | 2.05 | YES |
| short | 1 ATR | 2.0R | 4h | 31 | 48% | +7.9R | 1.58 | no |
| long | 1 ATR | 2.0R | 4h | 32 | 56% | +7.5R | 1.73 | YES |
| long | 1 ATR | 1.5R | 2h | 32 | 69% | +7.1R | 1.99 | YES |
| long | 1 ATR | 1.5R | 4h | 32 | 59% | +7.0R | 1.77 | YES |
Honesty checks
What could be fooling us
- Wick-entry is not tradeable. Buying the exact wick low showed +4.3% @1h;
realistic next-bar-open entry gives +0.49% — a ~9× haircut. All headline numbers use open-entry.
- Medians ≈ half the means (skew from big events). Edge survives 10%-trimming but is smaller.
- Concentration: removing the 3 biggest events cuts the wick-basis 1h edge by ~40%;
the open-basis edge stays positive.
- Random baseline: event 1h +2.7% vs same-symbol random-bar +0.6% (wick basis) —
the edge is above the baseline, not an artifact of symbol selection.
- Real costs applied: Bybit VIP0 taker 11bps round-trip; maker 4bps improves net by ~7-8bps.
Verdict
What we concluded
Supported
- Long-liq cascades (flushes down) do snap back: 91% within 1h, monotonic in OI destruction, net-positive after taker costs at 1h-24h.
- Long-only fades survive a full parameter grid + train/test time split (24/27 both-halves+).
- The doc's trend filter is directionally right: counter-trend flushes revert more.
Not supported / caveats
- Short-liq fades (sell the squeeze) show no robust edge — fails time-split.
- 30-day diagnostic only (Binance 5m-OI cap): n=63 events total, no walk-forward OOS yet. Per house rules, treat as a promising diagnostic, not evidence.
- Survivorship (current listings), no true liquidation prints (OI proxy), deep MAE (long −2.3%, short −6.1%) → wide stops required.
Reproduce
How to re-run everything
# 0. data (free APIs)
python3 phase0_universe.py
python3 pull_oi.py # Binance 5m OI (30d) + Bybit 1h OI (4.5y)
python3 pull_klines.py # 15m klines: Bybit, Binance, Hyperliquid (90d)
# 1. events
python3 detect_cascades.py --theta-oi 0.005
# 2. event study
python3 event_study.py && python3 run_analysis.py
# 3. trade-level
python3 trade_engine.py --tag v1
# 4. site
python3 build_site.py
Artifacts: events/cascades.json, events/forward_returns.jsonl,
results/trade_results_v1.json, trades/trades_*.jsonl. Full write-up:
PLAN.md + RESULTS.md.