How to backtest a forex strategy without fooling yourself
A backtest is a controlled question about historical data, not a certificate that a strategy will work. The quality of the protocol matters more than the prettiness of the equity curve.
Write the rule before revealing the outcome.
Define the instrument universe, timeframe, eligible regime, trigger, order timing, stop, exit, spread limit and every exclusion. Ambiguous discretion should be named and constrained rather than hidden.
State what would reject the idea. A test without a falsification condition can always be explained after the fact.
Separate development from confirmation.
Use one chronological sample to develop the rule and a later, untouched sample to confirm it. A walk-forward design can repeat this process, but each parameter choice must use only information available at that point.
Include quiet, volatile, trending and ranging periods when they fall inside the declared scope. Do not remove an inconvenient regime after seeing its losses unless the exclusion becomes a new hypothesis.
The chart is not the fill.
Use the price that would actually have been available after the signal, not the best point inside the signal candle. Include spread, commission, financing, plausible slippage and any delay required to confirm a closed bar.
For intraday or event strategies, average spread can be dangerously optimistic. Stress the result with worse costs and rejected or skipped trades.
Win rate is one coordinate.
Report average win and loss, expectancy, profit factor, maximum drawdown, losing streaks, holding time and results by pair, year and market regime. Keep the complete eligible sample, including no-trades and ambiguous observations.
A hundred observations is a useful starting discipline, not a universal proof threshold. Rare setups may need more years; highly variable results may need a much larger sample.
Look for a plateau, not a perfect setting.
Vary reasonable parameters, starting dates, costs and instrument subsets. A rule that fails after a tiny change is more likely to be fitted to noise.
Then test the frozen version on unseen data and a demo forward sample. Publish failed variants and limitations beside any promising result.
- No look-ahead or future swing labels
- No silent exclusions
- No repeated optimisation on the confirmation sample
- No live-capital decision from gross results alone