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:
- Half-spread: the bid-ask spread divided by 2, paid on every fill. Always > 0.
- Market impact: the price movement caused by your own order. Scales with order size relative to ADV.
- 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):
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 class | Typical spread | Impact at 1% of ADV |
|---|---|---|
| S&P 500 large-cap | 1–3 bps | 2–5 bps |
| Russell 2000 small-cap | 5–15 bps | 10–30 bps |
| Emerging market large-cap | 10–30 bps | 15–50 bps |
| Micro-cap (under $300M) | 30–100+ bps | 50–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.
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.