Throttle-Saturation Reject-Loop Slippage Playbook
Date: 2026-03-04
Category: research
Domain: finance / execution / market microstructure / trading infrastructure
Why this matters
Most slippage models assume a clean execution path:
- order decided,
- order accepted,
- order competes in the book,
- fill/cancel outcome observed.
In production, a meaningful fraction of cost comes from control-plane friction before market competition even starts:
- risk-gateway reject,
- venue throttle reject,
- session-rate pacing,
- retry delays,
- cancel/replace storms that reset queue priority.
If your model ignores this layer, it systematically underestimates tail slippage exactly when traffic is bursty and liquidity is fragile.
Core idea
Extend implementation shortfall into two coupled components:
- Market-plane cost (spread, impact, markout, opportunity)
- Control-plane cost (reject/retry/queue-reset induced cost)
Then optimize execution policy against the joint cost, not market-plane alone.
1) Cost decomposition with control-plane terms
For parent order (Q):
[ C_{total} = C_{market} + C_{control} + \epsilon ]
with
[ C_{market} = C_{spread} + C_{impact} + C_{timing} + C_{opp} ]
[ C_{control} = C_{reject-delay} + C_{retry-impact} + C_{queue-reset} + C_{abort} ]
Where:
- (C_{reject-delay}): adverse move while waiting after rejects/timeouts,
- (C_{retry-impact}): extra aggression needed after delayed acceptance,
- (C_{queue-reset}): queue-position loss from cancel/replace churn,
- (C_{abort}): residual underfill cost when retry budget expires.
A practical proxy model:
[ C_{control} \approx \beta_1 \cdot E[Delay_{retry}] \cdot \sigma_{short}
- \beta_2 \cdot E[QueueLoss]\cdot TickValue
- \beta_3 \cdot P(Abort)\cdot E[CatchupCost] ]
2) Throttle load and reject hazard
Define a per-path saturation score:
[ \rho_t = \frac{\lambda^{msg}_t}{\Lambda^{cap}_t} ]
- (\lambda^{msg}_t): observed message rate (submit+modify+cancel),
- (\Lambda^{cap}_t): effective gateway/venue path capacity.
Reject hazard:
[ P(reject_t=1) = \sigma\left(a_0 + a_1\rho_t + a_2 Burst_t + a_3 LatencyJitter_t + a_4 RiskGateStress_t\right) ]
Key point: reject probability is not linear in (\rho). Near high utilization, small bursts can produce disproportionate reject spikes.
3) Retry-loop delay model
Let retry attempts be capped by (K), with acceptance probability (p_t) per attempt (state-dependent).
Expected acceptance delay:
[ E[T_{accept}] = \sum_{k=1}^{K} P(N\ge k)\cdot \Delta_k ]
- (\Delta_k): pacing delay + network + gateway decision time for attempt (k),
- (P(N\ge k)): survival probability of unresolved order at retry (k).
Map delay to expected adverse drift/volatility exposure in current microstructure regime:
[ E[Cost_{delay}] \propto E[T_{accept}] \cdot f(\text{short-horizon drift}, \text{book fragility}, \text{imbalance}) ]
4) Queue-reset tax from excessive replace/cancel
In price-time priority venues, many modify paths effectively behave as cancel+new entry in queue terms.
Track Queue Reset Tax (QRT):
[ QRT = E\left[\Delta Rank \mid replace/cancel\right] \cdot P(fill \ before \ next \ reprice) ]
Operationally:
- high reject pressure often coexists with high replace cadence,
- high replace cadence amplifies queue loss,
- queue loss forces later aggressive catch-up,
- catch-up prints as “impact cost,” hiding infrastructure root cause.
This is the reject-loop feedback trap.
5) State machine for execution + traffic control
State A — GREEN
Condition: low (\rho), stable rejects
- normal child cadence,
- standard passive/aggressive mix,
- normal modify policy.
State B — AMBER
Condition: (\rho) rising, reject hazard up, queue resets increasing
- throttle self-message rate (wider child spacing),
- reduce non-essential modifies,
- prioritize amend paths that preserve priority (if venue supports),
- shift objective weight from spread-capture toward acceptance reliability.
State C — RED
Condition: sustained reject bursts / timeout clusters
- hard cap on message rate,
- escalate child-size schedule to reduce message count,
- route-weight shift toward lower-reject paths/venues,
- tighten retry budget to avoid infinite churn.
State D — SAFE
Condition: reject hazard extreme + slippage budget burn critical
- disable fragile tactics,
- switch to conservative completion policy,
- freeze optional quote-refresh logic,
- explicit operator alert + postmortem trigger.
Use hysteresis and minimum dwell-time to prevent flapping.
6) Data contract (minimum viable)
Per attempt (not just per filled child):
- parentId / childId / attemptId,
- intent timestamp, send timestamp, gateway ack/reject timestamp,
- reject reason code (risk gate, throttle, malformed, session/state, etc.),
- retry index and pacing delay,
- pre/post queue-rank proxy,
- microstructure snapshot (spread, depth, imbalance, microprice drift),
- outcome (fill/partial/cancel/expired/aborted),
- fallback path used.
Without attempt-level lineage, control-plane slippage is invisible and gets misattributed to market impact.
7) Modeling stack
Layer 1 — Reject classifier / hazard model
Predict reject probability by path, venue, and regime.
Layer 2 — Retry delay survival model
Estimate distribution of acceptance time conditional on attempt state.
Layer 3 — Queue-reset opportunity model
Estimate expected queue-rank loss and missed passive-fill value from replace behavior.
Layer 4 — Joint optimizer
Minimize:
[ \mathbb{E}[C_{total}] + \lambda_1 CVaR_{95}(C_{total}) + \lambda_2 \cdot CompletionPenalty ]
Decision knobs:
- child size,
- child spacing,
- modify aggressiveness,
- retry cap,
- venue/path weights,
- passive vs take urgency.
8) Validation protocol
Offline replay
- rebuild attempt-level timelines,
- inject synthetic capacity clamps (e.g., stress (\Lambda^{cap}) scenarios),
- compare baseline vs control-plane-aware policy on p50/p90/p95/CVaR.
Shadow live
- compute policy decisions without sending,
- monitor predicted vs realized reject hazard and queue-reset tax,
- verify calibration in opening/closing and event windows.
Canary live
- low-notional symbol subset,
- strict rollback triggers:
- reject-rate overshoot,
- p95 cost deterioration,
- completion SLA breach,
- state-machine oscillation.
9) Monitoring dashboard (must-have)
- Path utilization (\rho) by gateway/venue/session,
- reject rate by reason code + attempt index,
- acceptance-time distribution and retry-depth histogram,
- queue-reset tax trend,
- control-plane bps attribution vs market-plane bps,
- state occupancy (GREEN/AMBER/RED/SAFE),
- slippage budget burn-rate with control-plane contribution.
If you only watch net slippage, reject-loop pathologies hide until tails blow up.
10) Common failure modes
Fill-only dataset bias
Rejected/aborted attempts disappear from training, understating true cost.Average reject-rate comfort
Mean looks fine while burst-conditional tails dominate real damage.No reason-code normalization
Distinct reject classes mixed into one label breaks root-cause control.Spread-first objective under saturation
Over-optimizes passive micro-edge while acceptance reliability collapses.Unlimited retry loops
Creates churn, queue loss, and delayed panic crossing.
11) Minimal implementation checklist
- Log full attempt lineage (including rejects/timeouts)
- Build reject-hazard + retry-delay models by path/venue
- Add queue-reset tax feature and attribution panel
- Deploy 4-state controller with hysteresis and dwell-time
- Add CVaR and completion-SLA rollback gates
- Run weekly reject-loop postmortem on worst p95 symbols
References
- U.S. SEC (2010): Risk Management Controls for Brokers or Dealers with Market Access (Rule 15c3-5)
https://www.sec.gov/files/rules/final/2010/34-63241-secg.htm - 17 CFR § 240.15c3-5 (e-CFR text)
https://www.law.cornell.edu/cfr/text/17/240.15c3-5 - Directive 2014/65/EU (MiFID II), Article 48 (algorithmic trading controls)
https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32014L0065 - Commission Delegated Regulation (EU) 2017/566 (ratio of unexecuted orders to transactions)
https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32017R0566 - Hasbrouck, J. & Saar, G. (2013): Low-latency trading, Journal of Financial Markets 16(4), 646–679
- Friederich, S. & Payne, R. (2015): Order-to-trade ratios and market liquidity, Journal of Banking & Finance 50, 214–223
One-line takeaway
When message traffic saturates, slippage is no longer just a market-impact problem—it becomes a reject/retry control-loop problem, and the tail cost is paid before your order even gets a fair chance in queue.