Market Impact Estimation

Hard·23 min read
Market MicrostructureMarket ImpactKyle ModelPrice ImpactEmpirical Methods

Setup

Why Market Impact Estimation Matters

Market impact is the price change caused by a trader's own activity. Correctly estimating market impact is essential for:

  1. Transaction cost analysis (TCA): decomposing the implementation shortfall into pre-trade estimate and realised impact to assess execution quality.
  2. Optimal execution: the Almgren-Chriss model requires the impact parameters η\eta (temporary) and γ\gamma (permanent) as inputs; these must be estimated from data.
  3. Portfolio construction: large-scale optimisers (BlackRock Aladdin, Axioma) incorporate impact costs as a non-linear transaction cost penalty; wrong impact estimates lead to over-trading.
  4. Strategy capacity analysis: an alpha strategy with zero capacity above a certain AUM (assets under management) is unscalable; impact estimation defines this limit.

Conventions

  • Price impact: the change in mid-price attributable to a trade of size QQ shares. Measured as a fraction of the pre-trade mid (in basis points) or in ticks.
  • Participation rate: ηpart=Q/V\eta_{\mathrm{part}} = Q / V, the fraction of average daily volume (ADV) traded. ADV is typically the 20- or 60-day average.
  • Normalised quantity: q=Q/(Vσdaily1/2)q = Q / (V \cdot \sigma_{\mathrm{daily}}^{1/2}) in some models (Kyle normalisation).
  • Convention: impact is measured as the mid-price move from the start of the trade to some point after completion. "Instantaneous" impact is measured at the moment of the last fill; "realised" or "total" impact is measured 15–30 minutes after completion (allowing temporary impact to decay).

Kyle's Lambda: The Linear Impact Model

The Kyle (1985) Model

Kyle (1985) studies a single-period model with one informed trader, one market maker, and uninformed noise traders. The informed trader submits order xx (unknown to the market maker); noise traders submit uN(0,σu2)u \sim \mathcal{N}(0, \sigma_u^2). The market maker observes total order flow y=x+uy = x + u and sets price P=E[Vy]P = \mathbb{E}[V \mid y].

Assumptions:

  • True value: VN(μ0,Σ0)V \sim \mathcal{N}(\mu_0, \Sigma_0).
  • Informed trader maximises expected profit: Π=(VP)x\Pi = (V - P)x, choosing xx optimally.
  • Market maker is competitive: sets PP to be a martingale.

Equilibrium (Linear): In the unique linear equilibrium:

P=μ0+λy,λ=12σuΣ0,P = \mu_0 + \lambda\, y, \qquad \lambda = \frac{1}{2\sigma_u}\sqrt{\Sigma_0},

where λ>0\lambda > 0 is Kyle's lambda — the price sensitivity to order flow. The informed trader submits:

x=Vμ02λ=σuΣ0(Vμ0),x^* = \frac{V - \mu_0}{2\lambda} = \frac{\sigma_u}{\sqrt{\Sigma_0}}(V - \mu_0),

which hides in the noise: xN(0,σu2)x^* \sim \mathcal{N}(0, \sigma_u^2), indistinguishable from noise trading.

Kyle's Lambda as a Price Impact Coefficient

In continuous time, Kyle (1985) and subsequent work show that the permanent price impact per unit of signed order flow is:

ΔP=λQsigned,\Delta P = \lambda \cdot Q_{\mathrm{signed}},

where QsignedQ_{\mathrm{signed}} is the net signed order flow (positive for buys, negative for sells) and λ\lambda has units of USD/share2\text{USD}/\text{share}^2 (or USD/share\text{USD}/\text{share} per share of flow).

Estimation from tick data. Regress mid-price changes on signed order flow:

ΔMt=α+λOFt+εt,\Delta M_{t} = \alpha + \lambda \cdot \mathrm{OF}_t + \varepsilon_t,

where OFt=i:tiΔtqisign(PiMi1)\mathrm{OF}_t = \sum_{i: t_i \in \Delta t} q_i \cdot \mathrm{sign}(P_i - M_{i-1}) is the signed order flow in the interval [tΔt,t][t-\Delta t, t] (the Lee-Ready rule assigns sign using the trade direction relative to the preceding mid). The slope λ\lambda is Kyle's lambda for that stock and time period.

Units: for a stock with ADV = 10 million shares and daily volatility of 1%, a typical λ107\lambda \approx 10^{-7} to 10610^{-6} USD/share2\text{USD}/\text{share}^2, consistent with 1–10 bps impact per 1% of ADV traded.


The Square-Root Law

Empirical Evidence

A robust empirical finding across asset classes (equities, futures, FX) is that the expected price impact of a meta-order of size QQ follows a square-root law:

Impact(Q)σdailyYQV,\mathrm{Impact}(Q) \approx \sigma_{\mathrm{daily}} \cdot Y \cdot \sqrt{\frac{Q}{V}},

where:

  • σdaily\sigma_{\mathrm{daily}}: daily volatility of the asset.
  • VV: average daily volume (ADV).
  • YY: a dimensionless constant, typically Y[0.5,1.5]Y \in [0.5, 1.5] (empirically 1\approx 1 for large-cap equities).
  • Q/VQ/V: participation rate (fraction of ADV).

Key references: Almgren et al. (2005), Torre and Ferrari (1997), Grinold and Kahn (1999), Zarinelli et al. (2015).

The square-root law has several remarkable properties:

  • Universal across markets: the same functional form fits equities, futures, and FX with different YY but the same square-root dependence on quantity.
  • Concave in QQ: large orders have sublinear impact — doubling the order size less than doubles the price move. This is consistent with limit order book dynamics: large orders are filled across many price levels; the first shares hit the best ask, subsequent shares reach successively less liquid levels.
  • Inconsistency with linear models: the linear model (λQ\lambda Q) used in Kyle and Almgren-Chriss is an approximation for small Q/VQ/V. The empirically correct law is nonlinear.

Theoretical Justification

Gabaix et al. (2006) and Farmer et al. (2013) derive the square-root law from order book theory. The argument:

Consider a book with a power-law distribution of order sizes P[qx]xαP[q \geq x] \propto x^{-\alpha} with α3/2\alpha \approx 3/2. A meta-order of size QQ must consume all orders up to some depth dd. The expected depth required is E[Qbook(d)]d1/(11/α)=d2\mathbb{E}[Q_{\mathrm{book}}(d)] \propto d^{1/(1-1/\alpha)} = d^{2} for α=3/2\alpha = 3/2. Inverting: dQ1/2d \propto Q^{1/2}. The impact is proportional to dd, giving ImpactQ1/2\mathrm{Impact} \propto Q^{1/2}.

This topic requires Premium

Only today's featured topic is free. Unlock the full Today's Focus archive with Premium.

Read the theory? Run the code.

View Notebook