Latency-Decomposed Slippage Attribution & Control Playbook

2026-02-25 · finance

Latency-Decomposed Slippage Attribution & Control Playbook

Date: 2026-02-25
Category: research
Scope: Practical execution modeling for live equities routing (KRX/KIS-compatible, venue-agnostic)


1) Why this playbook

Most slippage stacks answer: “How much did we lose?”
Operations need a better question: “Which latency segment created the loss, and what control should fire now?”

This playbook decomposes implementation shortfall into clock segments and connects each segment to an online control action.


2) Core idea: split execution by clocks, not just by cost buckets

Classical attribution (spread/impact/delay/opportunity) is necessary but insufficient in production because delay is often treated as one blob.

Instead, track a child order on four clocks:

  1. Decision → Gateway (L_dec)
    Strategy + risk checks + serialization + queueing inside our stack
  2. Gateway → Venue ACK (L_wire)
    Network + gateway + venue ingress latency
  3. ACK → First Fill / Cancel ACK (L_queue)
    Queue priority + book dynamics + adverse selection exposure
  4. Fill → Hedge/Next Decision (L_react)
    Post-fill reaction speed (inventory/risk updates)

Then model expected slippage as:

[ \mathbb{E}[S_t] = f(X_t) + g_1(L_{dec,t}) + g_2(L_{wire,t}) + g_3(L_{queue,t}) + g_4(L_{react,t}) + \epsilon_t ]

Where:


3) Minimal data contract (production-first)

For every child order event, persist:

If this contract is incomplete, any “model quality” discussion is premature.


4) Attribution formula that operators can trust

For a buy child order:

[ S = px_{fill} - mid_{dec} ]

Decompose with observable intermediate anchors:

[ S = \underbrace{(mid_{arr} - mid_{dec})}{\text{pre-arrival drift}} + \underbrace{(px{fill} - mid_{arr})}{\text{execution + queue + spread}} + \underbrace{\Delta{fees/rebates}}_{\text{net fee effect}} ]

Then attribute pre-arrival drift to L_dec + L_wire and execution term to L_queue + instantaneous microstructure state.

Practical split:

Residual should be monitored; if persistent, model is missing state variables.


5) Regime-aware penalty surfaces

Latency penalties are not stationary. Build 3 regimes:

Fit separate quantile models per regime (q50/q90/q95), e.g.:

[ Q_{\tau}(S\mid Z) = \theta^{(r)}_{\tau} \cdot \phi(Z), \quad r \in {Calm, Stress, Toxic} ]

with Z = [L_dec, L_wire, L_queue, spread, depth, imbalance, vol, side].

Why quantiles, not only mean: live control needs tail survival, not pretty averages.


6) Online controller (what to do when latency hurts)

State machine

Controls by segment

If L_dec elevated:

If L_wire elevated:

If L_queue elevated with high toxicity:

If L_react elevated:

Controller objective:

[ \min_{u_t} ; \mathbb{E}[S_t \mid u_t] + \lambda \cdot \text{UnderfillRisk}(u_t) ]

subject to:


7) Calibration loop (weekly + intraday checks)

Weekly

  1. Re-label regimes from latest month
  2. Refit q50/q90/q95 models
  3. Coverage test (target: q95 exceedance ≈ 5%)
  4. Drift test by symbol bucket (liq tiers)

Intraday


8) Dashboard that changes behavior

Show these in one panel:

If a metric does not trigger an action, remove it.


9) Failure modes & anti-footgun checks

  1. Clock mismatch (NTP drift): use monotonic deltas for segment latency
  2. Timestamp sampling bias: avoid only logging filled orders
  3. Overfitting tails: enforce minimum sample per regime/symbol bucket
  4. Control flapping: hysteresis in GREEN↔AMBER↔RED transitions
  5. Cost-only myopia: always track underfill + alpha decay jointly

10) 30-day rollout plan

Success criteria:


References (starting points)


One-line takeaway

Treat slippage as a latency-segmented control problem: when you can pinpoint which clock is bleeding, you can intervene before p95 damage compounds.