A backtest fills every order at the printed price. A thin stock never does, and that gap is often the entire difference between a strategy that back-tests well and one that trades well. The strategy didn't get worse when you went live. The assumption that was quietly doing a lot of work in the backtest just stopped being true.

The fill a backtest assumes isn't a fill at all

Historical price data records what a stock traded at — the open, high, low, and close of each bar. It doesn't record how much size was sitting at each of those prices, or what would have happened to an order larger than that size. A backtest that fills every trade "at the close" or "at the quote" is treating the market as if it had unlimited depth at every price tick, which is a reasonable simplification for a mega-cap and a serious distortion for anything thin.

The real mechanism is that an order has to consume whatever's actually resting in the book. The first few shares fill at the best price. Once that runs out, the next few fill at the next price level down, and so on, until the whole order is filled. On a liquid stock, that ladder is so deep relative to a normal order that you never notice it — you get filled essentially at the quote. On a thin one, your order can run through several price levels before it's done, and the average price you paid is measurably worse than the price you saw when you clicked.

The quote you saw vs. the price you got: illustrative candlestick chart showing a choppy pattern, annotated with Quoted price, Average fill.The quote you saw vs. the price you gotIllustrativeQuoted priceAverage fillVolumeBullish candleBearish candle
The backtest priced this fill at the quote. The actual order walked down through what was resting in the book to get filled, and the average price paid was the gap between the two.

Neither price in that chart is wrong. The quote was real, and the fill was real. The backtest just only ever sees the first one.

Slippage scales with size, not with the stock's name

It's tempting to think of slippage as a fixed, small cost — a few cents here and there. It isn't fixed. It's a function of your order size relative to what's actually available at each price level in that specific moment, which means the same stock can be cheap to trade at small size and expensive to trade at large size, and the same order size can be cheap on a calm day and expensive during a volatility spike when depth thins out everywhere at once.

That's also why "average daily volume" is a weaker liquidity signal than it looks. A stock can trade millions of shares a day and still have a thin, fast-moving book in the ten seconds after a catalyst hits — which is exactly when you're most likely to be trying to get in. Checking liquidity and range before a stock earns a spot on your list is the first filter, but it's a daily-average filter; it doesn't tell you what the book looks like in the moment you actually need the fill.

What thinner liquidity changes about a fill

LiquidityWhat a normal order does to the priceWhat that does to expectancy
Deep (mega-cap, high ADV)Barely moves the quote; fills close to what you sawBacktest fills are a reasonable approximation of live ones
Moderate (mid-cap, decent float)Walks through a level or two on a larger orderSmall, fairly consistent gap between backtest and live results
Thin (low float, light ADV)Can run through several levels, especially fast on a catalystBacktest edge can shrink or disappear once real fills are used
The categories are relative, not precise thresholds — the point is the direction each one pushes your actual fill, not an exact number to apply to every ticker.

Running the arithmetic instead of guessing at it

You don't need real market data to see whether slippage is a rounding error or the whole story — you need your own trade frequency and a conservative estimate of your per-trade slippage, multiplied out. This is arithmetic you can do on paper before you trade a strategy live, the same way you'd check a setup's breakeven win rate against its risk-reward before assuming an edge is real.

A worked example, not a market statistic

20
Trades per month
a moderate day-trading pace
$0.04
Slippage assumed per share, per side
round-trip, so $0.08 total per share
$1.60
Slippage cost per 100-share trade
before any of the strategy's actual edge is counted
These are illustrative inputs to show how the arithmetic works — swap in your own trade count and your own measured slippage, and the conclusion can move a lot.

At 20 trades a month and 100 shares a trade, that's $32 of slippage before the strategy has done anything — a cost a backtest that fills at the quote never charges. Whether that number is a rounding error or the entire edge depends entirely on what the strategy was making per trade in the backtest to begin with, which is exactly why the calculation has to be run against your own numbers rather than taken on faith either way.

What actually tells you the backtest is trustworthy here

None of this means a backtest is useless on a thinner name — it means the gap between backtest and live has to be checked directly rather than assumed away. The check is the same whether you're validating an existing strategy or sizing a new one, and it's mostly a matter of looking at the right things before you trust the number the backtest handed you.

Before you trust a backtest's fill assumption

  • You compared your order size to the book, not to average daily volume — A stock can trade millions of shares a day and still be thin at the exact prices and moment you need the fill.
  • You've logged a handful of real fills against what you expected to pay — A small amount of live or paper evidence on the specific stocks you trade beats any general slippage estimate.
  • You re-ran the edge with a conservative slippage estimate subtracted, not zero — If the strategy only works at a zero-slippage fill, it's describing a market you can't actually trade in.
  • You checked whether the edge survives at the size you actually intend to trade — A backtest run at 100 shares doesn't tell you what happens to the fill once you scale up.
  • Assuming a stock is liquid because the ticker is familiar or widely covered — Familiarity isn't depth. Plenty of well-known names get thin fast outside their most active hours.
None of this requires rebuilding the backtest. It requires checking the one assumption it's most likely to be wrong about.

The fix isn't to distrust every backtest. It's to treat the fill assumption as a variable you check, the same way you'd check any other input before trusting a result. Compare your typical order size to what the stock actually shows at the prices you trade near, log a handful of real fills against what you expected to pay, and a thin-book reality check is just one more test a backtest has to survive before you size a strategy around its numbers. The strategy that comes out the other side of that check is the one you can actually trade — not the one that only worked on paper.