Backtesting & verification beginner 13 min read

How to Run a Backtest in MT5 (and Which of the Report's Two Drawdown Numbers to Believe)

Open the Strategy Tester, pick the data and settings that decide the answer, press Start, and read the report without fooling yourself. Includes one run quoted end to end, and the number nobody checks: across 23 published runs the equity drawdown was deeper than the balance drawdown every single time.

Published · Reviewed

You run a backtest in MT5 by opening the Strategy Tester with View > Strategy Tester (or Ctrl+R), choosing the Expert Advisor, the symbol, the timeframe, the date range and the modelling mode, then pressing Start. Five minutes later you have a report. The pressing question is not how to get there — it is which of the numbers on that report mean what you think they mean.

This guide does both halves: the procedure, and the reading. The reading is where the evidence on this page comes from, because we have 23 finished runs on file and their reports disagree with themselves in a way almost nobody checks.

What you get out of a finished run

The artifact is a report with two halves: a result block (trades, profit factor, drawdown, net) and the trade list behind it. Both matter, and only the first one gets quoted.

What you should be able to say at the end is not “it made $3,023”. It is: this rule set, on this symbol and timeframe, over this window, with this tick model, on a $10,000 account, produced this many trades, at this profit factor, having been this far underwater at its worst. Every clause in that sentence is a setting you chose, and changing any of them changes the answer. That is why the settings come before the procedure here.

Setup: the data and settings that decide the answer

Here is one real run we ran and published, quoted so you can hold the inputs and the output side by side. It is the record behind Stillwater, a long-only USD/JPY strategy on the 5-minute chart.

SettingThis runWhy it is set that way
ExpertStillwater (19 inputs)Every input the report was verified to carry — the surface you would have to re-enter to reproduce it
SymbolUSDJPY_DUKAA dedicated tick-history symbol, kept separate from the live-quoted one so the run is repeatable
PeriodM5The chart the rules evaluate on; the trend filter reads M30 from inside the EA
Date range2019-01-01 → 2026-07-017.5 years, long enough to contain more than one regime
ModellingEvery tick based on real ticks (Model 4)Anything that trades inside the day needs the intra-bar path measured, not interpolated
Deposit10,000 USDFixed across every run here, so drawdown percentages stay comparable
LeverageRequested 1:500 — ran at 1:100See below. This one is not what it appears to be
OptimisationDisabledA single pass. Searching parameters is a different job with different traps

Two of those rows deserve more than a table cell.

Data quality is the setting the result rests on. Every other figure in the report is computed on top of the price series the tester used, so the modelling quality figure bounds how much the rest of the report is about your strategy at all. The published record for the run above states 100% history quality over 229 million real ticks, read straight off the tester’s report. A run on interpolated bar data would have produced a different trade set, not merely different fills — the tester assumes a smooth path between prices it knows, and a strategy with a tight stop trades that assumption. If you have not read what tick data your terminal actually holds for the symbol, that is the first thing to check, before the strategy.

The leverage field is a request, not a setting. In all 23 runs on file the tester was asked for 1:500 and the test ran at 1:100 — 0 of 23 times did the requested figure take effect. That is not a guess from reading the field back: it was pinned by measuring the margin a position actually consumed inside the test, 126.39 USD, which matches the leverage-100 calculation and not the leverage-500 one. The practical consequence is that a margin-sensitive design — a grid, a martingale, anything that stacks positions — can pass a backtest at a leverage it will never see, or fail one at a leverage it would not have used. Check the margin figure in the report against your own arithmetic rather than trusting the box you typed in.

Step-by-step: run the test in MT5

  1. Open View > Strategy Tester (Ctrl+R). The panel docks at the bottom of the terminal, with Settings, Inputs, Agents and Journal as its tabs.
  2. On the Settings tab, choose the Expert Advisor, then the Symbol and Period. Pick the symbol you will actually trade — the specification, not just the price, comes from it, and the contract size and margin rules differ between a broker’s variants of the same pair.
  3. Set the date range. Use a custom period with explicit From and To dates rather than “Last month”, so the run is reproducible by someone who reads only your report.
  4. Choose the Modelling mode. Every tick based on real ticks for anything intraday; Every tick generated from M1 bars for slower systems; the coarser modes are for scanning parameters, never for a figure you publish.
  5. Set Deposit, currency and leverage, and leave Optimisation disabled for a first pass. Note the leverage you asked for — you will verify it against the report’s margin figures rather than assume it.
  6. Open the Inputs tab and read every value. This is the tab that silently carries the last run’s edits, and it is why our records verify the inputs against the finished report instead of against the file we thought we loaded. One run in this set carries 362 of them.
  7. Press Start. Leave Visual mode off unless you are debugging entry logic — it is much slower and it tempts you to watch instead of measure.
  8. When it finishes, open the Results, Graph and Backtest tabs, then right-click inside the report and save it. The saved report, not a screenshot of the equity curve, is the thing you will compare against later.
  9. Record the terminal build alongside the result. Our 23 runs span builds 6090 and 6140; two runs of the same strategy under different builds are not automatically the same experiment.
  • Check what history the symbol actually holds
  • Choose the modelling mode to match the holding time
  • Set symbol, period and an explicit date range
  • Read every value on the Inputs tab
  • Run one pass with optimisation disabled
  • Save the report, not a screenshot
  • Read both drawdown lines before the profit line
The order the decisions have to be made in — data before settings, settings before the run

Reading the results: which numbers the report actually means

Take the same run’s output. This is what came back:

ResultValueWhat it has to clear before you continue
Total trades416Enough that the average is describing a sample, not an anecdote
Profit factor1.28Above 1.0 by a margin that survives costs you did not model
Net profit3,023.01 USDOn a 10,000 deposit — a return, not a score
Balance drawdown5.82% (747.57)The worst closed-trade dip
Equity drawdown6.11% (787.60)The worst dip including open positions — the one you would have watched
Win rate60.82%Meaningless alone; read it against the stop and target, 100 and 200 pips here
Test conditions
Experiment IDEXP-BACKTEST-RUNBOOK-001
Run IDstillwater__gate_v2_duka_realticks__2019-01-01_2026-07-01
MT5 build6140
Contract specificationExness-MT5Trial5
Symbol / timeframeUSDJPY_DUKA M5
Period2019-01-01 – 2026-07-01
ModelEvery tick based on real ticks (Model 4)
Deposit10,000 USD
Leverage requested1:500
Leverage effective1:100
Measured2026-08-23
Last verified2026-08-25

Three things in that report are routinely misread.

The two drawdown lines are different questions. Balance drawdown measures the closed-trade equity curve; equity drawdown includes the float on positions that were still open. Across our 23 runs the equity line was deeper every time, and the size of the gap is not predictable from the strategy’s description: the narrowest was 0.04 points (0.67% against 0.71%) and the widest was 11.10 points (14.52% against 25.62%, a ratio of 1.76). A strategy that closes fast has a small gap. One that sits through adverse movement has a large one, and that is precisely the strategy whose drawdown you most need to know before you fund it.

23 of 23Published runs where the equity drawdown was deeper than the balance drawdown
11.10 ptsWidest gap between the two drawdown lines in one run — 14.52% against 25.62%
0 of 23Runs where the leverage the tester was asked for is the leverage the test ran at

MT5 prints each drawdown twice, under two definitions. Maximal drawdown is measured at the moment the amount was largest; Relative is measured at the moment the percentage was largest. They are different moments in the same run, so the two figures are not two views of one event. Of our runs, 16 are recorded at the Maximal definition and 5 at Relative — and the pipeline that writes those records refuses to pair a Maximal balance figure with a Relative equity one, because a page showing both would be comparing two different instants. When you quote a drawdown, name the definition with it.

The report’s own totals are rounded, and its window may not be the window you mean. Recomputed from the published trade list, the same run’s profit factor is 1.2843 rather than the 1.28 in the report — harmless here, and not harmless when you are comparing two candidates three decimal places apart. More importantly, that 416-trade run splits into 404 trades up to the 2026-04-01 publication cutoff and 12 after it. The later 12 returned a profit factor of 2.3317. Neither number is wrong; they answer different questions, and the cutoff is a date a human chose, not something the tester printed. If you are going to divide a run into “the part I fitted on” and “the part I did not”, write down where the line is before you look at the second half. Reading an MT5 backtest report does that division across all 23 runs and shows how far the headline moves.

Pitfalls that quietly invalidate a run

Improve it: change one thing, rerun, compare

The loop is deliberately boring. Change one variable, rerun, and write down both results. Two variables at once and you cannot attribute the difference to either.

The order that gets you the most information per run is:

  1. Vary the window before you vary the strategy. Run 2019–2022 and 2022–2026 separately. If the two halves disagree, the parameters are describing one period, and no amount of tuning fixes that.
  2. Vary the symbol. A rule that only works on one pair is a fact about that pair. Our set includes the same broad approaches across USD/JPY, EUR/GBP, AUD/CAD, NZD/USD, an index and a crypto pair for exactly this reason.
  3. Vary the modelling mode. Rerun the surviving candidate on a coarser model. If the result collapses, the edge lived inside the bar, and the intra-bar path is the least trustworthy part of any simulation.
  4. Only then vary parameters — and treat any setting you had to search for as a weaker claim than one you chose in advance.

Stop iterating when a change stops moving the result outside the noise of the previous runs, or when you notice you are choosing settings because of what the last report said. That second one is the real stopping condition, and it arrives earlier than people expect. The backtest analyzer is useful here because it reads a saved report’s headline figures back out, which makes comparing two runs an act of arithmetic rather than memory.

Next steps: forward test before you go live

A single clean backtest is the first of four steps, not the finish line.

Optimise, if the rule has parameters worth searching. Record the whole search range, not the winning pass — a result you had to look for is evidence about the search, and the range is what tells a reader how hard you looked. Parameter optimisation walks that pass and reads our own eight recorded searches: 116 combinations, and not one setting we were willing to ship.

Then walk forward. Fit on one segment, measure on the next, and repeat. This is the only one of the four steps that directly attacks overfitting, which is why it is worth more than a longer backtest.

Then forward test on a demo account. This is where latency, requotes and real spread widening finally enter the experiment. Run it long enough to watch the strategy lose and recover, because the number you actually need is not the return — it is whether you can sit through the drawdown you measured above.

Then decide. Write down, in advance, the loss that would make you switch it off. A stop you set before funding is a decision; one you set during a drawdown is a reaction.

If you want a worked reference before running your own, every listing in the published EA catalogue carries its complete closed-trade list, both drawdown lines and the run manifest behind them, and how we test states the standard those records are held to. The rest of the backtesting guides go deeper into the optimisation and walk-forward steps this page only points at. Nothing here promises a result: every figure on this page describes runs that have already happened.

Frequently asked questions

How long should the backtest period be?
Long enough that the strategy has traded through conditions it will meet again, which is a question about trade count rather than calendar length. Of the 23 runs published here, 22 start at 2019-01-01 and the median window is 7.5 years — but the sampling rate inside those windows ranges from 14.2 trades a year to 945.1. A seven-year window on a slow strategy can still be a hundred-trade sample, and a hundred trades is a small number to draw a conclusion from. Read the trade count first and the date range second.
Why do my backtest results change when I run the same test again?
Almost always because the price history changed rather than the strategy. The tester downloads and caches history per symbol, so a first run on a window whose early years were not yet stored produces a different tick series from a second run after the gaps are filled. The modelling mode does the same thing more visibly: switching between Every tick based on real ticks and Every tick generated from M1 bars changes which trades trigger at all, not just their fills. Record the mode and the terminal build with the result, or two of your own runs become incomparable.
Does the Strategy Tester include spread, commission and swap?
It applies whatever the price data and the symbol specification carry, which is not the same as you choosing those costs. In the 23 runs published here commission came out at zero on every one, and only one run can state its own average spread — 19.14 points, and only because a recorder EA ran inside the test alongside the strategy. Everything else inherited the spread the history carried without recording it. If a cost matters to your result, measure it in the test rather than assuming the tester modelled it.
Is a good backtest enough to run an EA on a live account?
No. A backtest bounds what a rule set would have done on recorded prices under a simulated fill model. It contains no latency, no requotes, and none of the spread widening that arrives exactly when a signal fires. The order that works is backtest, then optimisation if the rule has parameters worth searching, then a walk-forward check on data the search never saw, then a demo account long enough to watch the strategy lose and recover. Past results describe the past, and nothing on this page is a forecast.