Quant Memo
Core

Post-Trade Adverse Selection Monitoring

A fill that looks great at the moment of execution can be the market quietly telling you it knew something you didn't. Post-trade adverse selection monitoring checks what price did in the minutes after every fill, not just at the fill itself.

Prerequisites: Adverse Selection

A market maker fills a buy order right at the mid, no visible slippage — the execution report looks perfect. Ninety seconds later the mid has moved down 4 basis points, the direction that makes the fill a loser: the counterparty who hit the bid knew something. Multiply that by 40,000 fills a day and a strategy whose execution reports look flawless can be quietly bleeding, because "good fill" and "good trade" are different questions, and only one shows up in the execution report itself.

What a markout measures

A markout is the mark-to-market P&L of a fill, measured not at execution but some fixed horizon later, against the market's own subsequent move:

markout(τ)=s×(mt+τmt),\text{markout}(\tau) = s \times \big(m_{t+\tau} - m_t\big),

where ss is +1+1 for a buy fill and 1-1 for a sell fill, mtm_t is the mid price at the moment of the fill, and mt+τm_{t+\tau} is the mid price τ\tau seconds or minutes later. In words: did the market move in your favor or against you, in the period right after you traded? A market maker with no informational disadvantage should see markouts that average to roughly zero (they're being paid the spread for taking the other side, not for forecasting). A market maker persistently trading against informed flow sees markouts that are negative on average and get worse the longer τ\tau runs — the informed trader's private information keeps playing out after the trade.

Worked example: spotting toxic flow

A market maker computes markouts at τ=1\tau = 1s, 10s, and 60s across 50,000 fills over a week, split by counterparty:

Counterparty groupMarkout @1s@10s@60s
Retail-flagged+0.1 bps+0.2 bps+0.3 bps
Unflagged institutional−0.3 bps−1.1 bps−1.4 bps
Counterparty X specifically−0.8 bps−3.9 bps−7.2 bps

Retail flow is roughly neutral — consistent with uninformed trading, exactly what a market maker wants to fill. Counterparty X's markout keeps deepening well past the first second, from −0.8 to −7.2 bps by 60 seconds: the price keeps moving against the position long after the trade, the signature of a counterparty trading on real short-term information. At 4,000 shares average size and 15 fills a day, the 60-second markout alone implies roughly 15×4,000×0.000724315\times4{,}000\times0.00072\approx43 shares' worth of price-equivalent loss per day from this one relationship.

Worked example: a false alarm from selection bias

A separate check flags negative, worsening markouts on fills larger than 5,000 shares. Before concluding this bucket is toxic, the check is re-run controlling for time of day: large fills cluster in the last 15 minutes before close, when markouts for every counterparty are more negative because closing-auction-driven moves are larger and more directional. Once controlled, the large-fill markout is statistically indistinguishable from the small-fill markout — the original flag measured a time-of-day effect, not a size effect, and would have led to the wrong fix.

0 bps retail unflagged counterparty X seconds since fill
A markout that keeps deepening past the first second, rather than flattening out, is the signature of trading against real information.

Sampling distribution
sample mean →
sample size n 10spread of means 0.332predicted 1/√n 0.316

The averaging logic above is the same reason a single blended markout across all flow can look fine: a genuinely toxic counterparty's signal gets diluted into the mean exactly the way any subgroup effect gets diluted when you average over a large, mostly-benign population.

Compute markouts at several horizons per counterparty and per flow type, not one number for the whole book. A markout flat near zero means roughly fair trading; one that keeps deepening over tens of seconds means you're on the wrong side of informed flow.

The classic confusion: computing a single blended markout and concluding the desk is fine because the average is small. Toxic flow from one counterparty can be fully offset in the average by benign flow elsewhere, and a control for confounders like time-of-day is required before attributing a negative markout to the variable you first suspected.

What this means in practice

Compute markouts at multiple horizons, segmented by counterparty, order size, and time of day, on every fill, and control for known confounders before attributing a negative markout to a specific cause. Feed persistently toxic counterparties back into quoting logic — wider spreads or reduced size — rather than treating adverse selection as a fixed cost. See VPIN and Flow Toxicity for a pre-trade complement.

Related concepts

Practice in interviews

Further reading

  • Glosten & Milgrom, Bid, Ask and Transaction Prices in a Specialist Market
  • Easley, López de Prado & O'Hara, The Volume Clock
ShareTwitterLinkedIn