Skip to content
GetProfitable
Search

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.

Slippage on a market orderA buy order clears four price levels, so the average price paid is worse than the price first quoted.Buy 1,000 shares at marketpricesell orders resting (bar length = size)20.04300 shares20.03200 shares20.01200 shares20.00300 sharesnothing resting at 20.02order sweeps up the bookaverage fill 20.02SLIPPAGE0.02 a share$20.00 in totalintended 20.00Each level fills at its own price; the average is what you really paid.
Slippage on a market order. You click at 20.00, but only 300 shares are resting there, so the rest of the order fills at 20.01, 20.03 and 20.04. The average price paid is 20.02, and that two-cent gap is slippage.
The spread of outcomes behind an expectancyA histogram of forty trades: a tall block of small losses on the left, a low spread of larger wins on the right, and a line marking the average outcome.NUMBER OF TRADES051024 LOSSES, AVG −$20016 WINS, AVG +$600EXPECTANCY +$120−$400−$200$0+$200+$400+$600+$800PROFIT OR LOSS PER TRADEexpectancy = (40% × $600) − (60% × $200) = +$120 per trade
Expectancy: the average trade. Forty trades sorted by outcome: 24 small losses and 16 larger wins. Weighting each side by how often it happens gives the average result per trade, marked here by the dashed line at +$120.
Breakout and retestPrice stalls under one level, pushes above it, comes back to touch it from above, then continues higher.pricetimeold resistancenow support1price keeps stalling2breaks above3pulls back and retests it4and carries on
Breakout and retest. Price stalls under the same level several times, pushes above it, then drops back to touch it from above before carrying on. That touch is the retest, where the old ceiling is tried as a floor. A break that falls straight back under it is a false breakout.