Net of costs, 1.1 to 1.3 is realistic and 1.5+ is exceptional on retail timeframes. Of three XAUUSD strategies we tested over 2.54 years, only one cleared 1.0 — reaching 1.12. The other two scored 0.85 and 0.91 and lost money over 1,000+ trades each.
Profit factor is gross profit divided by gross loss. At 1.0 you break even; at 1.2, every dollar lost is matched by $1.20 gained. It is a better single number than win rate because it accounts for the size of wins and losses, not merely how often you are right.
Crucially it should always be quoted net of trading costs. Spread and commission apply to every round trip, and on thin edges they are the difference between a profitable system and a losing one.
We tested three separate mechanical strategies on 60 000 bars of XAUUSD M15 data covering 2.54 years, each charged 30 points round-trip spread subtracted from every trade:
| Strategy | Trades | Win rate | Profit factor | Expectancy | Verdict |
|---|---|---|---|---|---|
| Liquidity sweep fade | 173 | 25.4% | 1.12 | $0.37 | Kept |
| Opening range breakout | 1005 | 32.5% | 0.85 | $-0.42 | Retired |
| 2h range momentum break | 1434 | 33.5% | 0.91 | $-0.21 | Parked |
A profit factor of 1.12 sounds unimpressive next to the screenshots sold online. It is, in fact, a reasonable outcome for a mechanical strategy on a liquid instrument after costs.
Gold is one of the most heavily traded markets in the world. Thousands of well-capitalised participants compete away obvious inefficiencies continuously. Anything that survives that competition should be expected to be thin.
If a backtest on a retail timeframe shows a profit factor above roughly 2.5, the most likely explanations in order are: costs were not modelled, the sample is too small, parameters were fitted to that specific data, or there is a look-ahead bug.
We are not speculating. Our own momentum strategy initially showed zero trades because of a look-ahead error — the range it was "breaking out" of included the current bar, making a breakout mathematically impossible. Bugs of that class routinely produce impossible-looking results in the other direction too.
Profit factor alone can mislead badly. Always check the trade count — ours is 173, which is a modest sample and a genuine limitation. Check maximum drawdown: ours was $65.65. Check the worst losing streak: 11 in a row. And check expectancy per trade net of costs: $0.37.
A profit factor of 1.4 across 40 trades tells you far less than 1.12 across 400. Sample size is the difference between evidence and anecdote, which we cover in how many trades before you can trust a strategy.
Below 1.0 net of costs: no edge, do not trade it. Between 1.0 and 1.1: probably noise unless the sample is very large. Between 1.1 and 1.3 across hundreds of out-of-sample trades: a genuine, tradeable edge worth forward-testing. Above 1.5 on a retail timeframe: verify the methodology before believing it.
Our sweep strategy sits at the bottom of the tradeable band, which is precisely why we describe it as a candidate rather than a track record.
Yes — net of costs and across a large sample, 1.2 is a genuine and tradeable edge.
1.12 across 173 trades over 2.54 years, with spread costs subtracted.
In a backtest, yes. Above about 2.5 on retail timeframes it usually indicates unmodelled costs, curve fitting, or a look-ahead bug rather than skill.
Always. Excluding costs is the most common way a losing strategy is made to look profitable.