Profit factor: what is a good value, and why trade count matters

Profit factor (PF) is gross profit divided by gross loss; above 1 means the period was profitable overall. There is no fixed value that counts as good. The same PF means less when it comes from few trades or when it is sensitive to costs, so read PF together with the trade count, costs and market regime.

Definition

PF = gross profit / |gross loss|
   = win_rate * avg_win / ((1 - win_rate) * avg_loss)

The second form shows that PF is a combination of win rate and payoff ratio (average win / average loss). A 30% win rate can still give a PF above 1 with a large payoff ratio, and a 70% win rate can give one below 1 with a small one.

A sample breakout EA on synthetic EURUSD M15 data won 46 of 136 trades (33.8%), with an average win of 29.3 and an average loss of 25.7:

PF = 0.338 * 29.3 / (0.662 * 25.7) = 0.58

The payoff ratio is 1.14, but the win rate is too low for that, so PF ends well below 1.

Common rules of thumb

You will often see rules such as "above 1.3 is worth a closer look" or "above 2 suggests overfitting". These are rules of thumb, not established thresholds. More important than any threshold is how much a given PF could move. Three checks help.

1. Trade count: few trades, wide swings

A handful of large wins or losses can move PF a lot. With few trades, one lucky winner is enough to produce a good-looking number.

You can see how much it moves by resampling the trades with replacement and recomputing PF (a bootstrap). For the sample, the 5th to 95th percentile over 2,000 resamples:

Trades usedPFResampled PF range
First 300.760.41-1.49
All 1360.580.41-0.80

With 30 trades, the same EA could easily have shown a PF of 1.49. With all 136, even the top of the range is below 1, and it is clearly a losing EA. Look at the trade count and this range whenever you look at PF.

2. Costs: a slightly wider spread lowers PF

When the average result per trade is small, a little more spread or commission moves PF noticeably. Adding a cost per trade to the sample:

Extra cost per tradePF
0 pips0.58
1 pip0.54
2 pips0.50
3 pips0.47

An EA with a PF just above 1 can turn negative over a 1-2 pip difference. Check that the spread in your backtest is not tighter than the account you will trade on. Fill and cost assumptions are covered in the fill assumptions guide.

3. Regime: the overall PF is a blend

The PF for the whole period mixes the markets the EA is good at with the ones it isn't. Splitting the sample by the regime just before entry (ADX on hourly bars):

RegimeTradesPFNet
Uptrend290.93-30
Downtrend110.25-173
Range930.57-685

(3 trades had too little history before them to classify.)

Most of the loss comes from the 93 trades entered in ranges. A test period with more ranging markets will show a lower PF, and one with more trends a higher one. If PF changes between periods, check whether the mix of regimes changed first. See the market regime guide.

Discount a PF picked by optimization

If you try many parameter sets and keep the one with the highest PF, that PF includes luck. The more combinations you try, the more the winner overstates the real edge. The guide on overfitting covers checking that neighbouring parameters hold up too.

When PF is low, look at the losers next

PF doesn't say which part of the EA to fix. Split the losing trades into those that were in profit first (an exit problem) and those that went wrong right away (an entry problem). The MFE and MAE guide explains the idea, and how to read an MT5 report works through an example.

For MT5 EAs, load a Strategy Tester report into the free MT5 report analyser to get this split plus results by cost and regime. No signup, and files never leave your browser.

FAQ

Which matters more, PF or win rate?

Neither works alone. PF depends on both win rate and payoff ratio, and a high win rate with a small payoff ratio can still give a PF below 1.

How many trades do I need before I trust a PF?

There is no fixed number. Resample the trades to get a range for PF and check whether even the low end of that range is above 1.

What if there are no losing trades?

Gross loss is zero, so PF can't be calculated. That usually means very few trades, or losing positions held open without a stop.