Algorithmic Execution Risk in Systematic Trading
Slippage is the standard explanation for the gap between backtested returns and live performance. Treating it as the explanation leads to the wrong fixes because slippage is a symptom of deeper structural problems.
Here’s how the standard story unfolds. You build a strategy, backtest it assuming you can execute at the close or at the midpoint, add some basis points for transaction costs, and call it realistic. When live performance disappoints, you increase the slippage assumption in the backtest, re-optimize, and repeat. This approach calibrates a fudge factor until the backtest matches whatever you observed rather than modeling what actually happens during execution.
Backtests assume you can convert a signal into a position instantaneously at a known price. Live trading converts that signal into a sequence of decisions about order type, timing, venue, and size, each made under uncertainty about what price you’ll actually get.
Consider what happens when your strategy generates a buy signal at 10:02:34. In simulation, an immediate position gets recorded. Live trading presents a choice between crossing the spread to guarantee the fill or posting at the bid and waiting. If you wait, your queue position matters, your fill probability evolves as the book changes, and the price may move against you before you’re filled. Most systematic traders never model this decision. They treat execution as a black box that converts signals into positions at some average cost, often estimated from historical data or from broker TCA reports that average across heterogeneous conditions. Applying a single slippage number flattens execution into a parameter and removes exactly the dimensions where it fails.
The Control Problem
Execution has structure that most models ignore. Almgren and Chriss formalized part of it two decades ago as a tradeoff between market impact and timing risk. Executing too fast moves the price against you. Executing too slowly exposes you to adverse price movement while you wait. Optimal trajectory depends on your urgency, the stock’s volatility, its liquidity, and how your trades affect prices. These parameters shift intraday, across regimes, and in response to how crowded the trade is.
Even this framework understates the problem because it assumes you know you’ll get filled.
For limit orders, that assumption fails. Your fill is conditional on price moving toward you, which is precisely when you’d rather not have bought. This adverse selection is baked into limit order markets. The orders that fill are disproportionately the ones you wish hadn’t. A backtest assuming limit orders fill whenever price touches your level will show different results than live trading. You submit a bid, get a partial fill for 300 shares just before the market reverses and runs up 50 cents. Now you’re long a stub that’s already underwater.
Queue position compounds this. In most venues, price-time priority determines which orders fill first at a given price level. Your limit order joins a queue that may have thousands of shares ahead of it. On large-tick names, queue position can be worth as much as the spread itself.
There’s no clean way to fix this in simulation. You can assume some fill probability conditional on price reaching your limit, or model queue position decay as a function of time and volume. Every such model requires parameters estimated from historical data that may not reflect current conditions, and the uncertainty compounds across hundreds of orders per day.
Market impact introduces its own asymmetry. Buying pushes price up and selling pushes it down, but the less obvious problem is correlation with other flows. If you’re trading any variant of momentum or mean-reversion on common signals, your impact is amplified. You’re trading against everyone else with the same idea, and collective impact exceeds what any individual would experience in isolation.
Crowded Trades
Crowdedness shows up as execution that’s worse than historical averages precisely when your strategy is working.
You find a signal that’s strong. Others find it too. Everyone tries to execute at the same time, and impact exceeds what your backtest assumed because calibration happened on average conditions rather than conditions when the signal fires. What makes this pernicious is the correlation with apparent success. Strategies with stable signals often underperform their backtests by a persistent margin that cannot be explained by parameter drift or regime change. The gap shows up between signal formation and position realization rather than in the signal itself.
Adverse selection on limit orders bleeds alpha. So does queue position disadvantage, market impact from correlated flows, and partial fills that leave you exposed to reversals. None of these show up as a line item. They show up as alpha that evaporates between signal generation and position establishment.
Tracking outcomes trade by trade allows you to see how adverse selection, queue position, and impact cumulatively erode the alpha your backtest promised.
Fixing this requires modeling execution as its own optimization problem nested inside the portfolio problem. You need a market impact model calibrated to the specific names you trade, updated as conditions change, along with tracking of realized fill rates and adverse selection costs by name, by time of day, by volatility regime. Some traders route everything to market orders to avoid the complexity. This guarantees execution, pays the spread on every trade, and realizes whatever impact the order causes. Strategies with sufficient edge can absorb these costs. Marginal strategies often find that spread plus impact consumes the entire alpha.
Every order you place is a decision with uncertain outcomes, conditional dependencies, and strategic interaction with other market participants. Flattening execution into a basis point assumption removes the structure that determines whether your strategy actually works.
A backtest that only survives at 10 basis points of assumed slippage is being supported by the execution assumption itself. Once you model execution correctly, the alpha often disappears.
Signal Decay and Implementation Shortfall
Understanding the sequence from signal generation to position establishment is essential, because even perfect timing assumptions in a backtest miss the decay caused by execution friction, yet implementation shortfall measurement has its own problems.
Standard decomposition splits costs into timing delay, market impact, and opportunity cost from unfilled orders. TCA reports love this breakdown, but it misleads strategy evaluation because it treats the execution trajectory as given. In practice, trajectory is endogenous to your beliefs about impact and signal urgency. A TWAP minimizes impact per unit while maximizing timing risk. An aggressive front-loaded execution minimizes timing risk while paying more impact. Optimal choice depends on conviction in the signal and how fast it decays.
Most backtests don’t model signal decay at all. They assume signal value at generation persists until position establishment. For slow signals measured over weeks, this is reasonable. For faster signals, the assumption breaks down. If your alpha decays with a half-life of an hour, delay between signal and execution determines whether you’re capturing alpha or trading noise.
Here’s where priorities often go wrong. Traders routinely obsess over microseconds of latency while the signal they’re executing has already decayed by minutes. If fill quality is degrading because you’re back of the queue on a hundred stocks, shaving microseconds off your market data feed changes nothing meaningful.
Measuring the Leak
Venue fragmentation adds another layer. A single stock trades on multiple exchanges, dark pools, and internalizers, each with its own queue dynamics, fee structures, and information leakage profile. Logging and analyzing each order empirically lets you quantify exactly how the alpha predicted in your backtest evaporates in practice.
Smart order routers make decisions that affect fill probability and execution quality, and these decisions aren’t in your backtest because router behavior depends on real-time order book state that historical data doesn’t capture. What actually helps is treating execution as empirical rather than assumed.
This means logging every order with enough context to reconstruct what happened. You want the book state at submission, the price path while you waited, the fill or lack thereof, and the eventual mark-to-market on the position. Aggregate this data over weeks and patterns emerge. Fills might deteriorate on high-volatility days, or certain names might consistently underperform your arrival price benchmark. You might find that adverse selection rates climb when you’re trading with momentum. This kind of analysis is tedious, unsexy, and produces neither research papers nor impressive backtests. It’s also where actual alpha leakage happens, trade by trade, fill by fill.
Slippage shows the result of execution failure, but it doesn’t explain the cause. That cause lies in queue position, fill probability, adverse selection, impact functions, signal decay, and venue routing, and modeling these components is how you model execution itself.
However, assuming a fixed basis point cost relies on hope rather than insight, and in competitive markets, hope is not a strategy. Your cost model is likely missing the same structural flaws, which means the risks you observe may understate the risks you actually face.
This content is for educational purposes only.
Spread the word:
