Latency and capacity
Lesson 13 · about 9 min
Two realism problems scale with how fast and how large you trade. Latency is the delay between a signal existing and your order reaching the market. Capacity is the amount of money a strategy can run before its own orders move the price enough to erase the edge. Both are invisible in a backtest on bar data, and both quietly cap what any short-term strategy can deliver.
Latency
Between a bar closing and your order arriving at the exchange, time passes: the data feed delivers the bar, your platform computes the signal, the order is sent, the broker routes it, the exchange matches it. For a retail setup this chain is typically a few hundred milliseconds to a few seconds. For a discretionary trader clicking a button, add the human: two to ten seconds.
For a daily-bar strategy that enters at the next open, latency is irrelevant; you have all night. For a 1-minute breakout strategy, a two-second delay means the price has moved. How much? Roughly, in a liquid instrument, the expected move over two seconds during active hours is a fraction of a tick, but in exactly the moments a breakout fires, movement is concentrated and the expected move against you is several ticks.
| Timeframe | Typical latency | Bar-to-latency ratio | Practical effect |
|---|---|---|---|
| Daily, enter at open | seconds | ~1 : 20,000 | None |
| 15-minute | seconds | ~1 : 300 | Small; a tick or so |
| 1-minute | seconds | ~1 : 30 | Meaningful; several ticks at breakouts |
| Tick / sub-second | seconds | 1 : 1 or worse | Strategy is not viable for retail |
The honest way to handle latency in a backtest is to add it to the slippage model for the specific moments the strategy trades. A breakout strategy that fires when price is moving fast should model more slippage than one that enters on a limit in quiet conditions. If you cannot measure your latency, assume a full bar of delay on anything under 5 minutes and see whether the edge survives.
Capacity
Every order you place consumes liquidity. A small order is absorbed by the resting book. A large one walks through several price levels and, worse, signals your intent to other participants. Beyond some size, the impact of your own orders exceeds the edge of the strategy. That size is the strategy's capacity.
The usual rule of thumb is that an order should be a small fraction of the volume available in the period it executes. A common threshold is 1% of the bar's volume for a passive order, less for aggressive ones. For daily-bar strategies, 1% of average daily volume is sometimes quoted, but that assumes the order is worked across the day rather than sent at once.
A worked example for a stock:
| Field | Value |
|---|---|
| Average daily volume | 800,000 shares |
| 1% of ADV | 8,000 shares |
| Price | $30 |
| Max position at 1% ADV | $240,000 |
| Strategy risk per trade | 1% of account, with $1.50 average stop |
| Shares at 1% risk on a $100,000 account | 667 |
| Shares at 1% risk on a $2,000,000 account | 13,333 |
At $100,000 the strategy is nowhere near capacity. At $2,000,000, a single position is 1.7% of ADV and the model's slippage assumption no longer holds. For a retail trader in liquid instruments, capacity is rarely the binding constraint, but it becomes one quickly in small caps, thin futures months, minor forex crosses and small-cap crypto.
Key idea: Latency and capacity are both ways in which the market you trade is not the market in your data. The faster the strategy or the larger the account, the bigger the gap, and neither shows up in a bar-data backtest unless you put it in the slippage model deliberately.
Volume-scaled slippage
The simplest way to make a backtest capacity-aware is to scale slippage with participation:
slippage per side = base slippage × (1 + k × order size ÷ bar volume)
with k somewhere between 5 and 20 depending on how aggressive the orders are. This makes the backtest degrade gracefully as you scale account size, which is what happens in reality.
| Account | Order size (shares) | Bar volume | Participation | Slippage multiple (k = 10) |
|---|---|---|---|---|
| $50,000 | 330 | 40,000 | 0.8% | 1.08× |
| $500,000 | 3,300 | 40,000 | 8.3% | 1.83× |
| $2,000,000 | 13,300 | 40,000 | 33% | 4.3× |
The last row is a strategy that has passed its capacity.
The 2× test
For both latency and capacity, the practical test is the same one from Lesson 1: double the slippage assumption and see whether the edge survives. Strategies with average R above about 0.5 and holding periods of days survive easily. Strategies with average R around 0.1 and holding periods of minutes rarely do, and no amount of parameter tuning changes that.
Try it: Compute your strategy's average order size as a percentage of the average volume in the bar it executes on. If it is above 1%, add volume-scaled slippage and rerun. If you plan to grow the account, run the test at 5× the current size and see where the edge stops.
Recap
- Latency is the delay from signal to fill; it matters in proportion to bar length.
- Model it as extra slippage at the moments the strategy trades, not as an average.
- Capacity is the size at which your own orders erase the edge; 1% of bar volume is a working threshold.
- Volume-scaled slippage makes the backtest degrade with size, as reality does.
- Double the slippage; if the edge disappears, the strategy is too fast or too big for your setup.
See it drawn
Original diagrams for the ideas on this page. Illustrative, not real market data.