How Much Do Trading Costs Eat? 387 Backtests Compared
Spreads, commissions and slippage, measured across every strategy we have backtested: how much of the profit before costs they took, how often they turned a profit into a loss, and why the strategies that trade most lose most.
Guide · 387 versions comparedA third of our strategy versions made money before costs and lost it after.
Tests: 54 · Versions: 387 · Lost to costs: 131 · Passed every gate: 3 · New backtests: none
Short answer: a lot. Across 387 versions of 54 strategies we backtested, costs turned 131 (34%) from a profit before costs into a loss, and took a median 87% of the profit before costs of the versions that had one. The more often a strategy traded, the bigger the share.
00The short answer
- Costs decided the verdict for a third of our strategy versions. Of 387 versions in 54 published backtests, 131 (34%) made money before costs and lost money after them. Another 95 (25%) lost before any cost. 161 (42%) stayed positive after costs, but positive is not proven: only 3 passed all six of our gates.
- For a version that made money before costs, costs took a median 87% of it. The share was 47% on ES and NQ futures, 99% on gold and 113% on forex, where the typical version paid more in costs than it earned before them.
- The more a strategy traded, the more costs took. Versions trading fewer than 85 times a year lost a median 46% of their profit before costs; versions trading more than 230 times a year lost 126%, more than all of it.
- A cheaper broker would have flipped some verdicts, not most. At half our costs, 51 of the 131 versions lost to costs would end positive; at double costs, 68 of the 161 positive ones would turn negative. Neither count says a version would pass our tests.
01What we measured, and how
Every backtest on this site reports a result before costs (gross) and after costs (net), with the same cost model for each market. This guide reads those published numbers for all 387 versions of all 54 strategy tests and compares them without converting units: tests in dollars, R, pips and percent are compared only through shares and counts.
- Cost share = the costs a version paid ÷ its profit before costs. 40% means costs took 40% of the profit; above 100% means they took all of it and turned the version into a loss. Only versions with a profit before costs have one (292 of 387).
- Three outcomes: lost before costs (the rules lost money even when trading was free), lost to costs (profit before costs, loss after), positive after costs.
- Costs used, the same in every test of a market: ES futures $30.76 a round trip per contract, NQ $15.76 and GC $25.76 (commission plus one tick of slippage on each fill); spot gold $0.30 an ounce; forex about 1 pip (1.2 on USDJPY); Bitcoin 0.05% on each fill; SPY 0.04% a round trip.
- What is in: every published strategy test and every version in its gate table, round-2 versions included. Guides that re-use other tests (like the gold strategies guide) are not counted again.
The rules of this comparison, the four questions and the checks were written and frozen before any number across the tests was computed (the specification).
02How often costs decided the verdict
| Market | Versions | Lost before costs | Lost to costs | Positive after costs | Share of the profitable-before-costs versions that costs turned into losses |
|---|---|---|---|---|---|
| Index futures (ES, NQ) | 117 | 32 | 27 | 58 | 32% |
| Gold (spot and GC futures) | 97 | 13 | 42 | 42 | 50% |
| Forex | 149 | 46 | 56 | 47 | 54% |
| Bitcoin | 19 | 4 | 6 | 9 | 40% |
| SPY (S&P 500 ETF) | 5 | 0 | 0 | 5 | 0% |
| All | 387 | 95 | 131 | 161 | 45% |
Counted by test instead of by version (each test by what most of its versions did): 14 of the 54 tests were mostly lost to costs, 12 mostly lost before costs, 23 mostly positive after costs, and 5 were tied.
Forex is where costs mattered most: 56 of the 103 forex versions with a profit before costs lost money after a cost of about one pip. On SPY, all 5 versions stayed positive; they traded at most about 15 times a year and paid 0.04% a round trip, so costs took a median 19% of their profit before costs.
03How much of the profit costs took
For the 292 versions that made money before costs, the share their costs took (medians, because the share explodes when the profit before costs is close to zero):
| Market | Versions with a profit before costs | Median cost share | 25th percentile | 75th percentile |
|---|---|---|---|---|
| Index futures (ES, NQ) | 85 | 47% | 21% | 226% |
| Gold (spot and GC futures) | 84 | 99% | 38% | 183% |
| Forex | 103 | 113% | 71% | 263% |
| Bitcoin | 15 | 59% | 14% | 314% |
| SPY (S&P 500 ETF) | 5 | 19% | 1% | 23% |
| All | 292 | 87% | 35% | 228% |
The typical strategy in our tests did not earn its profit before costs by a wide margin: it earned something close to its costs. A quarter of the versions with a profit before costs paid more than 228% of it in costs. The 3 versions that passed all six gates paid less than 10% of their profit before costs.
04The more you trade, the more costs take
The 208 versions with a profit before costs from tests outside the gold guide, split into three equal groups by how often they traded (the gold tests are left out of this question because the idea came from them, so they cannot also confirm it):
| Trades a year | Versions | Median cost share | Lost to costs |
|---|---|---|---|
| 0.3 to 84.6 | 69 | 46% | 19 |
| 84.7 to 230.6 | 70 | 80% | 30 |
| 231.6 to 1819.5 | 69 | 126% | 40 |
The rank correlation between trades a year and cost share is 0.46 (Spearman, 208 versions; in none of 10,000 random shufflings of the cost shares was it as high). With the gold versions included it is 0.54. The reason is arithmetic: each trade pays the full cost, but a short trade has a small expected move to pay it from. Scalping and intraday rules need a much bigger edge per trade than swing rules to keep the same share of it.
This is a description of our sample, not a law: our fast and slow strategies also differ in markets and rules, and the strategies are the ones we chose to test, mostly popular ones.
05Would a cheaper broker change the verdict?
Every cost in these tests is charged per trade, so the result at any other cost level follows exactly from the published numbers: result = profit before costs − k × our costs. Versions positive after costs, at each level:
| Market | No costs | Half our costs | Our costs | 1.5 times | Double |
|---|---|---|---|---|---|
| Index futures (ES, NQ) | 85 | 63 | 58 | 48 | 44 |
| Gold (spot and GC futures) | 84 | 64 | 42 | 28 | 26 |
| Forex | 103 | 70 | 47 | 21 | 11 |
| Bitcoin | 15 | 10 | 9 | 9 | 7 |
| SPY (S&P 500 ETF) | 5 | 5 | 5 | 5 | 5 |
| All markets | 292 | 212 | 161 | 111 | 93 |
Halving costs would turn 51 more versions positive; doubling them would turn 68 negative. Forex is the most sensitive (47 positive at our costs, 11 at double). Being positive after costs is not enough: all but 3 of the 161 versions positive at our costs failed at least one of our six gates. You can put your own broker’s costs into our trading cost calculator.
06Every test, side by side
One row per published test, in order of market and then of how often it traded. Trades a year is the median over the test’s versions; cost share is the median over its versions with a profit before costs (– when none had one).
| Test and market | Tested | Versions | Trades a year | Lost before costs | Lost to costs | Positive after costs | Median cost share |
|---|---|---|---|---|---|---|---|
| VWAP strategies (ES, 5-min) ES futures | 14 Oct | 3 | 1,739 | 2 | 1 | 0 | 339% |
| 9 EMA strategies (NQ) NQ futures | 14 Oct | 3 | 796 | 1 | 1 | 1 | 607% |
| Coppock Curve (1H) ES futures | 8 Oct | 12 | 664 | 7 | 5 | 0 | 352% |
| EMA ribbon 5/8/13 (NQ) NQ futures | 8 Oct | 8 | 655 | 0 | 3 | 5 | 83% |
| Supertrend ES futures | 7 Oct* | 8 | 275 | 0 | 5 | 3 | 176% |
| Initial balance breakout (ES) ES futures | 21 Oct | 3 | 241 | 0 | 1 | 2 | 89% |
| MACD Crossover ES futures | 7 Oct* | 4 | 240 | 0 | 2 | 2 | 741% |
| Initial balance breakout (NQ) NQ futures | 21 Oct | 3 | 236 | 0 | 0 | 3 | 16% |
| Bollinger Band Reversal ES futures | 7 Oct* | 4 | 218 | 0 | 0 | 4 | 41% |
| Opening gap fill (ES) ES futures | 22 Oct | 3 | 207 | 0 | 3 | 0 | 332% |
| Intraday momentum (NQ) NQ futures | 11 Oct | 4 | 199 | 4 | 0 | 0 | – |
| Intraday momentum (ES) ES futures | 11 Oct | 4 | 199 | 4 | 0 | 0 | – |
| Opening range breakout (NQ, 5-minute) NQ futures | 17 Oct | 4 | 194 | 0 | 0 | 4 | 24% |
| EMA 9/21 (1H) ES, NQ and GC futures | 8 Oct | 12 | 192 | 1 | 3 | 8 | 31% |
| First 5-min candle + FVG (NQ, YouTube scalping) NQ futures | 21 Oct | 2 | 183 | 2 | 0 | 0 | – |
| Noise area breakout (NQ) NQ futures | 11 Oct | 6 | 173 | 2 | 1 | 3 | 32% |
| Noise area breakout (ES) ES futures | 11 Oct | 6 | 168 | 2 | 2 | 2 | 175% |
| Donchian Channel Breakout ES futures | 7 Oct* | 4 | 163 | 2 | 1 | 1 | 163% |
| Fibonacci scalping, Google AI (ES) ES futures | 14 Oct | 4 | 116 | 3 | 0 | 1 | 76% |
| The RSI(2) Dip Buyer ES futures | 7 Oct* | 4 | 84 | 0 | 0 | 4 | 46% |
| RSI Divergence ES futures | 7 Oct* | 4 | 65 | 1 | 1 | 2 | 37% |
| Golden Cross (1H) ES futures + XAUUSD spot | 8 Oct | 24 | 27 | 1 | 4 | 19 | 31% |
| Golden Cross (daily) ES futures + XAUUSD spot | 8 Oct | 8 | 0.6 | 0 | 0 | 8 | 0% |
| EMA 9/20 gold (M15, H1) XAUUSD spot | 8 Oct | 24 | 390 | 4 | 12 | 8 | 148% |
| H1 Open Trap (gold, 1-minute) XAUUSD spot | 21 Oct | 4 | 387 | 2 | 2 | 0 | 8022% |
| Engulfing candle (gold, 1-hour) XAUUSD spot | 21 Oct | 4 | 332 | 0 | 4 | 0 | 484% |
| Best time to trade gold (night vs day) XAUUSD spot | 21 Oct | 3 | 251 | 0 | 1 | 2 | 85% |
| Gold Opening-Range Breakout XAUUSD spot | 7 Oct* | 12 | 193 | 0 | 9 | 3 | 163% |
| Noise area breakout (XAU) XAUUSD spot | 11 Oct | 6 | 145 | 1 | 3 | 2 | 101% |
| TTM Squeeze (gold, 1-hour) XAUUSD spot | 14 Oct | 4 | 115 | 0 | 1 | 3 | 53% |
| RSI 30/70 (gold, 5-min and 1-hour) XAUUSD spot | 14 Oct | 8 | 66 | 2 | 4 | 2 | 134% |
| WaveTrend (gold, 1-hour) XAUUSD spot | 16 Oct | 4 | 55 | 3 | 0 | 1 | 16% |
| Turtle Trading (gold, daily) XAUUSD spot | 9 Oct | 4 | 6.7 | 0 | 0 | 4 | 4% |
| Head and shoulders (gold, 15-minute) XAUUSD spot | 17 Oct | 4 | 6.1 | 1 | 0 | 3 | 19% |
| TDI, Traders Dynamic Index (EUR/USD, 4-hour) EURUSD | 22 Oct | 3 | 272 | 0 | 3 | 0 | 266% |
| Parabolic SAR (EUR/USD, 1-hour) EURUSD | 22 Oct | 3 | 267 | 1 | 2 | 0 | 551% |
| London breakout (GBPUSD) GBPUSD spot | 21 Oct | 3 | 232 | 0 | 1 | 2 | 92% |
| Stochastic + RSI + MACD (EUR/USD) EUR/USD spot | 14 Oct | 6 | 153 | 0 | 6 | 0 | 344% |
| Six Strategies on Four Currency Pairs 4 FX majors | 8 Oct | 96 | 131 | 31 | 35 | 30 | 108% |
| Fibonacci 61.8% (EUR/USD 1H) EUR/USD spot | 9 Oct | 2 | 117 | 1 | 1 | 0 | 819% |
| ADX + DI (4 forex majors, 1-hour) EURUSD, GBPUSD, USDJPY, AUDUSD spot | 21 Oct | 8 | 97 | 5 | 1 | 2 | 84% |
| Trading Made Simple, TDI + Heikin Ashi (EUR/USD) EURUSD | 22 Oct | 3 | 96 | 0 | 2 | 1 | 163% |
| Ichimoku Cloud (EUR/USD) EUR/USD spot | 14 Oct | 6 | 35 | 3 | 1 | 2 | 88% |
| Golden Cross (EUR/USD 1H) EUR/USD spot | 8 Oct | 12 | 29 | 3 | 4 | 5 | 92% |
| Inside bar breakout (EURUSD, daily) EURUSD spot | 21 Oct | 3 | 14 | 2 | 0 | 1 | 58% |
| Turtle Trading (EUR/USD, daily) EUR/USD spot | 11 Oct | 4 | 7.4 | 0 | 0 | 4 | 5% |
| Noise area breakout (Bitcoin, 24/7) BTCUSDT | 15 Oct | 4 | 1,031 | 1 | 3 | 0 | 385% |
| Trend pullback (Bitcoin, 15-min) BTCUSDT | 14 Oct | 2 | 889 | 0 | 2 | 0 | 6696% |
| Heikin Ashi (Bitcoin, 4-hour) BTCUSDT | 21 Oct | 3 | 318 | 0 | 1 | 2 | 50% |
| Accumulation/Distribution (Bitcoin, 4-hour) BTCUSDT | 22 Oct | 3 | 247 | 0 | 0 | 3 | 59% |
| Bitcoin CME gap fill BTCUSDT spot | 21 Oct | 3 | 28 | 3 | 0 | 0 | – |
| Turtle Trading (Bitcoin, daily) BTCUSDT spot | 14 Oct | 4 | 9.8 | 0 | 0 | 4 | 2% |
| Accumulation/Distribution (SPY, daily) SPY daily | 22 Oct | 3 | 13 | 0 | 0 | 3 | 23% |
| 200-day moving average (SPY, daily) SPY ETF | 21 Oct | 2 | 2.0 | 0 | 0 | 2 | 1% |
* Tested on 7 October 2026, before the protocol additions of 8 October 2026; gates are shown as each test published them. Tests are listed under the market most of their versions traded. The 1-hour golden cross on gold passed every gate in its run and was changed to Inconclusive after a data check; the two New York noise area versions on NQ passed every gate and are being forward-tested on new data.
07What this comparison does not say
- It is not a sample of all strategies. These are 54 tests of mostly popular rules we chose to test. “A third lost to costs” describes them, not trading in general.
- Positive after costs is not “works”. 161 versions stayed positive; 3 passed all six gates.
- Our costs are one broker’s. Section 05 shows how the counts move with cheaper or dearer trading.
- The tests were run over two weeks as our protocol grew (stricter thresholds for some families, better random controls after 8 October). The gross and net numbers do not depend on that; the gates do.
08What to do with this
- Backtest with costs, and look at the result before costs too. A strategy whose profit before costs is about the size of its costs has no margin for a worse fill.
- Put the cost next to the average trade. If one round trip is half of what an average trade earns before costs, the strategy lives or dies on execution.
- Trade less often unless the edge per trade is large. In our tests, the versions trading hundreds of times a year gave away more than their whole profit before costs.
- Then test the edge itself against the same trades at random times; see how to backtest a trading strategy without fooling yourself.
FAQCommon questions
How much do trading costs affect profits?
In our backtests, a version with a profit before costs gave a median 87% of it to spreads, commissions and slippage; a quarter gave more than 228%. 131 of 387 versions went from a profit to a loss because of costs.
Why do scalping strategies lose to costs?
Each trade pays the full cost, but a short trade has a small expected move to pay it from. In our tests, versions trading fewer than 85 times a year lost a median 46% of their profit before costs to costs; versions trading more than 230 times a year lost 126%.
Do trading costs matter more in forex or futures?
In our tests, costs took a median 113% of the profit before costs on forex (about 1 pip a round trip) against 47% on ES and NQ futures. The strategies differed too, so this describes our tests rather than the markets.
Would a cheaper broker make a losing strategy profitable?
Sometimes, not usually: at half our costs, 51 of the 131 versions that costs turned into losses would end positive. Being positive after costs is also not enough: almost every version that was positive at our costs still failed at least one of our six gates.
How should I include costs in a backtest?
Charge every trade the full round trip (spread or commission plus slippage on each fill), report the result before and after costs, and compare the cost with the average trade. Our trading cost calculator does the arithmetic for your broker.
09Check our arithmetic
cost_spec.md
cost_lib.js · cost_run.js · cost_ref.js · cost_rows.json · cost_summary.json · check results
10Corrections
None since publication.