What backtesting is
Backtesting means applying a fixed set of trading rules to historical price data to see how those rules would have performed. Forward-testing means applying the same rules to new, live market data, on demo or with small real size, without changing them.
Traders backtest for three reasons:
- To find out if an idea has any edge before risking money on it.
- To learn realistic expectations: how often it loses, how long losing streaks last and how deep drawdowns get.
- To build confidence in the rules, which makes them easier to follow under pressure. See trading psychology.
A backtest is evidence, not proof. Its job is to filter out bad ideas cheaply and give you a baseline to compare live results against.
A backtest can only test rules. If your strategy is “buy at good order blocks”, there is nothing to test yet. The first and hardest step is writing rules precise enough that two people would take the same trades.
How it behaves on gold (XAUUSD)
Gold has specific features that make honest testing harder:
- No single official spot price feed. Spot gold (XAUUSD) is traded over the counter. Each broker and data vendor builds its own feed. Highs, lows and wicks can differ by a few dimes to more than a dollar between providers, especially during fast moves. A stop that was “hit” on one feed may not be hit on another.
- Variable spreads. Spreads are usually tightest during London and New York hours and widen around the daily break (17:00 to 18:00 New York time), during the Asian session and around major news. Many testers assume a fixed spread, which flatters scalping strategies most.
- News spikes and slippage. US data at 8:30 New York time and FOMC decisions at 14:00 New York time produce moves where fills in real life can be much worse than a backtest assumes.
- Regime changes. Gold has gone through very different conditions: quiet ranges, strong trends, high-volatility periods. A strategy tested only in one regime may fail in another. Test across several.
- Changing price level. With gold trading around 4,000 to 4,250 in our hypothetical examples, a $5 stop is a much smaller percentage move than it was when gold was far lower. Fixed-dollar rules from years ago may not translate. Volatility-based rules (such as ATR 14 multiples) often age better.
- Sunday opens and weekend gaps. Gold reopens Sunday at 18:00 New York time and can gap. Swing strategies need to model this.
How to build a testable strategy
Write your rules in this structure. If any line is vague, fix it before testing.
| Component | Vague version | Testable version |
|---|---|---|
| Market and timeframe | “Gold, intraday” | XAUUSD, M15 execution, H1 bias |
| Session filter | “Good times” | Entries only 02:00 to 05:00 and 07:00 to 10:00 New York time |
| Bias rule | “Uptrend” | H1 close above EMA 50 and EMA 50 above EMA 200 |
| Setup | “Pullback to support” | Price touches EMA 21 on M15 after making a new H1 high |
| Trigger | “Confirmation” | M15 bullish candle closes above prior candle high |
| Entry | “Around there” | Buy stop 0.20 above the trigger candle high |
| Stop | “Below structure” | Below trigger candle low minus 0.5 × ATR 14 (M15) |
| Target | “Next level” | Fixed 2R, or prior H1 swing high if closer than 1.5R then skip |
| Management | “Trail it” | None; target or stop only |
| News filter | “Avoid news” | No entries 15 minutes before or after high-impact US releases |
| Risk | “Small” | 0.5% of account per trade |
Manual vs automated testing
| Aspect | Manual (bar replay) | Automated (coded) |
|---|---|---|
| Best for | Discretionary methods: SMC, price action, order blocks | Indicator and rule-based systems |
| Speed | Slow: hours for 100 trades | Fast: years of data in minutes |
| Consistency | Prone to bias and drift | Perfectly consistent |
| Skill building | Trains pattern recognition | Trains rule design |
| Main risks | Hindsight, peeking ahead, selective logging | Overfitting, bad cost assumptions, coding bugs |
| Tools | TradingView replay, MT4/MT5 visual tester, spreadsheet | MT5 Strategy Tester, TradingView Pine strategies, Python |
Many traders combine both. They code the parts that can be coded (session filter, trend filter) and judge the rest manually.
The metrics that matter
Track these for every test. Use R-multiples: a trade’s result divided by its initial risk. A trade risking $50 that makes $100 is +2R.
| Metric | Formula | What it tells you |
|---|---|---|
| Number of trades | Count | How much to trust everything else |
| Win rate | Wins ÷ total trades | How often you win; meaningless alone |
| Average win (R) | Sum of winning R ÷ number of wins | Size of typical winner |
| Average loss (R) | Sum of losing R ÷ number of losses | Usually near −1R if stops are respected |
| Expectancy (R) | (Win rate × avg win) − (loss rate × avg loss) | Average R per trade; the core number |
| Profit factor | Gross profit ÷ gross loss | Above 1 means profitable in the sample |
| Max drawdown | Largest peak-to-trough decline | Pain you must be able to tolerate |
| Longest losing streak | Consecutive losses | Psychological stress test |
| Average trades per month | Count ÷ months | Whether the edge is usable in practice |
For the full math behind expectancy and breakeven win rates, see trading math and expectancy.
Also split results by session, day of week and volatility state (for example, ATR 14 above or below its 50-day average). Gold strategies often work in one session and lose in another. That split is frequently more useful than any single headline metric.
Sample size and out-of-sample testing
Why sample size matters
With small samples, luck dominates. A strategy with no edge can easily show ten wins in a row. As a rough guide:
| Trades in sample | How much to trust it |
|---|---|
| Under 30 | Anecdote; good for spotting obvious flaws only |
| 30 to 100 | Early evidence; wide uncertainty |
| 100 to 300 | Reasonable starting point for decisions |
| 300+ across several regimes | Stronger evidence, if costs are realistic |
These tiers are a practical rule of thumb, not a statistical law. The real uncertainty depends on your win rate and the spread of your R results.
In-sample vs out-of-sample
Split your data in two:
- In-sample data is where you develop and adjust the rules.
- Out-of-sample data is a separate period you do not look at until rules are frozen. You test once. If results collapse, the in-sample result was likely overfitted.
A common approach is to develop on the older 60 to 70% of your data and validate on the most recent 30 to 40%. Walk-forward testing repeats this in rolling windows: optimize on one block, test on the next, slide forward and repeat.
Biases that ruin backtests
Curve-fitting (overfitting)
Curve-fitting happens when you keep adjusting rules until the past looks perfect. Warning signs:
- Many parameters (EMA 37, RSI 14 at 63.5, stop at 1.37 × ATR).
- Results that change sharply when a setting moves slightly.
- A rule added to remove one specific losing trade.
- Great in-sample results, poor out-of-sample results.
Defense: use few rules, round standard settings (RSI 14, ATR 14, EMA 21/50/200), test neighbors (if EMA 50 works, EMA 40 and 60 should not collapse) and always validate out-of-sample.
Look-ahead bias
Look-ahead bias means using information that was not available at the time of the trade. Examples on gold:
- Using a candle’s close to make a decision you act on at that candle’s open.
- Marking a “swing high” that was only confirmed several bars later.
- Using a daily high or low before the day had finished.
- In manual replay, glancing at the future part of the chart.
Defense: in replay, hide future bars. In code, only reference completed bars. Write down the exact moment each condition becomes known.
Survivorship and selection bias
Testing only the period where you already know the strategy worked, or only logging the “clean” setups you remember, inflates results. Defense: pick the test period before you look at results, and log every setup that matches the rules, including ugly ones.
Cost blindness
Ignoring spreads, commissions and slippage. On gold, a spread of a few tenths of a dollar can be a large share of a scalper’s $3 to $5 stop. Defense: model realistic variable spreads, add commission and add extra slippage for trades near news.
A backtest that ignores costs is not a conservative estimate. It is a different strategy. Short-term gold strategies are especially sensitive. Always test with costs at least as high as your broker’s typical conditions at your trading times.
Data quality for spot gold
| Issue | Why it matters | What to do |
|---|---|---|
| Broker-specific feeds | Wicks and highs differ between providers | Test on your own broker’s data where possible |
| Bid-only charts | Most platforms chart the bid; buy stops and buy exits fill on the ask | Add the spread to buy-side entries and short-side exits |
| Fixed spread in tester | Understates costs in thin hours and news | Use variable or worst-case spread settings |
| Missing or bad ticks | Can create fake fills or gaps | Check for unusual spikes; compare with a second source |
| Time zone settings | Session filters break if server time is misread | Confirm the server’s offset from New York time |
| Short history | One regime only | Include at least a few distinct market conditions |
For more on bid, ask and which side triggers your stops, see order types and execution.
A step-by-step testing plan
- Write the rules using the table above. Keep it to the fewest rules that capture the idea.
- Define costs: spread by session, commission and a slippage allowance near news.
- Choose the data: your broker’s XAUUSD history if possible, covering several regimes.
- Split the data into in-sample and out-of-sample periods before testing.
- Run the in-sample test. Log every trade: date, session, entry, stop, exit, R, and notes.
- Calculate metrics: win rate, average win and loss, expectancy, profit factor, max drawdown, longest losing streak.
- Make limited adjustments, each with a reason that would make sense even without seeing results. Re-test.
- Freeze the rules and run the out-of-sample test once.
- Forward-test on demo or very small size for a set number of trades, following the rules exactly.
- Compare forward results to backtest results. Expect them to be somewhat worse. If they are much worse, find out why before scaling.
- Go live at reduced risk, then step up only after live results stay within the range the testing suggested.
Two testing setups traders use
Setup 1: Manual replay test for a discretionary method
| Element | Detail |
|---|---|
| Context | Testing a liquidity sweep reversal at the London open |
| Trigger rule | Price takes the Asian session low, then an M5 close back above it |
| Entry | Next candle open after the close back inside |
| Stop | Below the sweep low minus 0.5 × ATR 14 (M5) |
| Targets | 2R fixed, logged separately from “prior day high” target |
| Management | None, to keep the test clean |
| Procedure | Replay from a random start date; hide future bars; log every qualifying sweep |
Setup 2: Automated filter test
| Element | Detail |
|---|---|
| Context | Testing whether a trend filter improves a breakout-retest system |
| Variant A | No filter |
| Variant B | Only trades in the direction of the H4 EMA 200 |
| Entry, stop, target | Identical in both variants |
| Comparison | Expectancy, profit factor, max drawdown, number of trades |
| Decision rule | Adopt filter only if it improves out-of-sample expectancy without reducing trade count so much that the sample becomes tiny |
Worked example (hypothetical)
A trader manually tests a London-session pullback strategy on XAUUSD M15 over a period that includes both trending and ranging months. All numbers below are hypothetical and for illustration only.
In-sample results: 120 trades. 50 wins averaging +2.0R, 70 losses averaging −1.0R (including costs). - Win rate = 50 ÷ 120 = 41.7% - Expectancy = (0.417 × 2.0) − (0.583 × 1.0) = 0.834 − 0.583 = +0.25R per trade - Gross profit = 50 × 2.0 = 100R; gross loss = 70R; profit factor = 100 ÷ 70 = 1.43 - Max drawdown: −9R; longest losing streak: 8
Out-of-sample results: 60 trades. 22 wins at +1.9R, 38 losses at −1.0R. - Expectancy = (0.367 × 1.9) − (0.633 × 1.0) = 0.697 − 0.633 = +0.06R per trade
Interpretation: the edge shrank sharply out of sample. It is still slightly positive, but small enough that slippage or execution errors could erase it. The trader decides to forward-test on demo for 50 trades before any live money.
Sizing for the forward test: a $10,000 account at 0.5% risk = $50 per trade. With a typical stop of $6, size = $50 ÷ ($6 × $100 per lot) = 0.083 lots, rounded down to 0.08 lots. A −9R drawdown at full risk would be about −$450, or −4.5%, which the trader confirms is tolerable.
Combining it with other concepts
- Use trading math to read your metrics and understand losing streaks.
- Use risk management and the position size calculator to size the forward test.
- Keep a trading journal with the same fields as your backtest log, so live and test results are comparable.
- Put the tested rules into a written trading plan.
- If you plan to use the strategy in an evaluation, check it against the rules in prop firm gold trading.
Best timeframes and sessions to test
| Strategy style | Data needed | Testing notes |
|---|---|---|
| Scalping (M1 to M5) | Tick or high-quality M1 data | Costs dominate; model variable spreads carefully |
| Intraday (M15 to H1) | M1 or M5 data for accurate fills | Split by London (02:00 to 05:00 NY) and New York (07:00 to 10:00 NY) |
| Swing (H4 to daily) | Daily and H4 over many years | Model weekend gaps and swap costs |
| News strategies | Tick data around releases | Fill assumptions are the weakest point; be very conservative |
Common mistakes
- Testing vague rules. Fix: rewrite until two people would take the same trades.
- Too few trades. Fix: keep going until you have a meaningful sample.
- Ignoring costs. Fix: model spread, commission and slippage by session.
- Optimizing everything. Fix: few parameters, standard settings, neighbor checks.
- Skipping out-of-sample. Fix: hold back data before you start.
- Peeking in replay. Fix: hide future bars; log before advancing.
- Changing rules during the forward test. Fix: freeze rules; note ideas for the next version.
- Going live at full size immediately. Fix: step up risk gradually.
Limitations and honest caveats
- Past performance does not guarantee future results. Markets change, and gold’s behavior shifts with macro regimes.
- No backtest perfectly models real execution, especially during news on gold.
- Manual testing is subject to bias even when you try hard to avoid it.
- A positive backtest only shows the rules worked on that data with those assumptions. It does not prove a durable edge.
- We do not publish backtest results for any strategy on this site. Any figures here are hypothetical illustrations of the method.
Pro tips
- Test the losing streak, not just the average. Ask whether you could follow the rules through the longest losing streak at your planned risk.
- Run a “worse costs” test. Double the spread and add slippage. If the edge disappears, it was probably too thin to trade.
- Shuffle your trade order. Randomizing the sequence of your R results (a simple Monte Carlo) shows the range of drawdowns the same trades could have produced.
- Record the setups you skip in live trading. The gap between backtest and live often comes from skipped valid trades, not bad fills.
- Version your strategy. Name each rule set (v1.0, v1.1) so you never mix results from different rules.
- Compare against a simple baseline. If a random-entry version with the same stops and targets does almost as well, your entry rule may not be adding much.
Quick checklist
- My rules are specific enough to be applied identically by someone else.
- I have defined costs by session, including slippage near news.
- My data comes from a known feed, ideally my broker’s.
- I split data into in-sample and out-of-sample before testing.
- I log every qualifying trade in R, with session and notes.
- I calculate expectancy, profit factor, max drawdown and longest losing streak.
- I checked for curve-fitting and look-ahead bias.
- I forward-test the frozen rules before going live.
- I start live at reduced risk and compare results to the test range.
Frequently asked questions
How many trades do I need to backtest a strategy?
There is no single correct number, but a few dozen trades is rarely enough to separate skill from luck. Many traders aim for at least 100 trades across different market conditions before drawing firm conclusions. The fewer rules your strategy has, the more trust a given sample deserves.
Is manual backtesting as good as automated backtesting?
They test different things. Automated tests are fast and perfectly consistent but only work for rules that can be coded exactly. Manual bar-by-bar testing suits discretionary methods like SMC or price action and trains your eye, but it is slower and more vulnerable to bias.
What is curve-fitting in backtesting?
Curve-fitting, or overfitting, is tuning a strategy’s rules and settings until they match past data almost perfectly. The strategy then describes historical noise rather than a repeatable pattern, and it usually performs much worse on new data. Testing on out-of-sample data is the main defense.
Why do my backtest results differ from live trading on gold?
Common reasons include spreads and commissions not modeled correctly, slippage around news, different data feeds between brokers, look-ahead bias in the test and execution mistakes or hesitation in live trading. Forward-testing on demo or small size helps reveal the gap.
What is a good profit factor for a gold strategy?
There is no universal threshold. A profit factor above 1 means gross profits exceeded gross losses in the sample, after costs if you included them. Treat very high profit factors from small samples with suspicion, as they often reflect luck or overfitting.
Can I backtest on TradingView or MT5?
Yes. TradingView’s bar replay is popular for manual testing, and both TradingView and MT5 offer automated strategy testers. Check which data feed and spread assumptions each uses, because spot gold prices and spreads differ between providers.
Sources and further reading
- CME Group — Gold futures overview — Contract specifications and trading hours for COMEX gold
- CFTC — Commitments of Traders — Weekly futures positioning, including gold
- Investor.gov — Stop order — How stop orders work, and their limits in fast markets
External sites are independent of XAUUSD Global. Check dates and data yourself.