Explainers

How to Read a Backtest Report: Trade Count, Costs and Drawdown

The headline number is the last thing to trust. Check trade count, cost settings, long/short splits, return-to-drawdown and a forward test first.

· 6 min read

laptop notebook business charts

A backtest report replays a set of rules on past prices.

It shows what would have happened, under the settings someone chose, on data that is already known. Before you trust its headline number, check six things: the trade count, whether costs were switched on, the return set against the worst fall, each side on its own, the result set against simply holding the market, and a forward test.

A backtest report replays past data. It does not forecast

TradingView says its Strategy Report shows how a trading system would have performed on historical data. Blave states the limit plainly: a backtest is not a forecast of returns. It is a set of figures to judge on three axes: return, risk and cost.

A report can describe the past accurately and still flatter it. GT Protocol names four ways a backtest can look better than live results:

  • Overfitting. The rules were tuned to the noise in the test data. GT’s question to ask: was the strategy tuned on the same period it is scored on? AmiBroker’s Report Explorer lists past backtests, so you can set an older run beside a new one and see which setting changed the result.
  • Look-ahead bias. The test used information that was not yet available at the moment of the trade.
  • Survivorship bias. The test covers only symbols that still trade today, so the ones that were delisted drop out.
  • Unmodelled costs. This is the easiest of the four to check yourself. It is covered below.

GT Protocol’s floor: 100 trades or more, across different conditions

Read the trade count before any return figure. GT Protocol suggests at least a triple-digit trade count, meaning 100 trades or more, spread across different market conditions rather than one stretch of them.

Here’s why. Example (made-up round numbers): in a 20-trade test, two unusually large winning trades are 10% of the sample and can carry the total on their own. In a 200-trade test, the same two trades are 1% of the sample.

A short test window causes the same problem. Blave treats a Sharpe ratio above 1.5 on under two years of data as grounds for suspicion. The Sharpe ratio measures return per unit of volatility (how much returns swing up and down). Blave’s reason is the count of data points: a Sharpe of 3.0 over six months rests on fewer than 130 of them, which it calls noise.

A report with costs switched off assumes zero fees and zero slippage

Slippage is the gap between the price a test assumes and the price an order would actually fill at. GT Protocol says that with its fee-and-slippage override switched off, a run models zero friction, meaning no trading costs at all. GT suggests starting from 10 basis points of fees plus 5 of slippage. A basis point is 0.01%, so that adds up to 15 basis points, or 0.15%.

Do the sum with your own settings. Example (made-up round numbers): a $10,000 account puts the full $10,000 into each trade. At 0.15%, each trade costs $15. Over 200 trades, 200 x $15 = $3,000. That is 30% of starting capital, before any gain or loss on price. If the cost is charged on both entry and exit, double it.

The cost row in the table below shows how far fees went in Blave’s four-year example.

Divide return by max drawdown: a big return cannot hide a big fall

Max drawdown is the largest drop in account value from a peak to a later low. Moneycontrol defines the Calmar ratio as annual return divided by the maximum drawdown during the backtest period. AmiBroker’s report carries the same measure as CAR/MaxDD (compound annual return divided by max drawdown) and marks it “Good if greater than 2”.

Example (made-up round numbers): 20% a year with a 10% max drawdown gives 20 ÷ 10 = 2.0. By contrast, 40% a year with a 40% max drawdown gives 40 ÷ 40 = 1.0. The bigger headline return has the weaker ratio.

The sources’ own examples report total return, not annual return, so the ratio has to be converted before it can be held to AmiBroker’s 2. GT gives no test length, so its figure cannot be converted, and GT itself calls a 300% run with a 70% drawdown a strategy you would have turned off during the fall. That 70% drawdown needs a gain of about 233% just to get back to the peak (1 ÷ 0.30 = 3.33). Blave’s fee line puts its run at about four years, so its total can be turned into a yearly rate:

