Arte SheetsLearn. Try. Understand.

Market Microstructure & Quantitative Trading

Glosten-Milgrom Adverse-Selection Bid-Ask Spread Formula

Derive Bayesian market-maker Ask = E[V | Buy], Bid = E[V | Sell], and Glosten-Milgrom spread from informed-trader probability mu and asset value range V_H - V_L.

Explain why bid-ask spreads exist even with zero inventory risk and zero order-processing fees!

Lawrence Glosten and Paul Milgrom (1985) proved that asymmetric information alone generates a positive bid-ask spread for a risk-neutral, competitive dealer: suppose an asset is worth V_H (prior probability theta_0) or V_L < V_H (probability 1 - theta_0), fraction mu_inf in [0, 1) of arriving orders come from insiders who know V, and fraction (1 - mu_inf) come from noise traders splitting 50/50 between buys and sells. Applying Bayes’ rule, a buy order raises posterior probability of V_H to theta_buy = (theta_0 * (1 + mu_inf)) / (1 + mu_inf * (2*theta_0 - 1)) and a sell order lowers it to theta_sell = (theta_0 * (1 - mu_inf)) / (1 - mu_inf * (2*theta_0 - 1)) — setting Ask = E[V | Buy] and Bid = E[V | Sell] so dealer losses to insiders exactly match gains from noise traders!

Verify at symmetric prior theta_0 = 0.50 (B4) with V_H = 110 (B2), V_L = 90 (B3 -> range 20, midpoint 100), and insider share mu_inf = 0.25 (B5): Ask = 90 + 0.625 * 20 = 102.50, Bid = 90 + 0.375 * 20 = 97.50, and Quoted Spread = 0.25 * 20 = 5.00! After observing that first Buy, update prior to theta_1 = 0.625: next-trade Ask rises to 90 + (25/34) * 20 = 104.7059 while next-trade Bid returns exactly to the original midpoint 100.0000 (because one Buy followed by one Sell cancels out in Bayes’ odds!), tightening the spread to 4.7059!

Glosten-Milgrom Quote (V_H=110, V_L=90, mu=0.25)Prior theta_0 = 0.50Updated theta_1 = 0.625
Posterior High-State Prob | Buy0.62500.7353 (25 / 34)
Competitive Ask Price E[V | Buy]102.5000104.7059
Competitive Bid Price E[V | Sell]97.5000100.0000 (Buy+Sell Cancels!)
Quoted Bid-Ask Spread (Ask - Bid)5.0000 (= mu * (V_H - V_L))4.7059

Bayesian Market-Maker Ask = E[V | Buy] and Bid = E[V | Sell] Formula

Validate V_H > V_L >= 0, interior prior 0 < theta_0 < 1, and informed order-flow share 0 <= mu_inf < 1.

=LET(v_hi, B2, v_lo, B3, th_0, B4, mu_in, B5, IF(OR(v_lo < 0, v_hi <= v_lo, th_0 <= 0, th_0 >= 1, mu_in < 0, mu_in >= 1), "Invalid Microstructure Input", LET(p_bh, (th_0 * (1 + mu_in)) / (1 + mu_in * (2 * th_0 - 1)), ROUND(v_lo + p_bh * (v_hi - v_lo), 4))))

Exact Glosten-Milgrom Quoted Bid-Ask Spread (Ask - Bid) Formula

Compute exact unrounded E[V | Buy] - E[V | Sell] = (4 * mu_inf * theta_0 * (1 - theta_0) * (V_H - V_L)) / (1 - mu_inf^2 * (2*theta_0 - 1)^2)!

=LET(v_hi, B2, v_lo, B3, th_0, B4, mu_in, B5, IF(OR(v_lo < 0, v_hi <= v_lo, th_0 <= 0, th_0 >= 1, mu_in < 0, mu_in >= 1), "Invalid Microstructure Input", LET(num_s, 4 * mu_in * th_0 * (1 - th_0) * (v_hi - v_lo), den_s, 1 - (mu_in^2) * ((2 * th_0 - 1)^2), ROUND(num_s / den_s, 4))))

Try the example

Use the original values or change them to test your understanding.

Further reading