Options Spread Execution: Legging-Risk Slippage Playbook
Date: 2026-03-06
Category: research (execution / slippage modeling)
Why this playbook exists
For options spreads, desks often report "good fill vs mid" on each leg and still lose money at package level.
The leak is usually legging risk:
- one leg fills,
- the other leg lags or misses,
- spot/vol/skew move while you're exposed,
- rescue hedges and re-tries add extra cost.
That cost is not random noise. It is modelable and controllable.
Core failure mode
Example: you want a vertical or calendar spread as one economic package.
- Leg A gets filled (often the easier leg).
- Leg B is delayed due to queue, spread widening, or quote fade.
- During delay, risk factors move:
- underlying spot (
ΔS), - implied vol level (
Δσ), - skew/term-structure (
Δκ,Δτ).
- underlying spot (
- You either:
- complete Leg B at worse price,
- hedge temporarily (delta/vega proxy) then unwind,
- or abandon and flatten Leg A.
Each branch creates different slippage shape and tail behavior.
Cost decomposition (package truth, not leg-only)
For parent package p:
[ C_p = C_{quote} + C_{impact} + C_{leg_timing} + C_{hedge_bridge} + C_{abandon} + C_{fees} ]
Where:
C_quote: quote-to-fill spread cost vs package fair value,C_impact: impact from crossing/chasing,C_leg_timing: exposure while package is incomplete,C_hedge_bridge: temporary hedge slippage + unwind cost,C_abandon: cost when package intent is canceled and residual legs flattened,C_fees: fees/rebates/exchange costs.
Most post-trade reports keep only C_quote + C_fees, hiding the expensive parts.
Data contract (minimum)
At parent + leg granularity:
parent_id,strategy_type(vertical/calendar/ratio/condor/...), target ratios- per-leg: symbol/expiry/strike/right/side/qty
decision_ts,send_ts,ack_ts,fill_ts,cancel_ts,replace_ts- quote snapshots for each leg (bid/ask/size + top-3 depth if available)
- package fair value estimate at each event time
- underlying spot stream (high-resolution), IV surface snapshots, skew metrics
- temporary hedge actions: instrument, qty, price, timestamps
- completion status: complete / partial / abandoned
- fees and rebates
Without event-level timestamps across legs, legging risk cannot be audited.
Metrics that expose legging slippage
1) Leg Completion Gap (LCG)
[ LCG = t_{last_fill} - t_{first_fill} ]
Track p50/p90/p95 by strategy type and moneyness bucket.
2) Incomplete Exposure Integral (IEI)
Let R(t) be package risk vector remaining while incomplete (delta/vega/gamma proxies).
[ IEI = \int_{t_{first_fill}}^{t_{complete\ or\ abort}} |R(t)|,dt ]
IEI is the right "inventory over time" metric for package risk.
3) Bridge Hedge Burden (BHB)
[ BHB = C_{hedge_enter} + C_{hedge_exit} + C_{basis_residual} ]
If BHB is consistently large, the desk is indirectly paying for slow leg completion.
4) Package Slippage vs Decision Fair (PSDF, bps)
[ PSDF = 10^4 \cdot \frac{\text{realized package cost} - \text{decision fair package cost}}{|\text{decision fair package notional}|} ]
Use package-level benchmark; leg-level mid benchmarks can look falsely good.
5) Abandon-and-Repair Rate (ARR)
[ ARR = \frac{#(abandoned\ package\ intents)}{#(total\ package\ intents)} ]
High ARR is usually a control/design issue, not just "bad luck".
Modeling blueprint (branch-aware)
Model package outcome as a branch mixture:
[ C = \pi_{atomic}C_{atomic} + \pi_{legged-complete}C_{legged-complete} + \pi_{legged-abort}C_{legged-abort} ]
Branch A) Atomic/package fill
- package RFQ/CLOB spread fill with small timing gap
- usually lowest
C_leg_timing
Branch B) Legged but completed
- one or more legs delayed
- cost depends on delay + factor moves (
ΔS,Δσ, skew shift)
Branch C) Legged then aborted
- rescue hedges, unwind, or flatten residual legs
- heavy-tailed outcomes (important for q95/q99)
Recommended setup:
- Branch probability model (multinomial / competing-risks)
- Conditional cost model per branch (quantile regression)
- Tail calibration by strategy archetype and time-of-day regime
Feature set (practical)
Market state
- underlying realized vol (short horizon)
- spread width and quote stability per leg
- options depth imbalance and quote fade intensity
- IV level + skew slope + term-structure steepness
Package geometry
- strike distance / moneyness bucket
- expiry bucket (0DTE/weekly/monthly)
- ratio complexity (1x1, 1x2, iron condor, etc.)
- net greek vector magnitude
Execution path
- intended route type (atomic package vs legged)
- leg order sequencing policy
- inter-leg delay (
LCG) and replace-count intensity - temporary hedge usage flag and latency
Control-plane
- gateway/exchange reject codes
- throttle utilization
- stale-quote indicators
Policy layer: when to force atomic vs allow legging
Define expected marginal cost:
[ E[C|atomic] \quad vs \quad E[C|legged] ]
Choose legging only if:
[ E[C|legged] + \lambda \cdot \text{TailPenalty}_{95} < E[C|atomic] ]
where TailPenalty_95 is expected q95 excess cost of incomplete exposure.
Practical controls:
- Atomic-first rule for high-greek packages (large
|delta|+|vega|) - Max LCG cap: if delay exceeds threshold, auto-hedge or abort early
- Sequence by adverse convexity: fill the leg that reduces worst-case exposure first
- Bridge-hedge TTL: temporary hedge must be time-bounded (avoid hedge drift)
- Regime override: disable legging in shock windows (open, macro release, close ramp)
State machine (operational)
ATOMIC_OK
- quotes stable, package venue/liquidity available
- default to package execution
LEGGING_CAUTION
- package route thin; legging allowed with strict LCG cap
LEGGING_STRESS
- quote fade/rejects rising, vol/skew unstable
- reduce size, force temporary hedge discipline
SAFE
- repeated incomplete episodes or tail-budget burn breach
- no discretionary legging; only protected/atomic routes
Use hysteresis to prevent flip-flopping.
Backtest and promotion gates
Shadow/canary pass criteria (example):
- q95 PSDF improvement >= 5 bps
- ARR reduction >= 20%
- BHB reduction >= 15%
- completion rate not worse by > 1.0 pp
- no rise in emergency flatten incidents
Rollback triggers:
- two consecutive sessions with q95 deterioration > 8 bps
- ARR spike > 2x baseline
- SAFE-state dwell time above control limit
Common false conclusions
"Leg-level fills beat mid, so execution is fine."
Package PnL can still be bad due to timing exposure between legs."Atomic route is always expensive."
Often false in stress; atomic can be cheaper after tail-adjustment."Temporary hedges solve it."
They shift risk and can add basis/unwind cost if overused."This is only options microstructure noise."
Control-plane latency and sequencing policy are usually major contributors.
Minimal implementation checklist
- Build package-level benchmark and cost decomposition
- Log leg event timeline with unified timestamp semantics
- Train branch-aware cost model (atomic / legged-complete / legged-abort)
- Deploy LCG caps + sequence policy + bridge-hedge TTL
- Monitor PSDF q50/q95, ARR, BHB, and SAFE dwell time
- Review weekly by strategy type (vertical/calendar/ratio/condor)
References (starting points)
- Engle, R. F., & Ferstenberg, R. (2006). Execution Risk (NBER Working Paper 12165).
- Cartea, Á., Jaimungal, S., & Penalva, J. (2015). Algorithmic and High-Frequency Trading.
- Guéant, O. (2016/2017). Option Pricing and Hedging with Execution Costs and Market Impact.
- Gatheral, J. (2010). No-Dynamic-Arbitrage and Market Impact.
One-line takeaway
For multi-leg options, execution quality is a package completion problem under moving risk factors—if you only score individual leg fills, you will systematically underestimate real slippage.