IOC Reject-Retry Burst Slippage Playbook
Date: 2026-03-10 Category: research (quant execution / slippage modeling)
Why this matters
IOC (Immediate-Or-Cancel) looks “safe” because it avoids queue risk:
- either you fill now,
- or the unfilled remainder is canceled.
But in fast, fragile books, IOC-heavy logic can create a hidden cost loop:
- send IOC into thin touch,
- partial/no fill,
- immediate retry at worse price,
- repeated urgency escalation,
- terminal catch-up cost.
This reject-retry burst often behaves like a convex slippage tax, especially near deadlines.
Core concept: IOC Retry Tax (IRT)
Define IRT as the incremental execution cost caused by repeated IOC retries under unstable microstructure.
[ \text{Total Slippage} = \text{Spread/Fee} + \text{Impact} + \text{Delay} + \text{Opportunity} + \text{IRT} ]
IRT is not just “bad luck.” It is a policy-dependent microstructure penalty.
Mechanism map
Typical burst pattern
- IOC #1 sees displayed size that vanishes by arrival.
- Fill ratio is low (or zero), residual stays large.
- Router retries quickly (often with higher aggression).
- Each retry updates reference price in a worsening path.
- Realized cost becomes dominated by retries × drift × widening spread.
Why average models miss it
Mean slippage models often blur together:
- calm single-shot IOC fills, and
- stress-period retry cascades.
You need explicit branch modeling for retry episodes.
Observable metrics
1) IOC Reject Rate (IRR)
[ \text{IRR} = \frac{#\text{IOC attempts with zero fill}}{#\text{IOC attempts}} ]
2) Retry Burst Length (RBL)
Number of IOC attempts in one parent-order micro-episode (e.g., within 1–3 seconds and same residual intent).
3) Retry Gap (RG)
Median inter-attempt time during burst. Very short RG can amplify market-impact signaling and chase risk.
4) Retry Slippage Slope (RSS)
Incremental bps cost per additional retry index within episode.
[ \text{RSS} \approx \frac{\Delta \text{episode cost (bps)}}{\Delta \text{retry index}} ]
5) Terminal Catch-Up Share (TCS)
Fraction of parent-order slippage realized in final completion window after retry bursts.
High TCS means retries deferred cost instead of reducing it.
Modeling approach
Use a two-stage model.
Stage A: Fill/Reject branch model
For each IOC attempt, estimate:
- (P(\text{full fill}))
- (P(\text{partial fill}))
- (P(\text{reject/zero fill}))
with features such as:
- touch depth + depth half-life,
- cancel intensity,
- quote age / feed lag proxy,
- short-horizon volatility,
- attempt index within episode,
- time-to-deadline residual pressure.
Stage B: Episode-level cost model
Condition on episode trajectory:
- branch cost for retries,
- branch cost for fallback aggression,
- missed-opportunity branch when IOC under-completes.
Optimize action policy with tail awareness:
[ \min_a ; \mathbb{E}[\text{Cost}|a] + \lambda,\text{CVaR}_{95}(\text{Cost}|a) + \eta,\text{MissPenalty} ]
where action (a) includes retry timing, size decay, route split, and fallback trigger.
Execution state machine
- STABLE_IOC: low IRR, short bursts, low RSS.
- FRAGILE_TOUCH: IRR and cancel intensity rising; avoid blind rapid retries.
- BURST_RISK: persistent RBL↑ + RSS↑; throttle retry cadence, diversify routes, pre-commit fallback.
- SAFE: deadline pressure + unstable fills; prioritize controlled completion over further retry gambling.
Add hysteresis and minimum dwell time to avoid state flapping.
Practical policy knobs
When state >= FRAGILE_TOUCH:
- Retry pacing: enforce minimum retry gap (anti-thrash).
- Size shaping: reduce per-attempt IOC size in fragile depth.
- Route diversification: avoid repeated collisions on one venue/path.
- Fallback ladder: predefine IOC -> passive join/improve -> controlled take escalation.
- Deadline-aware cap: stop low-information retries near cutoff; switch early to deterministic completion mode.
Data contract (minimum)
Per child attempt:
- decision/send/ack/fill/cancel timestamps,
- side/price/size/TIF,
- venue/router path,
- visible depth snapshot at decision and send,
- quote age and spread state,
- markout ladder (100ms/1s/5s/30s),
- parent residual and deadline features,
- attempt index and episode id.
Without event-time quality, retry-episode attribution becomes noisy.
Calibration and monitoring
Weekly
- Refit branch model by liquidity bucket.
- Re-estimate RSS and TCS distribution.
- Re-check calibration for reject probability.
Daily
- Monitor IRR/RBL drift by symbol and time bucket.
- Compare fallback branch cost vs baseline.
- Alert on unusual burst frequency.
Intraday guardrails
- If IRR > threshold and RBL exceeds cap for N windows -> force state >= BURST_RISK.
- If deadline pressure + high RSS -> escalate SAFE and reduce retry budget.
Rollout plan
- Shadow (2–3 weeks): compute episode metrics and counterfactual policies only.
- Canary (5–10% flow): enable retry pacing + fallback ladder.
- Scale by cohort: liquid names first, then thinner names.
- Promotion gates:
- q95 slippage non-inferior or improved,
- completion reliability stable,
- TCS reduced,
- no excessive opportunity-loss increase.
Rollback quickly if completion degrades or tail cost widens.
Common failure modes
- Treating every zero-fill IOC as harmless cancellation.
- Retrying too fast with no state awareness.
- Ignoring episode-level tail attribution (focusing only per-attempt averages).
- Delaying deterministic completion until terminal window.
Bottom line
IOC is not automatically low-risk execution.
Under fragile microstructure, repeated IOC retries can become a convex slippage engine. Model the retry episode explicitly, control it with state-aware pacing and fallback rules, and optimize for tail-safe completion, not just first-attempt elegance.
References (starting points)
- Cartea, Jaimungal, Penalva (2015), Algorithmic and High-Frequency Trading.
- Gatheral, Schied, Slynko (2012), transient impact / execution modeling context.
- Bouchaud et al. market microstructure literature on order-book resilience and liquidity fragility.
- Practical venue/routing docs on IOC behavior, reject semantics, and acknowledgment timing.