Adverse Selection Explained: Why Your Best Fills Are Your Worst Trades

Adverse selection is the reason passive trading is harder than it looks. When you post a resting limit order, you do not choose who trades against you — they choose you. And the counterparties most eager to take your quote are precisely the ones who know something you don't. The result is brutal and counterintuitive: the trades you get filled on are biased toward the ones you wish you hadn't taken. Understanding, measuring, and defending against adverse selection is the difference between a profitable market maker and a slow donation machine. This guide explains it from the ground up.

The core idea: the winner's curse of liquidity

Adverse selection comes from asymmetric information. In any trade there are two broad types of counterparty:

  • Uninformed (liquidity) traders — they trade for reasons unrelated to short-term

price (rebalancing, hedging, cashing out). Trading with them is profitable for a liquidity provider.

  • Informed traders — they trade because they expect the price to move soon.

Trading with them means you buy right before a drop, or sell right before a rally.

When you quote a two-sided market, you fill both types — but not symmetrically. Informed traders selectively hit the side that is about to be wrong. So your fills are skewed toward toxic flow. This is the trading version of the lemons problem (Akerlof): when the other side knows more, the average thing they sell you is worse than the average thing on offer.

A concrete way to feel it: if your passive buy orders fill instantly and then the price keeps falling, you weren't lucky to get filled — you were picked off. Good fills feel slow; bad fills feel fast.

Why it shows up everywhere

Adverse selection isn't only a market-maker problem. It taxes anyone who supplies liquidity or trades against a more-informed crowd:

  • Limit orders. Every resting order is a free option you've written to the rest

of the market. Informed traders exercise it against you.

  • Market making and grid bots. Both earn the spread by quoting passively — and

both bleed when flow turns toxic. See market making and grid trading.

that always posts passively gets selected against in trending markets.

  • AMMs / DeFi liquidity provision. Liquidity providers are the ultimate passive

quoters; "impermanent loss" is largely adverse selection by arbitrageurs.

The bid-ask spread, decomposed

The classic insight (Glosten-Milgrom, 1985) is that the bid-ask spread exists partly to compensate for adverse selection. A market maker can't tell informed from uninformed flow in advance, so they widen the spread enough that profits from uninformed traders cover losses to informed ones.

Microstructure models decompose the quoted half-spread into three parts:

ComponentWhat it pays for
Order-processing costFees, infrastructure, the operational cost of quoting
Inventory costCompensation for holding unwanted, risky inventory
Adverse-selection costExpected loss to better-informed counterparties

The adverse-selection component is the one that moves: it widens when informed trading is likely (around news, data releases, high volatility) and narrows in quiet, liquidity-driven tape. This is why spreads blow out exactly when you most want to trade.

Order-flow toxicity and VPIN

Modern microstructure reframes adverse selection as order-flow toxicity — how informed (and therefore dangerous) the current flow is to liquidity providers. The PIN (Probability of Informed Trading) and its high-frequency cousin VPIN (Volume-Synchronized PIN) try to estimate it from order-flow imbalance: when buys and sells become persistently lopsided, flow is likely informed and toxic.

This connects directly to order flow imbalance signals: the same imbalance that predicts short-term direction is what makes your passive quotes dangerous. A maker watching toxicity will widen or pull quotes as imbalance spikes — the toxic-flow spike in VPIN preceded the 2010 Flash Crash, a textbook case of makers fleeing as adverse selection exploded.

Measuring it: the markout

You don't need a PhD model to quantify how badly you're being selected against. The practical tool is the markout (a.k.a. post-trade price drift): track where the mid price goes in the seconds/minutes after each of your fills.

  • Buy at the bid, mid drifts up afterward → good fill (uninformed flow).
  • Buy at the bid, mid drifts down afterward → adverse selection (you got picked).

Averaged over many fills, the markout curve tells you the realized cost of toxicity, separate from the spread you captured.

import numpy as np
import pandas as pd

def markout(fills, mid, horizons=(1, 5, 30, 60)):
    """fills: DataFrame [ts, side ('buy'/'sell'), price]
       mid:   Series of mid price indexed by ts (seconds)
       Returns mean signed markout (in price units) per horizon.
       Positive = favorable; negative = adverse selection."""
    out = {}
    for h in horizons:
        pnl = []
        for _, f in fills.iterrows():
            future = mid.asof(f.ts + pd.Timedelta(seconds=h))
            sign = 1 if f.side == "buy" else -1
            # value of the position move after the fill
            pnl.append(sign * (future - f.price))
        out[h] = float(np.mean(pnl))
    return out

# A markout that starts ~0 and goes increasingly negative with horizon
# is the signature of being adversely selected.

If your captured spread is +2 bps but your 60-second markout is −3 bps, you are losing 1 bp per round trip despite "earning the spread." That gap is adverse selection, and it's invisible if you only look at fill prices. It's a close relative of the realized-cost analysis in transaction costs & slippage and TCA.

How to defend against it

You can't eliminate adverse selection, but you can manage it:

  • Widen spreads when flow is toxic. Use realized volatility and order-flow

imbalance as a toxicity gauge; quote wider (or step back) when it spikes.

  • Skew, don't just widen. If imbalance is strongly one-sided, shade your quotes

away from the dangerous side rather than quoting symmetrically.

  • Shorten quote lifetime / cancel fast. A stale quote is a free option; the

faster you can reprice, the smaller the option you've written. This is part of why HFT makers invest so heavily in latency.

  • Use queue position and small size to avoid being the obvious target, and avoid

posting size right before scheduled news.

  • Add a "fade" filter. If recent fills show negative markouts, automatically

widen or pause — let the data tell you flow has turned toxic.

  • Trade where you're the informed one. Adverse selection is symmetric: if you

have an edge (a faster signal, an arb), you are the informed trader and adverse selection works for you.

Adverse selection in your backtest

This is one of the most common reasons a passive-fill backtest lies. Naive simulators assume your limit order fills whenever price touches it — and then ignore that, in reality, you'd have been filled preferentially on the bad side. To stay honest:

  • Don't assume every touched limit order fills; model partial / queue-dependent fills.
  • Add a markout-based penalty to passive fills, or assume you only get filled when

price trades through your level (a conservative proxy).

overfitting checklists — optimistic fill assumptions are a top source of phantom edge.

Common mistakes

  • Counting captured spread as profit while ignoring post-fill drift. Always look

at markouts, not just fill prices.

  • Quoting symmetric, constant-width spreads regardless of toxicity or imbalance.
  • Assuming "I got filled" is good news. Fast fills in a trending market are the

warning sign, not the reward.

  • Backtesting passive strategies with naive fills and being shocked when live

results are far worse.

  • Ignoring news/event windows, where the informed-trader fraction — and thus

adverse selection — spikes.

Key takeaways

  • Adverse selection = you trade against better-informed counterparties because

they choose to hit your passive orders.

  • It is the deepest cost in market making and any liquidity-providing strategy, and a

major reason the bid-ask spread exists at all.

  • Measure it with markouts (post-fill price drift); it's invisible if you only

look at execution price.

  • Order-flow toxicity (PIN/VPIN, imbalance) is the real-time signal of when

adverse selection is high — widen, skew, or pull quotes.

  • Build it into your backtests, or your passive-strategy results will be fiction.
  • The flip side: when you are the informed trader, adverse selection is your edge —

see order flow imbalance signals and market microstructure.

#adverse selection #market microstructure #market making #order flow toxicity #bid-ask spread