Square-Root Market Impact Calibration Playbook (Production-Focused)
Date: 2026-02-21 16:04 KST
Category: research
Tags: execution, market-impact, slippage, calibration, microstructure
Why this note
Backtests often assume impact is a fixed bps haircut or a linear function of order size. In live trading, impact is nonlinear, regime-dependent, and strongly tied to participation rate and liquidity state.
A practical baseline is the square-root form:
[ \text{Impact (bps)} \approx Y \cdot \sigma_{\text{daily}} \cdot \sqrt{\frac{Q}{V}} ]
- (Q): signed meta-order size (shares or notional)
- (V): comparable daily volume metric (shares/notional)
- (\sigma_{\text{daily}}): daily volatility (in bps)
- (Y): calibration coefficient (instrument + venue + strategy dependent)
This memo is a practical guide for calibrating and operating that model without lying to yourself.
1) Data contract for calibration
For every parent order, log at minimum:
- Decision timestamp + decision reference price
- Parent side (buy/sell), target quantity, participation cap
- Child fills (time, qty, price, venue/route)
- Arrival spread and spread distribution during execution
- Realized participation trajectory (q_t / v_t)
- Benchmark returns over execution window (to separate drift from impact)
- Post-trade markouts (e.g., +1m, +5m, +30m)
Without a parent-order dataset, impact “calibration” is just curve-fitting noise from mixed intents.
2) Decompose cost first, calibrate impact second
Before fitting square-root impact, split implementation shortfall into:
- Spread + fees/rebates (microstructure frictions)
- Delay/alpha decay (time between signal and execution)
- Transient impact (during execution)
- Residual/permanent component (markout-aligned)
If this decomposition is skipped, the impact coefficient (Y) will absorb everything (including bad scheduling), making it unstable and unusable.
3) Robust fitting procedure
Use robust regressions, not plain OLS, because tails dominate execution data.
Recommended fit target
- Response: signed execution cost net of spread/fees and benchmark drift
- Feature: (x = \sigma_{\text{daily}}\sqrt{Q/V})
- Model: (c = Yx + \epsilon)
Practical rules
- Fit per liquidity bucket (large/mid/small cap or ADV buckets)
- Fit by session regime (open, mid-day, close) when sample size allows
- Winsorize extreme outliers only after explicit incident tagging
- Refit weekly, compare rolling 4-week stability
If (Y) swings wildly week to week, you don’t have regime segmentation yet.
4) Regime overlays (where most edge lives)
Square-root baseline is the floor, not the whole house. Add multiplicative overlays:
[ \hat{c} = Y \cdot \sigma \sqrt{Q/V} \cdot f_{spread} \cdot f_{toxicity} \cdot f_{volshock} ]
- (f_{spread}): widen when spread percentile is elevated
- (f_{toxicity}): widen when short-horizon adverse selection (VPIN/markout proxy) spikes
- (f_{volshock}): widen in intraday volatility shock regimes
These overlays prevent naive underestimation exactly when costs matter most.
5) Control loop for live execution
Operationalize the model as a feedback loop:
- Pre-trade estimate: expected cost band (p50/p90)
- In-trade monitor: realized vs expected trajectory
- Policy switch: if realized cost breaches threshold, reduce POV cap or pause
- Post-trade attribution: classify breach reason (spread, toxicity, delay, impact)
- Recalibration queue: promote repeated breaches into parameter updates
No control loop = model drift hidden as “market was weird today.”
6) Risk guardrails
Use model output for sizing and go/no-go decisions:
- Reject trades when expected net edge < p90 execution cost
- Downsize parent orders as (\sqrt{Q/V}) crosses predefined bands
- Tighten participation caps in high-toxicity states
- Require stronger signal confidence to override expensive regimes
Execution model should be a risk gate, not just a reporting metric.
7) Common failure modes
- Mixing child and parent levels in one fit (invalid scale)
- Using stale ADV/vol estimates in fast regime shifts
- Ignoring side asymmetry (buy/sell cost differences in stress)
- Static (Y) across all assets (guaranteed misspecification)
- No benchmark drift adjustment (trend mistaken for impact)
8) Minimal implementation checklist
- Parent-order dataset with complete fill lineage
- Cost decomposition pipeline (spread/fees, delay, impact, residual)
- Robust per-bucket square-root calibration
- Regime overlays (spread/toxicity/volshock)
- Live breach alerts + automatic policy responses
- Weekly calibration review with stability report
Closing thought
Square-root impact is useful because it is simple enough to run and rich enough to be wrong in informative ways. Treat it as a baseline model wrapped in regime-aware controls, and it becomes operationally valuable rather than academically decorative.