For educational purposes only. This content does not constitute financial advice or a recommendation to buy or sell any security.
← Blog
Practice17 May 2026 · 6 min read

Transaction Cost Modelling for Systematic Strategies

A rigorous decomposition of trading costs, including spread, square-root impact, regime-dependent liquidity, and delay cost, with calibration guidance.

Most backtests die at the cost model. A strategy showing a 1.8 Sharpe on mid-frequency equity rotation routinely collapses to 0.4 once realistic frictions are applied, and the gap is almost never bridged by execution skill. The cost model is where the simulator stops lying to you, and getting it right matters more than the alpha specification itself for any strategy with turnover above roughly 100% annually.

The standard mistake is to model costs as a flat basis-point haircut on notional. That assumption is wrong in three independent ways: it ignores spread asymmetry across the cap spectrum, it ignores impact non-linearity in size, and it ignores the regime-dependence of liquidity itself. Each of these errors is biased in the same direction — toward optimism.

Decomposing the cost stack

A defensible transaction cost model has at least four components, each measured separately and combined at fill time. Conflating them produces a number that fits historical averages but fails out-of-sample whenever the mix of trades shifts.

TC = half_spread + commission + impact(size, ADV) + delay_cost

Half-spread is the unavoidable cost of crossing the book, measured per side. Commission is the explicit broker fee plus exchange and regulatory pass-throughs. Impact is the price concession demanded by liquidity providers as a function of participation rate. Delay cost — often forgotten — is the drift between the signal timestamp and the actual fill, and it is signed: it hurts you when your signal is informative and the market moves before you.

The square-root impact law

Empirical work from Almgren, Tóth, Bouchaud and others converges on a square-root relationship between trade size and price impact, scaled by daily volatility. The functional form is robust across asset classes, time periods, and venues, which is unusual in market microstructure.

impact_bps = Y * sigma_daily * sqrt(Q / ADV) * 10000

Here Q is the order size in shares, ADV is the 20-day average daily volume, sigma_daily is the daily return volatility, and Y is a dimensionless constant typically in the range 0.5 to 1.0 for liquid equities. The square root means doubling your trade size increases impact by only ~41%, but it also means that halving your size only reduces impact by ~29% — you cannot cheaply trade your way out of an oversized position.

If your backtest holds positions sized at more than 1% of ADV and your cost model is linear in size, your reported Sharpe is inflated by a factor that grows with turnover. For a strategy with daily turnover and 2% ADV participation, the correction can exceed 50% of gross returns.

Spread modelling under regime shifts

Quoted spreads in liquid US equities average 2-4 bps round-trip but expand by 3-5x during volatility spikes. A cost model fit on 2017 data will systematically understate trading costs in 2020, 2022, and any future stress regime. The fix is to model spread as a function of contemporaneous volatility rather than as a constant.

half_spread_bps = a + b * (sigma_t / sigma_median)

The coefficients a and b are estimated from intraday TAQ data or from your own execution logs if you have enough fills. For small-cap equities, b dominates a and the spread can multiply by an order of magnitude in stress periods. Strategies that look profitable in calm regimes and unprofitable in stress regimes are often not strategies at all — they are short volatility positions in disguise, and the cost model reveals it.

Delay cost and the timing assumption

Most backtests fill at the close of the bar that generated the signal. This is a free lunch the live market does not offer. Realistic execution introduces a delay of anywhere from one bar (for end-of-day rebalancing executed at the next open) to several minutes (for intraday signals routed through a TWAP). Over that delay, informed signals decay and the market moves against you.

The empirical signature is straightforward: compute the correlation between your signal and the return over the delay window. If that correlation is positive — as it must be for the signal to be useful — then delaying execution costs you a deterministic fraction of the predicted return. A signal with a 5 bps one-day edge that executes on the next open typically loses 1-2 bps to overnight drift alone.

The cleanest sanity check on any cost model: simulate with and without costs, then plot the difference against turnover. The slope should match your modelled per-trade cost to within 10%. If it doesn't, your accounting is broken somewhere — usually in how partial fills or position-flip trades are counted.

Calibration against live fills

The only authoritative cost data is your own execution log. Public datasets give you spread snapshots and consolidated tape, but they do not show what you actually paid. Once you have a few hundred fills, fit your model parameters — Y, a, b, delay coefficients — against realized slippage versus arrival price. Kestrel Signal exposes the cost model as a configurable component precisely so that this calibration loop is mechanical: the same parameters used in backtest are the ones audited against live execution, and divergence between the two is the first signal that something in the market or in your routing has changed.

A backtest with a calibrated cost model is not a more pessimistic backtest. It is a more honest one, and the strategies that survive honest costing are the only ones worth allocating capital to.

More in Practice
A checklist for evaluating whether a backtest result is worth trusting8 min readThe Difference Between Gross and Net Returns6 min readReading an Equity Curve: What Smooth Actually Means6 min read
← All postsTry it on a real backtest