Slippage Elasticity Under Liquidity Stress — Practical Playbook
Date: 2026-02-22
Category: research
Context: live execution prep for March deployment
Why this note exists
Average slippage numbers hide the only thing that matters in production: how fast costs explode when liquidity thins.
This document frames slippage as an elasticity problem:
- not “what is expected bps?”, but
- “how many extra bps do we pay when participation rate or volatility rises by 1 unit in stressed regimes?”
That elasticity is what should drive sizing, urgency, and kill-switch behavior.
Core model: execution cost elasticity
Define per-parent-order normalized cost:
[ C = \frac{\text{realized slippage (bps)}}{\text{target volatility unit}} ]
Model (log-linear, regime-aware):
[ \log(C + \epsilon) = \beta_0 + \beta_1 \log(POV) + \beta_2 \log(\sigma_{1m}) + \beta_3 \log(Spread) + \beta_4 Imb + \beta_5 Stress + \beta_6 \log(POV)\cdot Stress ]
Where:
POV: participation rateσ1m: short-horizon realized volatilitySpread: effective spread in bpsImb: order-book imbalance proxyStress: binary or probabilistic stress regime flag
Interpretation:
β1= baseline participation elasticityβ6= stress amplification of participation elasticity
If β6 > 0, the same sizing policy becomes materially worse in stress.
Regime classification (simple and robust)
Use three-state regime labeling per minute:
Stable
- spread <= 40th percentile
- volatility <= 50th percentile
- imbalance within normal band
Tight-but-toxic
- spread moderate, but toxicity/markout deteriorating
Stress
- spread >= 75th percentile OR
- volatility >= 80th percentile OR
- cancellation spike + depth collapse
Use hysteresis (e.g., 3-bar confirmation) to avoid state flapping.
Data contract (minimum viable)
Per parent order capture:
- symbol, side, start/end timestamp
- decision price, arrival price, VWAP benchmark, fill VWAP
- child-order timeline with size, venue, fill flag, queue wait
- contemporaneous market features (spread, depth L1/L5, vol, imbalance)
- regime label timeline
Derived fields:
- implementation shortfall (bps)
- shortfall attribution: spread/fees vs impact vs delay vs opportunity
- participation profile over time
- max adverse excursion during execution window
Calibration protocol
1) Fit by symbol-liquidity buckets
Don’t fit one global model first. Start by buckets:
- mega/large/mid/small caps or ADV deciles
- optional session split (open/mid/close)
2) Robust estimation
- Huber or quantile regression (q50 + q90)
- winsorize extreme prints only after event tagging
- keep event tags (earnings/FOMC/macro) as audit labels
3) Out-of-sample stress test
Evaluate separately on stress windows:
- MAE/MAPE on cost level
- rank accuracy for “safe vs unsafe POV bands”
- tail underestimation rate (
actual > predicted_q90)
Tail miss rate is more important than mean error.
Control policy from elasticity
Translate model into actionable guardrails.
POV governor
Given max budget B (bps), solve max allowed participation:
[ POV_{max} = f^{-1}(B, \sigma, spread, imb, regime) ]
In practice:
- precompute lookup grid
- clip with floor/ceiling constraints
Urgency ladder
- Stable: normal schedule
- Tight-but-toxic: reduce clip size, widen patience, route defensively
- Stress: cap POV aggressively, switch to survival mode (minimize footprint)
Delay vs impact trade-off
Use two budgets:
ImpactBudgetDelayBudget
If impact burn rate exceeds threshold, intentionally accept more delay (unless hard deadline).
Real-time monitoring
Track these live per parent order:
- Cost budget burn = realized + expected residual
- Elasticity breach = realized slope > model slope by threshold
- Tail risk flag = q90 exceedance probability crossing limit
Alert tiers:
- Tier 1: advisory (operator visible)
- Tier 2: automatic POV downshift
- Tier 3: pause/abort unless manual override
Post-trade review loop (weekly)
Weekly review checklist:
- top 10 worst orders: model miss decomposition
- regime detector false positives/negatives
- parameter drift (
β1,β6) trend - venue-specific slippage deterioration
- symbol clusters with repeated tail misses
Update cycle:
- adjust regime thresholds
- refit robust model
- re-simulate policy on last 4 weeks
- deploy with shadow mode first
Anti-patterns to avoid
Using one average slippage number in risk model
- hides nonlinear blow-ups
Ignoring cancellation/depth collapse features
- spread alone is late signal
Calibrating only on calm data
- gives false confidence
No residual-cost forecasting mid-order
- operators react too late
Minimal implementation roadmap (2 weeks)
Week 1
- finalize parent-order schema
- backfill 3–6 months
- implement regime labeler + first robust regression
Week 2
- ship POV lookup governor
- add live budget burn dashboard
- run shadow policy with manual comparison
Success criterion:
- reduce p90 slippage by 10–20%
- reduce catastrophic tail days frequency
- no increase in missed completion constraints beyond tolerance
Practical takeaway
Execution edge is not “trade faster/slower.”
It is learning where cost elasticity bends and steering size before the curve goes vertical.
If strategy alpha is convex, but execution cost is also convex in stress, your job is to make sure the second convexity doesn’t eat the first.