Here's a pattern that has humbled every developer who builds a trading strategy: the backtest shows a smooth, rising equity curve, you deploy it, and the live results are mediocre or negative. The strategy didn't break — your backtest was lying, because it assumed you could trade at the price on the screen, instantly, for free. None of those things are true, and the gap between them and reality is where backtested edges go to die. None of this is investment advice.
The three costs your backtest probably ignores
Real trading has three frictions that a naive backtest leaves out, and they compound.
The spread. Every tradable asset has a bid and an ask, and you buy at the higher ask and sell at the lower bid. The difference is a cost you pay on every round trip, before the price moves at all. On liquid large-cap stocks it's tiny; on small-caps, options, or thin crypto pairs it can be substantial.
Slippage. Your order isn't free to the market — placing it moves the price against you, especially if your size is large relative to available liquidity. You also rarely fill at the exact moment your signal fired; by the time your order reaches the exchange, the price has drifted. Backtests that fill at the closing price of the signal bar are quietly assuming away this entire problem.
Commissions and fees. Even "commission-free" brokers have costs baked in elsewhere, and many assets carry explicit fees. These are the easiest to model and the smallest of the three for most strategies — but they still add up with frequency.
The single biggest source of inflated backtest returns is filling orders at the close of the bar that generated the signal. In reality you can't know the close until the bar is over, and you can't trade at a price that has already passed. Fill at the next bar's open, with costs, and watch how many strategies evaporate.
Why turnover is the multiplier that matters
Transaction costs aren't a fixed tax — they scale with how often you trade. A strategy that rebalances once a month pays these costs twelve times a year; one that trades several times a day pays them hundreds or thousands of times. So the same per-trade cost that's negligible for a low-turnover strategy is fatal for a high-frequency one.
This is why so many high-turnover strategies look brilliant gross and lose money net. Their edge per trade is real but tiny, and costs eat all of it. Before you get excited about a strategy with a high trade count, ask: what's the average profit per trade, and is it comfortably larger than the round-trip cost? If a strategy makes 0.1% per trade but costs 0.15% to execute, no amount of win-rate saves it.
Compute your strategy's average gross profit per trade and compare it to a realistic round-trip cost estimate for your asset and size. If the edge isn't several times the cost, the strategy is fragile — small errors in your cost estimate flip it from winner to loser.
Modeling costs honestly
You don't need a perfect market simulator; you need to stop assuming costs are zero. A reasonable approach for retail backtesting:
Fill at the next bar's open rather than the signal bar's close, so you're not trading on information you couldn't have acted on. Subtract a per-trade cost that combines an estimate of the spread plus slippage for your asset and typical order size — be pessimistic, because optimism here is expensive. Add explicit commissions where they apply. Then re-run, and judge the strategy on the net curve, never the gross one.
The goal isn't precision; it's to stop fooling yourself. A strategy that survives conservative cost assumptions might be real. A strategy that only works at zero cost was never a strategy — it was a measurement of the market's frictions, mistaken for an edge.
Slippage and transaction costs are unglamorous, which is exactly why they're so often ignored — and why ignoring them ruins so many strategies. Model them conservatively from the start, and you'll waste far less time chasing edges that only ever existed in a frictionless simulation.
Originally published at pickuma.com. Subscribe to the RSS or follow @pickuma.bsky.social for new reviews.
Top comments (0)