Chapter 3: Order Flow, Liquidity, and Securities Price Dynamics
This chapter's real title corrects an earlier guess in this project's own curriculum notes — it isn't called "Price Determination Theory," but that's exactly what it is. It derives the bid-ask spread from three separate causes, with the Glosten-Milgrom model as its centerpiece, using real intraday trade data from a French insurance company's stock to ground every step.
- Source
- Extracted directly from the chapter text in /references
- Companion lecture
- Covers the same ground as Lecture 3 (both parts) of the video course — read independently
- Book part
- Part I — foundations, flagged "essential" per the preface
Real intraday data: prices bounce a lot, in 35 minutes
The chapter opens with real trade-and-quote data for AGF, a large French insurer, on Euronext's electronic book — 20 transactions between 9:05 and 9:40am on March 26, 2001.
| Time | Size | Price | Direction | Bid | Ask |
|---|---|---|---|---|---|
| 9:06:04 | 20 | 66.70 | Sell | 66.90 | 67.00 |
| 9:26:26 | 1,000 | 66.20 | Buy | 66.00 | 66.20 |
| 9:36:10 | 1,000 | 66.00 | Sell | 66.00 | 66.20 |
What this means: the price moved from 66.70 down to 66.00 and around, over just 30 minutes, with no company-specific news in between — and the correlation between successive price changes in this exact dataset is −0.45, strongly negative. This is the empirical puzzle the whole chapter exists to explain: intraday prices move too much, too often, and in a specific negatively-correlated pattern that a frictionless "prices only move on news" model can't produce.
The frictionless benchmark, and why it fails
The EMH benchmark: pₜ = μₜ = E(v|Ωₜ). The chapter's own illustration: Ajax Amsterdam beats Juventus in an upset; investors mark Ajax stock up from €7.00 to a new fair value of €7.20. Under the EMH, the very next trade should occur at €7.20 — not a gradual crawl through €7.10, €7.15. If a dealer is risk-neutral, competitive, and faces investors with no informational edge, competition drives both bid and ask to exactly μₜ — zero spread, and price only moves on genuine public news.
Real markets don't look like this: (1) intraday volatility is too large to be explained by news alone (French and Roll, 1986); (2) positive bid-ask spreads are the norm, not the exception; (3) successive price changes are negatively correlated (as the AGF data's −0.45 shows), not uncorrelated as the frictionless model predicts. The rest of the chapter systematically relaxes the three assumptions (dealer competition, no informational edge, zero trading cost) that produced this too-clean benchmark.
The Glosten-Milgrom model, in the book's own notation
Same model as the companion lecture, same mechanics: with probability π the order comes from an informed trader who knows v exactly; with probability 1−π, from a liquidity trader (uninformed, buys or sells with equal probability). The book credits the underlying intuition to Jack Treynor's 1971 essay under the pseudonym "Bagehot": dealers who aren't as well-informed as their best-informed customers will systematically lose to them — adverse selection — and must recoup that loss from everyone else via the spread.
With v binary (v_H or v_L) and θₜ the dealer's belief that v=v_H, the ask and bid at any time t solve the dealer's zero-expected-profit condition:
a_t = μ_(t-1) + [π·θ_(t-1)·(1-θ_(t-1))] / [π·θ_(t-1) + (1-π)/2] · (v_H - v_L) b_t = μ_(t-1) - [π·θ_(t-1)·(1-θ_(t-1))] / [π·(1-θ_(t-1)) + (1-π)/2] · (v_H - v_L)
For the very first trade of the day (θ₀=1/2), this collapses to the same clean result the companion lecture derives: S₁ = a₁ − b₁ = π(v_H − v_L).
- Context
- The book's own numerical walkthrough: v_H=102, v_L=98, θ₀=1/2, π=1/2. First-trade quotes: a₁=101, b₁=99.
- Algo-relevant?
- Yes — this is the exact tick-by-tick belief update loop a Bayesian market-making algorithm runs.
- What's applied
- If the first order is a buy, θ updates to 3/4, and μ₁ marks up to 101 — dealer's next quotes become a₂=101.6, b₂=100. If the first order is a sell instead, θ drops to 1/4, μ₁=99, and quotes become a₂=100, b₂=98.4.
- Action
- The dealer doesn't just widen the spread after a trade — the whole quote ladder shifts in the direction of the trade (up after a buy, down after a sell), exactly matching what the AGF data in §01 shows empirically: sustained buying pressure (trades 25-40) lifts the midprice, sustained selling (trades 1-10) drops it.
- Why
- Because pₜ − pₜ₋₁ = s(dₜ)·dₜ in this model — price changes are entirely determined by the direction of the triggering order, which is the formal reason order flow, not just news, drives intraday prices.
| First order | θ₁ | μ₁ | New a₂ | New b₂ |
|---|---|---|---|---|
| Buy | 0.75 | 101 | 101.6 | 100.0 |
| Sell | 0.25 | 99 | 100.0 | 98.4 |
What this means: one single trade shifts the dealer's entire belief and both quotes by roughly a full point, in the direction of that trade — this is not noise or slippage, it's the dealer rationally updating on the only information they have. Chasing a moving quote ladder like this, instead of assuming quotes are static between your own fills, is the difference between a market-making algorithm that prices risk correctly and one that gets picked off systematically.
Price discovery, simulated — and the liquidity trade-off it implies
Running the same v_H=102/v_L=98 setup for 100 simulated trades, at three levels of π, the book measures pricing error PDₜ = (pₜ − v_H)² over time — how far the transaction price still is from the true value.
| π | Trades to convergence |
|---|---|
| 0.1 | Almost imperceptible even after 100 trades |
| 0.5 | ~15 trades on average |
| 0.9 | ~5 trades on average |
What this means: the same π that widens the spread (§03 — bad for anyone trading) is the π that speeds up price discovery (good for market informativeness) — a genuine trade-off, not a modeling artifact. This directly poses the policy question insider-trading rules and disclosure requirements are actually answering: how much π should regulators tolerate?
A second cause of spread: order-processing costs and market power
Adverse selection isn't the only reason for a spread. Dealers also have real operating costs (γ per share/euro traded) — and if they have any market power (not perfectly competitive), they can charge a markup above cost. The chapter's key distinguishing result: order-processing and market-power costs produce a spread too, but the price impact of a trade is transient — it dissipates as the dealer's temporary compensation is captured, not permanent like the adverse-selection component, which never reverses because it reflects a genuine, lasting revision in the dealer's belief about value.
A third cause: inventory risk (Stoll, 1978)
Where this connects: Lecture 1's market-making example used an unexplained "skew" term (skew = k × inventory) to show a bot shifting both quotes based on its position. This section is where that comes from, formally.
A risk-averse dealer with existing inventory zₜ chooses how many shares yₜ to supply, maximizing mean-variance utility U = Eₜ(wₜ₊₁) − (ρ/2)vart(wₜ₊₁), where ρ is risk aversion and σ_ε² is the per-period variance of news about fundamentals. Solving the dealer's first-order condition gives the price at which they're willing to trade:
p_t = μ_t − ρ(z_t − y_t)σ_ε²
What this means: the dealer's quoted price depends directly and linearly on their current inventory zₜ, their risk aversion ρ, and the volatility of the underlying σ_ε² — precisely the "skew = k × inventory" structure used illustratively in Lecture 1, now with each piece of k identified: k = ρσ_ε². A larger inventory, a more risk-averse dealer, or a more volatile stock all independently justify a bigger skew. Unlike adverse selection, this component's price impact is also transient — it reverses once the dealer works their inventory back toward zero, not because their belief about value changed.
Three costs, one spread — and how to tell them apart after the fact
| Cost source | Price impact of a trade | Why |
|---|---|---|
| Adverse selection | Permanent | Reflects a genuine, lasting revision in the dealer's belief about fundamental value |
| Order-processing costs | Transient — reverses | Compensation for a real but one-off cost, not new information |
| Inventory risk | Transient — reverses | Reflects temporary risk-bearing, unwound as the dealer's position returns to target |
What this means: this table is directly actionable, not just descriptive — measuring whether a price move after a large trade reverses (and how fast) tells you which cost actually dominates in a given market, which is exactly what Chapter 5's empirical techniques are built to exploit. Real intraday price impact typically has both a permanent and a transient piece mixed together — separating them is an empirical, not just theoretical, exercise.
Before moving to Chapter 4
- 1
Exercise 2 from the chapter: a stock worth $10 or $20 with equal probability. Compute bid/ask with no informed trading, then with 1-in-10 traders informed — then find the average trading cost to an uninformed trader and average gain to an informed one.
- 2
Exercise 1: with order-processing costs of k per transaction (not per share), show the spread decreases with transaction size — and think about what that implies is unrealistic about a flat per-share cost assumption.
- 3
Pull real intraday tick data for a stock you trade, and check: does the correlation between successive price changes come out negative, the way it does for AGF (−0.45)? What does the magnitude suggest about the mix of adverse-selection vs. transient costs in that name?