Source example Figures the source reports Arithmetic
GT Protocol 300% return, 70% drawdown 300 ÷ 70 ≈ 4.3 on total return; not comparable to AmiBroker’s 2, no test length given
Blave strategy +145.8% return, −42.6% max drawdown, about four years 2.458^(1/4) ≈ 1.252, so about 25.2% a year; 25.2 ÷ 42.6 ≈ 0.59, below AmiBroker’s 2
Blave buy-and-hold +68.2% return 145.8 − 68.2 = 77.6 points above holding
Blave costs 22% of capital paid in fees over four years; Omega “only 1.04” 22 ÷ 4 = 5.5% of capital a year on average

These results are based on simulated or hypothetical performance results that have certain inherent limitations. Unlike the results shown in an actual performance record, these results do not represent actual trading. Also, because these trades have not actually been executed, these results may have under-or over-compensated for the impact, if any, of certain market factors, such as lack of liquidity. Simulated or hypothetical trading programs in general are also subject to the fact that they are designed with the benefit of hindsight. No representation is being made that any account will or is likely to achieve profits or losses similar to these being shown.

Read long and short trades separately: one side can carry the total

AmiBroker’s report gives separate statistics for all, long and short trades. TradingView’s Performance analysis has a Breakdown tab that splits gains and losses by side.

A combined figure can hide a side that loses money. Example (made-up round numbers): a report has 120 trades, 90 long and 30 short. The total clears GT’s 100-trade floor, but the short side does not. Holding each side to that floor is this article’s suggestion, not GT’s, and it is the stricter reading. If you would only ever trade one side, that side’s sample is the one that counts.

Set the result against holding the market: Blave’s run beat it by 77.6 points

A return means little until you know what doing nothing would have made. Blave’s example strategy returned +145.8% against +68.2% for buy-and-hold over the same period, 77.6 points ahead, yet its return-to-drawdown works out near 0.59 in the table above. TradingView builds the comparison in: a Buy&hold option adds a buy-and-hold line to the chart, and the Benchmarking tab compares the strategy’s gains with buy-and-hold over time.

A forward test on live prices is the next check after the backtest

BacktestMarket recommends a forward test in a live, real-time market after the backtest, to check that the backtest was not overfit, meaning tuned so closely to past data that it fails on new data. The forward test runs on prices that came after the rules were written.

Judge it on the same measures as the backtest: trade count, cost per trade, and return set against max drawdown. If it falls well short, GT’s four suspects are where to look: overfitting, look-ahead, survivorship and unmodelled costs.

Checklist: six checks before trusting any backtest report

  1. 100 trades or more, across conditions, per GT Protocol; distrust a Sharpe above 1.5 on under two years (Blave).
  2. Costs on: at least 10 + 5 basis points (GT Protocol); cost per trade x trades ÷ starting capital.
  3. Annual return ÷ max drawdown (Moneycontrol), held to AmiBroker’s “greater than 2” (AmiBroker); convert total return to yearly first.
  4. Each side on its own: AmiBroker’s per-side statistics or TradingView’s Breakdown tab (TradingView), each side held to the trade-count floor.
  5. Against buy-and-hold: TradingView’s Buy&hold line or Benchmarking tab, as in Blave’s +145.8% vs +68.2% (Blave).
  6. A forward test on live prices (BacktestMarket), judged on the same measures.

The weak point of any backtest report is that every number in it was chosen after the prices were known. If a report fails one of these checks, fix that check first: switch costs on, lengthen the test, split the sides, or run the forward test. Until then, read it as a description of the past.

Sources

  1. https://www.tradingview.com/support/solutions/43000764138-strategy-tester-overview/
  2. https://www.gt-protocol.io/learn/how-to-read-a-backtest-report/
  3. https://www.moneycontrol.com/news/business/markets/mc-explainer-backtesting-and-how-to-read-a-backtest-report-11943091.html
  4. https://www.amibroker.com/guide/h_report.html
  5. https://blave.org/docs/en/backtest_metrics
  6. https://www.backtestmarket.com/en/blog/post/reading-a-backtest-report
Contents