Reading the backtest report
Every number, what it means and how it is worked out.
Everything in a report is derived from the trades the engine actually filled and the equity at each bar close, so any number can be traced back to a trade. Costs are never added or assumed: profit is the price difference (E12).
How it went
| Number | What it means |
|---|---|
| Trades | How many trades completed. Trades still open when the test ends are closed at the last bar's close and marked “open at end” (E24). |
| Net profit | Gross profit minus gross loss. |
| Win rate | Winning trades as a share of all trades. |
| Profit factor | Gross profit ÷ gross loss. What it made for every unit it lost. |
| Expectancy | The average result per trade, in money and in R. In R it is the mean of every trade's R outcome. |
| Payoff | Average win ÷ average loss. |
What it cost
| Number | What it means |
|---|---|
| Max drawdown | The deepest fall from a high in equity, in money and percent, with how many bars it stayed below that high. |
| Recovery factor | Net profit ÷ max drawdown. |
| Sharpe | Mean return ÷ the deviation of returns, annualised. |
| Sortino | The same, counting only downside deviation. |
| SQN | √(number of trades) × mean R ÷ deviation of R. How steady the R outcomes were. |
| Time in market | The share of bars with a trade open. |
| CAGR, Calmar, Ulcer index | Also calculated by the engine: compound annual growth, growth ÷ max drawdown percent, and the root mean square of drawdown percentages. |
How the trades behaved
| Number | What it means |
|---|---|
| Bars per trade | Average length of a trade. |
| Average run-up | The best each trade saw while it was open (MFE). |
| Average drawdown in trade | The worst each trade saw while it was open (MAE). |
| Streaks, largest win and loss | The longest run of wins and of losses, and the single biggest of each. |
| R distribution | How many trades ended in each band of R. |
Breakdowns
By the rule that opened the trade, by how the trade ended, by the confirmations that agreed, by side, by tag and by month. Name your rules with as and tag your orders, and these tables become much more useful.
Labels worth noticing
- Above requested risk: the minimum lot carried more risk than the order asked for (E11).
- Approximate intrabar: a tick-evaluated run had no finer data for some bars, which are listed (E2).
- Unfilled: a market order created on the last bar of the test (E1).
Read this before trusting any number. Backtests are hypothetical. They use historical data and contain no spread, commission, fees, swaps or slippage, so live results will differ. Past performance does not guarantee future results.