Adverse-Selection Markout Gating Playbook (Production-First)

2026-02-23 · finance

Adverse-Selection Markout Gating Playbook (Production-First)

Date: 2026-02-23
Category: research
Context: Practical execution control for live trading where spread capture often gets erased by toxic fills.

Why this matters

A lot of passive execution looks good at fill time and bad 5–60 seconds later.
That gap is adverse selection. If we don’t measure and gate on it, “good fill ratio” becomes false comfort.

Core idea

Use short-horizon markout as a live toxicity signal and tie it directly to execution aggressiveness.

Minimal data contract

For each child order / fill, store:

Derived:

Signed convention: positive = favorable after fill; negative = toxic fill.

Live toxicity score

Build a simple score first (no overfitting):

toxicity_score = w1*EMA(markout_5s) + w2*EMA(markout_30s) + w3*fill_to_cancel_ratio_z + w4*short_term_vol_z

Suggested defaults:

Focus on stability over cleverness.

3-state gating policy

State A — Normal

Condition:

Actions:

State B — Caution

Condition:

Actions:

State C — Defensive

Condition:

Actions:

Add hysteresis so states don’t flap every minute.

Calibration loop (weekly)

  1. Bucket fills by state (Normal/Caution/Defensive).
  2. Compare p50/p90/p95 implementation shortfall and completion risk.
  3. Check if Defensive actually reduces tail loss without excessive underfill.
  4. Retune thresholds first; only then retune weights.

Rule: optimize for tail protection, not best average bps on calm days.

Guardrails

Failure modes to avoid

Practical rollout plan

Phase 1 (shadow): compute score + hypothetical states only.
Phase 2 (limited capital): apply gating on small notional universe.
Phase 3 (full): enable across book with dashboard + alerting.

Success criteria


Execution quality is not just spread capture; it’s post-fill path quality.
Markout gating makes that explicit and actionable.