The Difference Between Gross and Net Returns
A precise breakdown of the cost stack separating paper backtest performance from realized account returns in systematic strategies.
A backtest that reports a 38% annualized return without specifying what has been deducted is reporting noise. The gap between gross and net returns is not a footnote — for high-turnover systematic strategies, it routinely consumes more than half of paper performance, and occasionally all of it. Every strategy a serious trader evaluates lives or dies in that gap. This post defines the cost stack precisely and shows how each layer compounds against you.
Gross return is a hypothesis, not a result
Gross return is the return your strategy would have earned in a frictionless market: instant fills at the decision price, no commissions, no borrow fees, no taxes, no slippage. It is useful exactly once — as a sanity check that your signal contains information. After that, it is misleading.
Net return is what arrives in the account. The relationship is straightforward in form but punishing in magnitude:
Each term scales differently with turnover, position size, holding period, and instrument. Treating them as a single fudge factor is the most common mistake in retail backtesting, and it produces strategies that look profitable on paper and bleed in production.
The cost stack, layer by layer
Commissions are the easiest to model and the smallest concern for most modern equity strategies. With zero-commission brokers, the visible per-trade fee is often zero, but regulatory pass-throughs (SEC, FINRA TAF, exchange fees) still apply. For futures, commissions plus exchange fees of $2–$5 per contract per round-turn matter materially for short-holding-period strategies.
Slippage is the difference between the price your backtest assumes and the price you actually transact at. For a market order on a liquid large-cap, this is a few basis points. For a thinly traded small-cap, an options spread, or a size that consumes multiple levels of the book, it can dwarf every other cost combined. Slippage is non-linear in order size and time-varying with volatility — modeling it as a flat 5 bps per side is a convenient lie.
Financing applies whenever you use leverage. Overnight margin loans, futures roll costs, and swap rates on CFDs all accrue daily and are invisible in a price-only backtest. Borrow fees apply to short positions and range from a few basis points annualized for general collateral to over 100% for hard-to-borrow names. Both compound continuously against returns.
Turnover is the multiplier
The single number that determines how much gross-to-net erosion you suffer is annual turnover. If your one-way transaction cost is c (commissions plus slippage) and your annual two-way turnover is T, the cost drag is approximately:
A strategy with 10 bps one-way costs and 20x annual turnover loses 400 bps per year before any other deduction. A strategy with the same edge and 2x turnover loses 40 bps. Two strategies with identical gross Sharpe can have wildly different net Sharpe purely because one trades ten times as often. This is why turnover should appear in every backtest summary alongside return and drawdown.
Taxes are part of the strategy
Most retail backtests ignore taxes entirely on the grounds that they are personal. This is defensible for comparing strategies in the abstract, but not for sizing capital allocation decisions. A high-turnover strategy generating short-term capital gains at a 37% federal marginal rate has a fundamentally different after-tax profile than a low-turnover strategy generating long-term gains at 20%, even with identical pre-tax Sharpe.
The relevant comparison for capital allocation is after-tax compound growth, not pre-tax. For US taxable accounts, the formula approximates as:
where f_st is the fraction of gains realized short-term. A strategy that converts long-term-style edges into short-term realizations through frequent rebalancing can underperform a buy-and-hold benchmark on an after-tax basis even when it outperforms gross.
What to demand from your backtest
Every backtest output should display gross return, total cost deduction broken into commissions, slippage, financing, and borrow, and net return. Turnover should be visible. The slippage model should be specified — a constant, a function of spread, a function of participation rate, or a market impact model — and the assumed parameters reported. If any of these are missing, the result is incomplete.
In Kestrel Signal, the cost stack is configurable per-instrument and per-venue, and the gross/net decomposition is surfaced by default. The platform refuses to display a single headline return number — because a single number is the question that started this whole problem.