Microprice Divergence Exhaustion Slippage Playbook
Date: 2026-03-10
Category: research
Scope: Intraday execution for liquid equities/futures where microprice pressure often overshoots before reverting.
Why this matters
Many execution engines treat one-sided microprice pressure as a simple “avoid passive, cross now” signal. In production, that often overpays:
- Early in pressure build-up, crossing can be correct.
- Late in pressure build-up, crossing often buys the local peak of toxicity.
- A short exhaustion window frequently appears where queue risk is still real, but immediate adverse selection decelerates.
This note turns that intuition into a measurable slippage control loop.
Core hypothesis
Slippage is not only a function of spread/size/volatility. It is strongly conditioned by where we are in the pressure lifecycle:
- Pressure Build: toxicity accelerating (don’t wait too long).
- Exhaustion Window: toxicity still high but incremental damage decelerating.
- Reversion/Refill: crossing urgency can be reduced; passive/improve regain edge.
Goal: avoid paying the “last expensive ticks” of panic-taking while preserving completion reliability.
Signal stack
Use event-time features (e.g., 100–500ms bars for fast symbols, 1–3s for slower symbols).
1) Normalized Microprice Divergence (NMD)
[ \text{NMD}_t = \frac{\text{MicroPrice}_t - \text{Mid}_t}{\max(\epsilon, \text{Spread}_t)} ]
Interpretation:
- |NMD| near 0: balanced book.
- Large |NMD|: strong imbalance pressure.
2) Pressure Acceleration (PA)
[ \text{PA}_t = \Delta \text{NMD}_t ]
Positive and rising PA means pressure is still building (high chase risk if you wait).
3) Toxicity Deceleration Ratio (TDR)
Track short-horizon markout slope vs prior slope:
[ \text{TDR}t = \frac{|\nabla \text{Markout}{0\to2s}|}{|\nabla \text{Markout}_{-2s\to0}| + \epsilon} ]
- TDR > 1: toxicity accelerating.
- TDR < 1: toxicity decelerating (candidate exhaustion window).
4) Refill Elasticity Index (REI)
After top-level depth depletion, estimate refill speed:
[ \text{REI}t = \frac{\text{RefilledDepth}{\tau}}{\text{SweptDepth}_{\tau} + \epsilon} ]
Higher REI suggests impact recovery is improving.
5) Sweep Burst Intensity (SBI)
Short-window count/size of aggressive market sweeps. Helps distinguish structural move vs transient burst.
Regime state machine
State A — BALANCED
- |NMD| low, PA near zero.
- Baseline schedule policy.
State B — PRESSURE_BUILD
- |NMD| high, PA positive, TDR >= 1.
- Increase urgency (but cap max aggression).
State C — EXHAUSTION_WINDOW
- |NMD| still elevated, but TDR < 1 and REI improving.
- Reduce panic-taking; prefer improve/passive hybrid.
State D — TOXIC_CHASE
- |NMD| high and re-accelerating (PA up again), SBI spike, REI weak.
- Defensive: smaller clips, wider pauses, tail-protect controls.
State E — SAFE_FALLBACK
- Triggered by model uncertainty/drift/latency anomalies.
- Deterministic conservative schedule with hard slippage budget.
Use hysteresis to prevent flapping (entry threshold > exit threshold).
Branch-cost model
For each child-order decision (a \in {\text{join}, \text{improve}, \text{take}, \text{pause}}):
[ \mathbb{E}[C|a,s] = \underbrace{\mathbb{E}[\text{fill slippage}|a,s]}{\text{direct}} + \underbrace{\lambda_1,\mathbb{E}[\text{no-fill regret}|a,s]}{\text{completion}} + \underbrace{\lambda_2,\text{TailRisk}{q95}(a,s)}{\text{survival}} ]
where state (s) is from the regime machine above.
Key practical point: in EXHAUSTION_WINDOW, tail risk of immediate crossing often drops slower than expected benefit. This is where many naive urgency policies overtrade.
Control policy (practical)
PRESSURE_BUILD
- Increase participation cap gradually.
- Allow controlled taking.
- Keep hard per-minute tail budget.
EXHAUSTION_WINDOW
- Freeze further aggression escalation for a short TTL (e.g., 5–20s symbol-dependent).
- Shift to improve/join mix.
- Re-evaluate every short epoch; if PA re-accelerates, exit immediately.
TOXIC_CHASE
- Clip size down.
- Enforce cooldown between aggressive clips.
- If budget burn-rate breaches threshold, escalate to SAFE_FALLBACK.
KPI pack
Track by symbol, session bucket, and regime:
- IS_bps (mean, p90, p95)
- Budget Burn Rate (realized / allowed slippage budget)
- Exhaustion Capture Rate (ECR): fraction of detected exhaustion windows where policy reduced next-interval markout vs baseline
- False Exhaustion Rate (FER): windows classified as exhaustion but followed by immediate toxicity re-acceleration
- Completion Reliability: residual notional at deadline
Promotion criteria (example):
- p95 IS improvement >= 8% vs baseline
- FER below fixed cap
- No degradation in completion reliability beyond tolerance
Data/engineering checklist
- Event-time synchronized L1/L2 + trades + child-order actions
- Deterministic reconstruction for backtest/replay
- Timestamp integrity checks (clock skew + feed latency flags)
- Feature freshness guardrails (stale features -> SAFE_FALLBACK)
- Per-state logging for post-trade attribution
Failure modes
- Latency mirage: stale L2 creates fake exhaustion signal.
- Regime leakage: thresholds tuned on calm periods only.
- No hysteresis: rapid state flapping increases churn.
- Objective drift: optimizing mean bps while p95 worsens.
- Symbol overgeneralization: one threshold set across very different tick/queue regimes.
2-week rollout plan
Week 1
- Shadow-mode state labeling + KPI capture.
- No execution behavior change.
- Validate FER/ECR stability by session bucket.
Week 2
- Canary on small notional subset.
- Enable only EXHAUSTION_WINDOW aggression-freeze logic.
- Daily guardrail review (p95, budget burn, residual).
Rollback if:
- p95 cost worsens above threshold,
- completion drops below SLA,
- state flapping exceeds cap.
Bottom line
Microprice pressure is not binary. The last phase of pressure often behaves differently from the first. A state-aware exhaustion controller can reduce “panic-cross at local toxicity peak” behavior while keeping deadline risk bounded.
In short: model pressure lifecycle, not just pressure level.