Glosten-Milgrom and Adverse Selection Models

The Glosten-Milgrom model explains why a competitive dealer can quote a spread even without inventory cost or monopoly power. Some arriving traders may know the asset's value better than the dealer. A buy order is therefore evidence that value is high, and a sell order is evidence that value is low. The dealer must update beliefs after seeing the order, which makes the ask exceed the prior expected value and the bid fall below it.

That mechanism is the cleanest formalization of adverse selection. It also gives an important practical warning: spread revenue is compensation for conditional losses, not free yield.

A one-trade Bayesian dealer

Suppose terminal value \(V\) is \(vH\) with prior probability \(\pi\), otherwise \(vL\). With probability \(\mu\), an informed trader observes \(V\) and buys only in the high state or sells only in the low state. With probability \(1-\mu\), a liquidity trader buys or sells with equal probability. A competitive dealer sets:

\[ A = E[V\mid \text{buy}], \qquad B = E[V\mid \text{sell}]. \]

For a buy, Bayes' rule gives

\[ P(H\mid \text{buy}) = \frac{\pi[\mu + (1-\mu)/2]} {\pi[\mu + (1-\mu)/2] + (1-\pi)(1-\mu)/2}. \]

The ask is this posterior probability times \(vH\), plus its complement times \(vL\). The bid follows symmetrically. As \(\mu\) rises, buys become stronger evidence and the spread widens.

InputEconomic meaningEffect on spread
Value dispersion \(vH-vL\)Size of information eventWider
Informed probability \(\mu\)Frequency of informed arrivalsWider
Prior uncertainty \(\pi(1-\pi)\)Remaining ambiguityUsually wider
Noise-trader shareUninformative flowNarrower
Tick constraintMinimum quote incrementCan mask theoretical spread

Quotes learn from sequence, not just volume

After a buy, the dealer's posterior becomes the prior for the next arrival. A sequence of buys moves both bid and ask upward even if no public news occurs. This predicts positive short-run relation between trade sign and quote revision, an idea underlying order-flow imbalance features.

def posterior_high(prior, side, informed_prob):
    noise_side = 0.5
    if side == "buy":
        like_high = informed_prob + (1 - informed_prob) * noise_side
        like_low = (1 - informed_prob) * noise_side
    else:
        like_high = (1 - informed_prob) * noise_side
        like_low = informed_prob + (1 - informed_prob) * noise_side
    return prior * like_high / (prior * like_high + (1 - prior) * like_low)

def quote(prior, low, high, informed_prob):
    ask_p = posterior_high(prior, "buy", informed_prob)
    bid_p = posterior_high(prior, "sell", informed_prob)
    return low + (high-low)*bid_p, low + (high-low)*ask_p

This toy code makes the recursive update explicit. Production models need a richer state: continuously distributed values, variable order sizes, public signals, and inventory. Still, the event-time logic is preferable to treating every quote change as an unexplained random walk.

Mapping theory to observed spreads

Observed quoted spread contains more than adverse selection. A useful decomposition is

\[ S{\text{quoted}} \approx S{\text{order processing}} + S{\text{inventory}} + S{\text{adverse selection}} + S_{\text{tick}}. \]

Realized spread measures what a liquidity supplier earns after a horizon \(h\); effective spread measures execution cost relative to the midpoint at the trade. Their difference, together with midpoint movement, identifies whether quoted compensation survives subsequent repricing. See transaction cost analysis for implementation details.

StatisticFormula intuitionInterpretation
Effective spreadSigned distance from contemporaneous midCost paid at execution
Realized spreadSigned distance from future midMaker revenue after markout
Price impactMid movement after tradeAdverse-selection component
Fill markoutFuture P&L conditional on fillPassive strategy quality

A dealer can have a high effective spread and a low or negative realized spread during a toxic flow episode. That is precisely the model's economic content.

Extensions and limitations

Glosten-Milgrom assumes unit orders and a dealer who cannot identify trader type. Today, order size, venue, broker routing, queue behavior, and cancellation patterns all add information. Informed traders also split orders to conceal intent; liquidity providers replenish dynamically. The model does not imply that every buyer is informed or that a signed trade causes a permanent price move.

Empirically, estimate conditional markouts or a state-dependent spread decomposition rather than trying to recover \(\mu\) literally. Include volatility, depth, time of day, and order-flow imbalance. Compare outcomes by venue and order type. A midpoint fill may have zero displayed spread while still carry significant adverse selection.

For market-making controls, use the posterior logic qualitatively: persistent one-sided flow, cancellation of same-side depth, and rising volatility should reduce quote size and skew inventory. The inventory dimension is developed in inventory-risk market making.

Key takeaways

  • A competitive spread can arise solely because trade direction reveals information about value.
  • Bid and ask are conditional expectations after a sell or buy, respectively—not arbitrary offsets from fair value.
  • Effective spread is not profit; realized spread and markouts reveal adverse selection.
  • Sequential trades update beliefs, making event-time order-flow features economically meaningful.
  • Use the model as a causal lens, while estimating state-dependent outcomes rather than literal trader-type probabilities.
#Glosten Milgrom #adverse selection #bid ask spread #market making #Python