Transaction Cost Modeling: Spread + Impact

A backtest reporting +14% CAGR with 200% annual turnover is reporting a gross number. After realistic transaction costs — bid-ask spread paid on every fill, market impact when trades exceed easy-to-absorb size — the net number can drop by 200–400 basis points per year. The Cost Diagnostics sub-pill converts the backtest's turnover into an estimated bps drag using configurable spread and impact assumptions.

The decomposition

Total transaction cost has three components:

  1. Half-spread: the bid-ask spread divided by 2, paid on every fill. Always > 0.
  2. Market impact: the price movement caused by your own order. Scales with order size relative to ADV.
  3. Commissions: the broker fee. For retail US equities, effectively zero on most brokers post-2019; for institutional, often a few bps.

FM103 combines half-spread and impact into a single configurable parameter (default 5 bps each, totalling 10 bps round-trip on every trade). Commissions are assumed zero by default since the platform targets retail users.

The annual bps drag formula

Given annual turnover T (where T = 1.0 means the portfolio completely replaces every year, T = 2.0 means twice annually):

dragbps = T · (spreadbps + impactbps)

Defaults: T = 1.0, spread = 5 bps, impact = 5 bps → drag = 10 bps/year. T = 2.0 → 20 bps/year. T = 4.0 (quarterly rebalance with full turnover each time) → 40 bps/year.

What "turnover" means in this context

FM103's definition: fraction of portfolio value that changed names between consecutive rebalance periods, summed across all rebalances and divided by years. A strategy that holds 30 names and replaces 10 of them each quarter has per-rebalance turnover of 33% and annual turnover of 4 · 33% = 133%. The bps formula multiplies this by the per-trade cost.

Spread and impact for different security classes

Security classTypical spreadImpact at 1% of ADV
S&P 500 large-cap1–3 bps2–5 bps
Russell 2000 small-cap5–15 bps10–30 bps
Emerging market large-cap10–30 bps15–50 bps
Micro-cap (under $300M)30–100+ bps50–200+ bps

The default 5/5 bps assumption is conservative for S&P 500 large-cap, realistic for Russell 2000 mid-cap, and optimistic for small-cap. Users should set the spread/impact bps for the actual universe of their strategy.

Implementation Shortfall framework

Almgren & Chriss (1999, 2000) formalised the trade-off: trading too aggressively incurs high impact; trading too slowly exposes the strategy to adverse price drift. The "implementation shortfall" is the gap between the decision-time price and the realised execution price. FM103's cost model is a simplification of this framework — it lumps spread + impact into a single bps number rather than modelling the trade-off curve. For most retail-scale strategies the simplification is fine; for institutional-scale strategies a full Almgren–Chriss model matters.

Reading the drag estimate

The sub-pill reports:

  • Annualised drag bps — the headline.
  • Net CAGR estimate — gross CAGR minus drag, the more honest performance number.
  • Cost-to-edge ratio — drag divided by gross excess return over benchmark. Above 50% means costs are eating most of the alpha.

When the drag estimate is conservative

  • Stops or take-profits mid-period add intra-period trades not captured by the rebalance-to-rebalance turnover count. Real drag is higher.
  • Larger AUM than the modelled scale linearly worsens impact. Doubling AUM doubles impact bps roughly (Huberman & Stanzl 2004).
  • Tax-loss harvesting outside the backtest adds discretionary turnover.

When the drag estimate is pessimistic

  • Disciplined limit-order execution over multiple hours can capture the spread instead of paying it (negative effective spread).
  • Smart-order routing in mid/large-cap names can reduce impact materially below the simple bps assumption.
  • Tax-deferred accounts face no tax drag, so cost-to-edge ratio is correspondingly less harsh.
The most common backtest failure mode is hidden cost

Bailey & López de Prado (2014) and the broader backtesting literature consistently find that the gap between backtest and live performance is largely a cost gap. A backtest with +5% gross excess return and 150% turnover is reporting a number that, after realistic costs, is more like +2% excess. The strategy may still work; the headline just overstates the magnitude.

Further Reading

Foundational papers

  • Almgren, R. & Chriss, N. (1999). Value Under Liquidation. Risk, 12(12), 61–63.
  • Almgren, R. (2003). Optimal Execution with Nonlinear Impact Functions and Trading-Enhanced Risk. Applied Mathematical Finance, 10(1), 1–18.
  • Huberman, G. & Stanzl, W. (2004). Price Manipulation and Quasi-Arbitrage. Econometrica, 72(4), 1247–1275.

Textbook references

  • Kissell, R. & Glantz, M. (2003). Optimal Trading Strategies: Quantitative Approaches for Managing Market Impact and Trading Risk. AMACOM.

Related QuanterLab articles

Try it in QuanterLab

Set the spread + impact bps to match your actual universe. Default 5/5 is realistic for S&P 500 large-cap; small-cap strategies need at least 10/10.

Back to QuanterLab
Report
Loading report...
Article
Loading article...