Rama Cont, Arseniy Kukanov and Sasha Stoikov Journal of Financial Econometrics, 2014
Nikhil Reddy GoguPhD student, ICMA Centre
Seminal studyICM116, autumn 2026
Price impact: how far the price moves when people trade
Price impact is how far the price moves when people trade. Anyone who has to buy or sell a large block of shares within a fixed time needs a model of it.
Most earlier studies measured it from trades alone: each trade, its size, and the price change around it.
They found the move grows with the size of the trade, but less than one for one: a concave shape often called the square-root law. Four times the shares gives about twice the move.
The paper asks whether trades are the right thing to look at in the first place.
Cont, Kukanov and Stoikov (2014), Section 1: studies of trades "typically conclude that the price impact of trades is an increasing, concave (‘square root’) function of their size." The curve illustrates a square-root shape (move = √(shares ÷ 100)); it is not data.
Trades are a small part of what happens at the best prices
A quote update is any change at the best bid or the best ask: a new order joins a queue, an order is cancelled, a trade eats part of a queue, or a new best price appears.
40 quote updates1 trade
In their data there are about 40 quote updates for every trade.
“Is volume of trades truly the best explanatory variable for price movements in markets where many quote events can happen between two trades?”
Their answer: over short time intervals, price changes are mainly driven by the order flow imbalance, the imbalance between supply and demand at the best bid and ask prices.
Cont, Kukanov and Stoikov (2014): the ratio of quote updates to trades is "roughly 40 to 1" in their April 2010 data (Section 3.1); the question is from Section 1 and the answer from the abstract.
The top of the book: four numbers
The paper uses only the best bid and the best ask and the shares waiting at them. It calls this level one.
Symbol
What it is
Here
PB
the best bid price
100.00
qB
shares waiting at the best bid
500
PA
the best ask price
100.02
qA
shares waiting at the best ask
300
The mid-price sits halfway: 100.01. The bid side is demand and the ask side is supply. The paper compares each snapshot of the four numbers with the one before.
Illustrative book for a USD 100 stock with a one-cent tick; the sizes are not data. Level one as defined in Section 2.1.
Four kinds of change at the top of the book
Change
What happened
On the book
Demand up
the best bid rises, or the bid queue grows
200 shares of new buy orders join the bid
Demand down
the best bid falls, or the bid queue shrinks
a market sell takes 150 shares
Supply up
the best ask falls, or the ask queue grows
a seller posts 200 shares at 100.01
Supply down
the best ask rises, or the ask queue shrinks
buyers take all 300 shares at 100.02
A lower ask means more supply: a seller will now sell cheaper.
The four kinds of change are those listed in Section 2.1. Each event starts from the same illustrative book.
One change, one number: the formula for each event
en =
I{PBn ≥ PBn−1}qBn
−I{PBn ≤ PBn−1}qBn−1
−I{PAn ≤ PAn−1}qAn
+I{PAn ≥ PAn−1}qAn−1
+ the new bid sizeon unless the best bid fellbuying pressure
− the old bid sizeon unless the best bid roseselling pressure
− the new ask sizeon unless the best ask roseselling pressure
+ the old ask sizeon unless the best ask fellbuying pressure
Each term is a sign, a switch and a size. Two terms watch the best bid, two watch the best ask.
I{…} is a switch: it equals 1 when the statement inside the braces is true and 0 when it is false. Multiplying by it keeps a term or deletes it.
+
the signadds: buying pressure
I{PBn ≥ PBn−1}
the switchIs the best bid now at least as high as before? Yes is 1, no is 0.
×
qBn
the sizeshares waiting at the best bid now
200 shares join the bid at 100.00: before 500, now 700. The bid did not fall, so the switch is 1: + 1 × 700 = +700.
−
the signsubtracts: selling pressure
I{PBn ≤ PBn−1}
the switchIs the best bid now at most as high as before? Yes is 1, no is 0.
×
qBn−1
the sizeshares waiting at the best bid before
The same event: the bid did not rise either, so this switch is also 1: − 1 × 500 = −500. With the first term: +700 − 500 = +200, the shares that joined.
−
the signsubtracts: selling pressure
I{PAn ≤ PAn−1}
the switchIs the best ask now at most as high as before? Yes is 1, no is 0.
×
qAn
the sizeshares waiting at the best ask now
A seller offers 200 shares at 100.01: the ask fell from 100.02, so the switch is 1: − 1 × 200 = −200.
+
the signadds: buying pressure
I{PAn ≥ PAn−1}
the switchIs the best ask now at least as high as before? Yes is 1, no is 0.
×
qAn−1
the sizeshares waiting at the best ask before
Buyers take all 300 shares at 100.02 and the ask rises to 100.03: the switch is 1: + 1 × 300 = +300.
200 shares join the best bid
1 × 700
− 1 × 500
− 1 × 300
+ 1 × 300 = +200
200 shares join the best bid
1 × 700
− 1 × 500
− 1 × 300
+ 1 × 300 = +200
Buyers take all 300 at 100.02: the ask rose
1 × 500
− 1 × 500
− 0 × 600
+ 1 × 300 = +300
200 shares join the best bid
1 × 700
− 1 × 500
− 1 × 300
+ 1 × 300 = +200
Buyers take all 300 at 100.02: the ask rose
1 × 500
− 1 × 500
− 0 × 600
+ 1 × 300 = +300
A seller offers 200 at 100.01: the ask fell
1 × 500
− 1 × 500
− 1 × 200
+ 0 × 300 = −200
Cont, Kukanov and Stoikov (2014), Section 2.1. P and q are the best price and the shares waiting; B is the bid, A the ask; n is the snapshot now and n−1 the one before. The examples start from an illustrative book: bid 100.00 with 500 shares, ask 100.02 with 300, and 600 shares at 100.03.
Order flow imbalance: one number, in shares
Over each ten-second window the paper adds up the numbers of every change at the best prices.
An illustrative ten-second window
Shares
en
New buy orders join the best bid
300
+300
A market buy takes shares from the best ask
200
+200
Buy orders cancelled at the best bid
100
−100
New sell orders join the best ask
150
−150
Order flow imbalance
+250
Buying
300200
500 shares
Selling
100150
250 shares
500 − 250 = +250 shares: more buying pressure than selling pressure.
order flow imbalance of the window = e1 + e2 + e3 + e4 = +300 + 200 − 100 − 150 = +250
A market sell and a cancelled buy order of the same size count the same: both shrink the bid queue by the same amount.
Illustrative numbers. Order flow imbalance over an interval is the sum of the event numbers inside it (Section 2.1); the paper notes that it "treats a market sell and a cancel buy of the same size as equivalent, since they have the same effect on the size of the bid queue."
The price impact coefficient turns shares into ticks
price movein ticks
=
price impact coefficientticks per share
×
order flow imbalanceshares
It works like an exchange rate: euros = euros per pound × pounds. Here the rate is in ticks per share.
Order flow imbalance
× coefficient
= price move
−500 shares
× 0.002
−1 tick
0
× 0.002
0
+250
× 0.002
+0.5 tick
+500
× 0.002
+1 tick
+1,000
× 0.002
+2 ticks
Every share of imbalance moves the mid-price by 0.002 of a tick, so 500 shares move it one tick. The points lie on a straight line through zero, and its slope is the coefficient.
Illustrative coefficient of 0.002 ticks per share. In the paper the price impact coefficient is estimated for each stock in each half-hour (Section 3.2).
Linear: twice the imbalance, twice the move
Linear: every extra share adds the same 0.002 of a tick, so twice the imbalance gives twice the move.
Shares
Linear
Square-root shape
100
0.2 tick
0.2 tick
400
0.8 tick
0.4 tick
1,600
3.2 ticks
0.8 tick
The paper finds the straight line for order flow imbalance. Where the square-root shape for trade size comes from is Section 4.
Illustrative numbers: the linear relation at 0.002 ticks per share, and a square-root shape through the same first point (0.2 tick at 100 shares).
A deeper queue needs more selling to move the price
The paper’s simple model puts the same number of shares at every price, here 500, and lets orders arrive and leave only at the best prices.
To push the best bid down one tick, sellers must remove all 500 shares at 100.00, by market sells or by cancelled buy orders.
The best bid is now 99.99. The ask did not move, and the mid-price sits halfway, so it falls half a tick: 0.5 tick for 500 shares, a coefficient of 0.001 ticks per share.
Shares at each price
Selling needed
Mid-price move
Coefficient
250
250
0.5 tick
0.002
500
500
0.5 tick
0.001
1,000
1,000
0.5 tick
0.0005
Twice the depth, half the coefficient. In this model: price change = order flow imbalance ÷ (2 × depth). The 2 is there because the mid-price sits halfway between bid and ask.
The stylized model of Section 2.2: the same depth at every price, and limit orders and cancellations only at the best prices. Its equation (1): price change = order flow imbalance ÷ (2 × depth) + an error from rounding.
How well the straight line fits: R-squared
R-squared is the share of the ups and downs in the price moves that the line explains. The rest is noise.
Interval
Order flow imbalance
Actual move
Line predicts
Miss
1
−500
−1
−1
0
2
0
+0.5
0
+0.5
3
+500
+0.5
+1
−0.5
4
+1,000
+2
+2
0
Step
Value
Average of the actual moves
0.5 tick
Total variation: squared distances from the average
1.5² + 0² + 0² + 1.5² = 4.5
Unexplained: squared misses
0.5² + 0.5² = 0.5
R-squared = 1 − 0.5 ÷ 4.5
0.89
In the paper: one regression for each stock in each half-hour, 180 ten-second intervals. Across 50 stocks the average R-squared is 65%.
Illustrative numbers, with a coefficient of 0.002 ticks per share. The paper’s regressions: ordinary least squares for each stock in each half-hour of April 2010, on ten-second intervals (Section 3.2).
What the switches do on each side of the book
Best bid price
+ new bid size
− old bid size
Example: from 100.00 with 500, the bid is now
The bid side gives
unchanged
on
on
100.00 with 700
+700 − 500 = +200: the change in the queue
rose
on
off
100.01 with 100
+100: the new, better bid
fell
off
on
99.99 with 400
−500: the old queue, wiped out
Best ask price
− new ask size
+ old ask size
Example: from 100.02 with 300, the ask is now
The ask side gives
unchanged
on
on
100.02 with 450
−450 + 300 = −150: minus the change in the queue
fell
on
off
100.01 with 200
−200: the new, cheaper ask
rose
off
on
100.03 with 600
+300: the old queue, wiped out
Only one change happens between two snapshots. The side that did not change has the same price and the same size, so its two terms cancel to zero.
Cont, Kukanov and Stoikov (2014), Section 2.1: "between two such observations, only one of the following events can occur." Examples from the illustrative book: bid 100.00 with 500 shares, ask 100.02 with 300.
Five changes, five numbers
Each change starts from the same book: the best bid is 100.00 with 500 shares, the best ask 100.02 with 300.
Change
Terms switched on
en
200 shares join the best bid
+ new bid − old bid
+700 − 500 = +200
A market sell takes 150
+ new bid − old bid
+350 − 500 = −150
A buyer bids for 100 at 100.01
+ new bid only: the bid rose
+100
A seller offers 200 at 100.01
− new ask only: the ask fell
−200
Buyers take all 300 at 100.02
+ old ask only: the ask rose
+300
Illustrative book for a USD 100 stock; each change starts from the same book. The formula is from Section 2.1.
Keys
→spaceclick
next click, then next slide
←backspace
one click back (a slide back lands on its final state)
shift + → / ←
whole slides
number + enter
go to a slide
P
presenter window: audience view, the state after the next click, notes, timer
N
notes panel in this window
O
overview of every slide
F
full screen
B or .
black screen
R
replay this slide’s animation
T
restart the timer; the bar along the bottom fills over 20 minutes, and its mark is where this slide should end
Home / End
first / last slide
The dots at the bottom right count the clicks left on the slide; when they are all filled, the next click moves on.