Transaction Costs & Market Impact: Models & Analysis › Market Impact Modeling
Quantitative FinanceAll chapters Transaction Costs & Market Impact: Models & Analysis › Market Impact ModelingOne section · Sections in this chapter4 / 16 ↓
Reading tools Definitions & inline links
Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.
Article links
Make inline references clickable
Market impact is a critical and complex transaction cost component to model. When you trade, you are not simply paying a fixed cost; you are changing the market price itself. This effect is temporary (prices revert after your trading pressure subsides) and permanent (your trades may convey information that is incorporated into prices). The challenge in modeling market impact lies in its dual nature: part of the price change is a mechanical response to consuming liquidity, which fades as the market rebalances, while another part reflects information conveyed by the trade that permanently updates the market's view of fair value.
Temporary vs. Permanent Impact
Temporary impact is the transient price displacement caused by trading pressure that reverts after trading ceases. It reflects the liquidity premium demanded by counterparties for absorbing your order flow.
Permanent impact is the lasting price change that remains after temporary impact has decayed. It reflects the information content of your trades that becomes incorporated into the market price.
The distinction is critical for execution strategy. If impact were purely temporary, you could simply wait for prices to revert before trading again. But permanent impact means that your early trades adversely affect your later trades, as the price has permanently moved against you. Consider a fund liquidating a large position: temporary impact means they pay a premium for immediate execution, but this premium disappears once they stop trading. Permanent impact, however, means that each sale drives down the price level at which subsequent sales occur, creating a compounding cost that cannot be avoided by waiting.
Empirical research, starting with the seminal work of Kyle (1985) and later Almgren and Chriss (2001), has established several stylized facts about market impact:
- Impact is concave in trade size: doubling the trade size does not double the impact
- Impact depends on the participation rate (fraction of market volume)
- Temporary impact decays over time, typically within minutes to hours
- Permanent impact persists and is related to the information content of trades
These empirical regularities set up the mathematical models we develop next. The concavity of impact in trade size is particularly important: it means that large trades are more efficient per share than small trades in terms of impact cost, but total impact still grows with order size. This creates interesting tradeoffs in execution strategy that we will explore.
The Square-Root Model
The most widely used market impact model in practice is the square-root model. Empirical studies document this relationship in equity, futures, and foreign exchange markets over multiple periods. The model states that market impact scales with the square root of the trade size relative to market volume:
where:
- : market impact cost as a fraction of price
- : daily volatility of the asset
- : quantity traded (shares or dollars)
- : daily trading volume (in the same units as )
- : impact coefficient (market-dependent parameter)
- : impact exponent, empirically found to be approximately 0.5 (hence "square-root")
Let us examine each component of this formula to understand its economic intuition. The volatility term appears because impact is fundamentally about price uncertainty: in a more volatile market, liquidity providers demand greater compensation for taking the other side of your trade, since the risk of adverse price movement is higher. The participation rate captures how much of the market's trading activity your order represents; trading 10% of daily volume creates far more impact than trading 0.1%.
The impact coefficient is an empirical parameter that varies by market and must be estimated from data. Typical values range from 0.05 to 0.3 depending on the asset class and market conditions. Illiquid markets tend to have higher values, which reflects the greater difficulty of absorbing large orders without moving prices.
The square-root relationship, captured by the exponent , has been documented across many markets and time periods. It implies that trading 4% of daily volume incurs only about twice the impact of trading 1%, not four times. This sublinearity determines how strategy capacity scales with order size. Mathematically, if you trade four times the volume ( instead of ), your impact becomes , which is only twice the original impact despite quadrupling the trade size.
import numpy as np
# Square-root impact model implementation
def square_root_impact(quantity, volume, volatility, eta=0.1, gamma=0.5):
"""
Calculate market impact using square-root model.
Parameters:
-----------
quantity : float or array
Trade size (shares or dollars)
volume : float
Daily trading volume
volatility : float
Daily volatility (as decimal, e.g., 0.02 for 2%)
eta : float
Impact coefficient (typically 0.05-0.2)
gamma : float
Impact exponent (typically ~0.5)
Returns:
--------
impact : float or array
Market impact as a percentage of price
"""
participation_rate = quantity / volume
impact = volatility * eta * (participation_rate**gamma)
return impact
# Parameters for a typical liquid stock
daily_volume = 10_000_000 # 10 million shares daily
daily_volatility = 0.02 # 2% daily volatility
# Calculate impact for various trade sizes
trade_sizes = np.linspace(10000, 1000000, 100)
impacts = square_root_impact(trade_sizes, daily_volume, daily_volatility)
# Also calculate what linear impact would look like
linear_impacts = daily_volatility * 0.1 * (trade_sizes / daily_volume)
# Annotation coordinate
example_size = 600000
example_impact_bps = (
square_root_impact(example_size, daily_volume, daily_volatility) * 10000
)
The square-root relationship has important practical implications. Consider a fund that has been trading 1% of daily volume with satisfactory performance. If they decide to double their capital, trading 2% of daily volume, their impact costs increase by a factor of , not 2. This is good news for scaling strategies, but the costs still grow faster than linearly would suggest in absolute dollar terms.
The Almgren-Chriss Framework
For optimal execution of large orders, we need a more sophisticated model that captures the tradeoff between market impact and timing risk. The Almgren-Chriss framework, introduced in their influential 2001 paper, provides exactly this. This framework transformed the field by formalizing the execution problem as a mathematical optimization: how should we balance the certainty of market impact costs against the uncertainty of price movements during execution?
Consider if you must liquidate X shares over a time horizon . The key insight is that you face a fundamental dilemma. Trading quickly minimizes your exposure to adverse price movements but concentrates all of the market impact into a short period. Trading slowly spreads out the impact but leaves you vulnerable to volatility risk as prices may move against you while you still hold a large position.
Let the trading trajectory be described by , the number of shares remaining to be sold at time , with and . The trading rate is . This notation captures the complete execution path: at any moment, we know both how many shares remain and how fast we are trading.
The framework models two sources of cost, corresponding to the temporary and permanent impact we discussed earlier:
Permanent impact: The price reflects the cumulative effect of past trading:
where:
- : asset price at time
- : initial asset price
- : permanent impact drift function
- : trading rate at time
- : current time
This equation captures how the market price drifts downward (for a sell program) as our trading activity reveals information. The function describes how the trading rate translates into price pressure. The integral accumulates all past trading pressure, which reflects that permanent impact is indeed permanent: the price remembers all our previous trades.
Temporary impact: Additionally, each trade temporarily depresses the price:
where:
- : effective execution price
- : fundamental asset price
- : temporary impact function
- : trading rate
While permanent impact accumulates over time, temporary impact depends only on our current trading rate. The function captures the instantaneous price concession we must offer to attract counterparties. The faster we trade, the larger this concession must be to induce sufficient liquidity providers to take the other side.
We can derive the expected execution cost by calculating the Implementation Shortfall which is the difference between the initial portfolio value and the total proceeds from liquidation. This measure, introduced by Perold in 1988, has become the industry standard for execution cost measurement because it captures the complete cost of implementing an investment decision.
The total proceeds correspond to the integral of the execution price multiplied by the trading rate (negative for sales):
The first term represents the proceeds if we could execute at the fundamental price , while the second term represents the additional cost from temporary impact. Note that the trading rate is negative for sales (shares remaining is decreasing), which is why we use the absolute value in the second integral to ensure temporary impact is always a cost.
Using integration by parts on the first term , we set and , which implies and . The integration yields:
The boundary conditions enforce that we start with shares and end with zero. The price dynamics equation tells us that the price falls by for each unit of trading rate.
Negating this result provides the first term of the proceeds equation:
Subtracting the proceeds from the initial value yields the total expected cost:
where:
- : expected total execution cost
- : liquidation time horizon
- : permanent impact component
- : temporary impact component
- : shares remaining at time
- : trading rate
The integral sums two distinct cost sources:
- : The cost from permanent price drift, which devalues the entire remaining position .
- : The cost from temporary impact, which acts as a direct toll on the specific shares traded at each moment.
Permanent and temporary impact enter this decomposition asymmetrically. Permanent impact costs are amplified by the remaining position: when you have many shares left to sell, each unit of permanent price decline costs you more because it affects more shares. Temporary impact, by contrast, is a local cost that affects only the shares currently being traded.
The variance of execution cost (timing risk) depends on the price volatility and the remaining position:
where:
- : variance of execution cost
- : price volatility parameter
- : shares remaining at time
- : total time horizon
This formula captures the intuition that timing risk is proportional to how much position you hold and for how long. The squared term reflects that larger positions create proportionally more variance. If you liquidate quickly (small x(t) for most of the period), you have low variance, while if you hold a large position until late in the trading period, you have high variance.
You face a tradeoff: trading quickly minimizes timing risk but maximizes market impact; trading slowly minimizes impact but exposes the position to price volatility.
To implement this model, we often assume linear forms for the impact functions, which leads to the closed-form solutions used in the following example:
where:
- : permanent impact coefficient (distinct from the exponent in the square-root model)
- : temporary impact coefficient
- : trading rate
The linear assumption is a simplification, but it yields closed-form optimal strategies. More realistic nonlinear impact functions require numerical optimization, but the qualitative insights from the linear case carry over.
Under these assumptions, the total permanent impact cost depends only on the total shares traded, making it path-independent. The optimization problem therefore simplifies to balancing temporary impact costs against volatility risk.
def almgren_chriss_trajectory(X, T, n_periods, sigma, eta, gamma, lambd):
"""
Calculate optimal trading trajectory using Almgren-Chriss model.
Parameters:
-----------
X : float
Total shares to liquidate
T : float
Time horizon (e.g., 1 for one day)
n_periods : int
Number of trading periods
sigma : float
Price volatility (per period)
eta : float
Temporary impact parameter
gamma : float
Permanent impact parameter
lambd : float
Risk aversion parameter
Returns:
--------
t : array
Time points
x : array
Shares remaining at each time
trade_list : array
Shares to trade in each period
"""
tau = T / n_periods
# Almgren-Chriss optimal parameter
kappa_sq = lambd * sigma**2 / eta
kappa = np.sqrt(kappa_sq)
t = np.linspace(0, T, n_periods + 1)
# Optimal trajectory
sinh_kappa_T = np.sinh(kappa * T)
x = X * np.sinh(kappa * (T - t)) / sinh_kappa_T
# Trade list (shares to trade in each period)
trade_list = -np.diff(x)
return t, x, trade_list
# Parameters
X = 100000 # 100,000 shares to sell
T = 1.0 # 1 day
n_periods = 20 # Trade 20 times
sigma = 0.02 # 2% daily vol
eta = 0.0001 # Temporary impact
gamma = 0.0001 # Permanent impact
# Compare trajectories for different risk aversions
risk_aversions = [0.001, 0.01, 0.1]
trajectories = {}
for lambd in risk_aversions:
t, x, trades = almgren_chriss_trajectory(
X, T, n_periods, sigma, eta, gamma, lambd
)
trajectories[lambd] = {"t": t, "x": x, "trades": trades}

The key insight from the Almgren-Chriss model is that optimal execution depends critically on the tradeoff between market impact and timing risk. If you are risk-neutral, you would spread execution evenly over time (TWAP), while if you are risk-averse, you front-load execution to reduce exposure to volatility. We'll explore execution algorithms that implement these ideas in detail in the upcoming chapter on execution algorithms and optimal execution.