The Hidden Cost of Crypto Strategies: I Backtested 5 Popular Systems on 80 Assets With Real Fees
Every backtest you've ever seen is too optimistic. Not because the maths is wrong, but because of what it quietly leaves out: the fees you pay on both sides of every trade, the slippage on every fill, and the brutal reality that when price gaps through your stop, you don't get filled at your stop.
I got tired of guessing how much that mattered. So I measured it.
I ran 5 textbook strategies across 80 crypto perpetuals, on 4-hour candles over roughly two years, with every cost modelled honestly. The results were worse than I expected — and more interesting than I expected.
Four of the five lose money on the median asset. The one that doesn't survives mostly because it barely trades.
The method
I've stated this in full so you can pick it apart — if the method is weak, the conclusions are worthless.
- Data: Bybit USDT linear perpetuals, 4-hour candles, ~2 years. Top 100 by 24h turnover; 80 had sufficient history.
- Costs: 0.055% fee per side + 0.1% slippage per side ≈ 0.31% per round trip.
- No lookahead: the signal is computed at bar i's close and executed at bar i+1's open. You cannot trade on a candle that hasn't finished.
- Pessimistic stop fills: if a bar gaps through the stop, you fill at the worse of {stop price, bar open}, then 2× slippage on top. This is the single biggest source of backtest lies, and almost nobody models it.
- Sizing: 1% risk per trade.
- Two exit configs: Active (2% stop, 4% take-profit, 60-bar max hold) and Run (3% stop, no take-profit, 120-bar max hold).
The results
Median across 80 assets, net after costs (Run config):
| Strategy | Median Net | Mean Net | % assets profitable | Median trades | Median Gross | Cost drag |
|---|---|---|---|---|---|---|
| EMA 20/100 cross | −7.2% | +1.8% | 32% | 52 | −6.0% | 1.2% |
| RSI-14 revert | −13.6% | −13.7% | 20% | 118 | −11.1% | 2.5% |
| Donchian breakout 20 | −26.6% | −23.5% | 19% | 212 | −20.8% | 5.8% |
| MACD 12/26/9 | −27.4% | −21.3% | 16% | 362 | −16.7% | 10.7% |
| Bollinger mean-reversion | −64.9% | −57.2% | 4% | 351 | −55.9% | 9.0% |
For context, buy & hold's median over the same window was −60.2%. This was a savage period for altcoins — which matters enormously, and I'll come back to it.
Finding 1: your trade count matters more than your signal
Look at cost drag against trade count:
- 52 trades → 1.2% drag
- 118 trades → 2.5%
- 212 trades → 5.8%
- 351 trades → 9.0%
- 362 trades → 10.7%
Almost perfectly linear. Obvious in hindsight — but the implication isn't obvious at all: trade frequency determines your net outcome more than signal quality does.
Here's the proof. MACD's gross return (−16.7%) is better than Breakout's (−20.8%). MACD is the better raw signal. But MACD ends up worse net (−27.4% vs −26.6%), purely because it trades 70% more often.
The better signal lost to the cheaper one. Every trade is a tax, and the tax compounds.
Finding 2: capping your winners hurt every single strategy
Adding a 4% take-profit (the Active config) made all five strategies worse:
| Strategy | With take-profit | Letting winners run |
|---|---|---|
| EMA 20/100 | −8.7% | −7.2% |
| RSI-14 | −24.5% | −13.6% |
| MACD | −47.4% | −27.4% |
| Donchian breakout | −69.4% | −26.6% |
| Bollinger MR | −83.9% | −64.9% |
Two effects compound: you amputate the fat tail and you trade more (Breakout: 590 trades → 212). Breakout improved by 43 percentage points simply by deleting the take-profit.
"Take profits early" is some of the most common advice in trading. On this data, it's expensive advice.
Finding 3: the median lies about trend-following
EMA's median is −7.2%, but its mean is +1.8%. A minority of assets trended hard and paid for everything else:
- XLM +113%
- BONK +72%
- PENGU +66%
- ENA +52%
Now look at buy & hold on those same coins, over that same window: BONK −84%, PENGU −83%, ENA −91%.
The strategy made money shorting the collapse. The coins went to nothing; the trend-follower rode them down. Win rate was 14–20% — it was wrong most of the time and profitable anyway.
If you judge trend-following on win rate or the median outcome, you'll bin a working system. The edge lives entirely in the tail.
Finding 4: one window will fool you
This is the one that changed my mind about my own results.
I re-ran EMA 20/100 across separate market regimes, using the 8 majors with history back to 2021:
| Regime | Buy & hold | EMA 20/100 net |
|---|---|---|
| 2021 bull + alt season | +114% | −4% |
| 2021–22 bear (the crash) | −75% | −0% (beat buy & hold on 8/8) |
| 2023 recovery | +117% | +10% |
| 2024–25 | −17% | −3% |
It is flat in every regime. It never blows up — but it never compounds either. It beats holding decisively in bear markets and lags badly in bulls.
Which means my headline result was really saying: "the last two years were a bear market, which happens to be EMA's home turf."
Had I only run the recent window — the exact thing most people do — I'd have concluded I'd found an edge. I'd have been wrong. This is the trap, and I nearly walked into it while actively trying to avoid it.
Where this could be wrong
- One 2-year window and one macro cycle — crypto perps don't have much more history than this.
- Top-100-by-current-turnover carries survivorship and recent-pump bias.
- A flat 0.31% cost is applied to every asset; illiquid alts would fare worse in reality.
- Default parameters, no optimisation — deliberate, because optimising here would just overfit.
- Perps only; funding isn't modelled, which would make results slightly worse still.
What to take away
- Count your trades before you trust your returns. Frequency is the tax rate on your edge.
- Test across regimes, not one window. A two-year backtest tells you about two years.
- Judge trend-following by the tail, not the median or the win rate.
- Most of this stuff doesn't work after costs. That isn't a depressing conclusion — it's the single most useful thing you can know before risking money.
The uncomfortable truth is that the gap between a backtest and reality isn't a rounding error. On the worst strategy here it was 9 percentage points; on the most-traded one, 10.7. That gap is where retail accounts go to die — and almost no backtesting tool shows it to you.
I built BacktestBench because I wanted to run exactly this kind of test on my own strategies and couldn't find a tool that modelled costs honestly. It shows gross vs net and the cost drag between them on every run. If that's useful to you, it's at backtestbench.com — and if you just want to steal the methodology above and build your own, please do. The point is that somebody shows you the real number.