How to read a backtest report
The report has forty numbers on it and one of them is in a large green font. That one was chosen by whoever built the report. The ones that matter are smaller, further down, and read in a particular order.
A backtest report is a set of estimates, each with an error bar the report does not print, each depending on the others in ways the layout does not show. Reading it top to bottom gives the headline number more weight than it earned. Reading it in the order below asks, at each step, whether the next number is even worth looking at — and stops when the answer is no.
This guide covers the seven things to read, in order, with what each one means, what a reasonable range looks like and why, and the failure that ends the review at that step.
1. Trade count
First because it decides whether anything else on the page is a number. A win rate over 20 trades has an error bar of roughly ±20 points; an expectancy over 20 trades can be positive or negative with equal ease. Check the total, then check the count per market condition — a strategy with 300 trades in a bull market and 12 in a bear market has been tested once. The sample-size guide has the arithmetic; the short version is that a few hundred trades, spread across regimes, is where the other numbers start to mean something.
Stop if: under a few dozen trades in any regime you care about.
2. Expectancy
Average profit per trade after costs, in currency or in R-multiples (profit divided by initial risk). It is the number that decides whether the account rises, and it is what win rate and payoff ratio combine into — the win-rate guide has the formula and the break-even table. A positive expectancy is the minimum; a positive expectancy that survives costs at 1.5× is the requirement.
Stop if: negative, or so close to zero that a modest change in cost assumptions would flip it.
3. Profit factor
Gross profit from winning trades divided by gross loss from losing trades. A profit factor of 1.0 means wins and losses cancel; 2.0 means wins are twice losses. It is expectancy in ratio form, and it has a useful property: it is easy to sanity-check. Very high values — above 3 or 4 on a strategy with many trades — are more often a sign of overfitting or leakage than of genius, because real edges are thin.
What counts as good depends on frequency. A strategy that trades many times a day can be excellent at 1.3, because it compounds often; a strategy that trades monthly needs more per trade to justify the waiting. Judge it against the cost multiplier: a profit factor that drops from 1.6 to 1.0 when costs go to 1.5× was a cost assumption.
Stop if: near or below 1 after costs — or implausibly high.
4. Maximum drawdown, against return
The largest peak-to-trough decline in the equity curve, and how long it took to recover. Read it two ways. First, in absolute terms: would you have kept trading through it? Be honest; most strategies are abandoned inside a drawdown the backtest predicted. Second, against annual return: a strategy that makes 20% a year with a 40% drawdown spends most of its life underwater.
And expect live to be worse. The backtest's drawdown is one draw from a distribution, and the Monte Carlo guide explains why the 95th-percentile reordering — usually substantially deeper — is the number to size around.
Stop if: you would not, truthfully, have sat through the worst stretch at the size you plan to trade.
5. The benchmark
Did the strategy beat doing nothing? For a single instrument, the honest benchmark is buying it at the start of the test and holding to the end. A strategy that returned 60% over a period in which the asset rose 90% took on all the work and risk of trading to underperform a decision that required none. This comparison is missing from an astonishing number of reports, and it is the one that most often ends the review.
Compare drawdown too. A strategy that matched buy-and-hold's return with half its drawdown has done something real. One that matched the return with the same drawdown has done nothing.
Stop if: holding won, or matched with no less risk.
6. The trade distribution
Sort the trades by result and look at the shape. Is profit spread across many trades, or concentrated in a few? Remove the best 5% and recompute expectancy; if it goes to zero, the strategy was three lucky trades and an optimiser that found the settings which caught them. Look at the largest loss, too — if it is many times the average, the strategy has a tail that a win rate cannot describe.
Then read the trades themselves. Any report that lets you inspect individual trades — entry, exit, what the market did in between — lets you check whether the trades look like the strategy you described, or like something else that happened to fit.
Stop if: the best few trades are the whole result.
7. Sharpe and its relatives
Sharpe ratio is return divided by the volatility of return — reward per unit of risk. It is useful for comparing strategies with different volatility, and it is widely quoted, so it needs a place on the list. It comes last for two reasons. It is very sensitive to the sample: a Sharpe over a short backtest is nearly meaningless, and Bailey and López de Prado's deflated Sharpe ratio (2014) exists precisely to discount a Sharpe for short samples and many trials. And it treats upside and downside volatility alike, which is why Sortino (downside only) and Calmar (return over max drawdown) are often more honest for a trader.
Threshold folklore: a Sharpe above 1 is often called good, above 2 very good. Read those against the sample size and the number of strategies you tried before this one, and discount accordingly.
Classifier metrics, if the strategy uses a model
If the signal comes from a machine-learning model, the report will have a second set of numbers — accuracy, precision, recall, F1 — that describe the model's predictions rather than the trades. One of those is a trap.
| Metric | Answers | The catch |
|---|---|---|
| Accuracy | How often was the prediction right? | Meaningless when classes are imbalanced — predicting "no trade" always is 90% accurate if 90% of bars are no-trade |
| Precision | When it said "buy", how often was it right? | The number that matters for a trader; a high-precision, low-recall model trades rarely and well |
| Recall | Of the real opportunities, how many did it catch? | Trading for high recall means taking many bad trades to avoid missing good ones |
| F1 | Balance of precision and recall | Hides which one is doing the work |
| MCC | Correlation between prediction and outcome, −1 to +1 | Robust to imbalance; 0 means no skill regardless of accuracy. The best single number |
Accuracy is the trap. Market labels are almost always imbalanced — most bars are not entries — so a model can score high accuracy by predicting the common class and never trading. Read precision (when it fires, is it right?) and Matthews correlation coefficient (does it have any skill at all, after accounting for imbalance?). An MCC near zero with a flattering accuracy is a model that has learned the base rate and nothing else. The ML models guide covers what those models can and cannot learn.
A reading checklist
- Trade count, total and per regime. Enough?
- Expectancy after costs, and after 1.5× costs. Positive both times?
- Profit factor. Above 1 after costs, and not implausibly high?
- Max drawdown and duration. Survivable at your size, and better than the backtest suggests once you allow for reordering?
- Benchmark. Beat holding, on return or on drawdown?
- Distribution. Still works without the best 5%? Largest loss tolerable? Trades look like the strategy?
- Sharpe / Sortino / Calmar, discounted for sample and trials.
- If a model: precision and MCC, not accuracy.
Then the hardest question, which no metric answers: what does this strategy exploit, in one sentence? If you cannot say, the numbers above describe a coincidence, however good they look. The full backtesting guide starts with that sentence for a reason.
How Wise Apple lays out the report
Wise Apple's report is built in roughly the order above. Metrics lead with N, the MCC-based skill score, precision for long and short signals, and lift over the base rate, computed on out-of-sample windows only. The trade overview shows expectancy, profit, drawdown and the HODL comparison side by side, and the 1–100 Score is capped below the midpoint for any configuration that trails simply holding the asset. Costs appear as their own line. Every trade is inspectable in the journal and in Candle Replay — entry, exit, and every bar between — and the whole report exports to CSV for anything the layout does not show.
Questions traders ask about backtest metrics
What is a good profit factor for a trading strategy?
Above 1 after costs is the minimum, and what counts as good depends on how often the strategy trades — frequent strategies can be excellent at 1.3 while infrequent ones need more per trade. Be suspicious of very high values; a profit factor above 3 or 4 on a strategy with many trades is more often overfitting or leakage than a real edge. Always recheck it at 1.5× costs.
What is a good Sharpe ratio for a backtest?
Folklore says above 1 is good and above 2 is very good, but a Sharpe over a short backtest is nearly meaningless, and it must be discounted for the number of strategies tried before this one — that is what the deflated Sharpe ratio does. Sortino and Calmar are often more honest for a trader because they measure downside rather than all volatility.
What is an acceptable maximum drawdown?
One you would genuinely keep trading through at the size you plan to use — most strategies are abandoned inside a drawdown the backtest predicted. Compare it to annual return (a 20% return with a 40% drawdown spends most of its time underwater) and assume live will be deeper, since the backtest's drawdown is one ordering of the trades out of many.
Why is accuracy a bad metric for a trading model?
Because market labels are imbalanced. If most bars are not entries, a model that never predicts an entry scores high accuracy while having no skill. Read precision (when it fires, how often is it right?) and the Matthews correlation coefficient, which is zero for a model that has only learned the base rate regardless of how accurate it looks.