logo

Which Setup Pays for the Others? Profit Factor by Strategy

Author Avatar Ali Nili
Seesaw tipped down on the left under one tall stack of blue chips, with four small stacks of grey and red chips on the raised right side.

Profit factor is what your winning trades made divided by what your losing trades cost, fees included, so anything above 1 means the winners covered the losers. The trading metrics guide covers how to read it, and the profit factor calculator does the division for you.

One profit factor for the whole account mixes every setup you trade into a single number. This post splits it by setup on a 200-trade hypothetical journal with four setups, finds the setup that pays for the rest, and then checks how far each setup’s number can be trusted with 24 to 72 trades behind it.

The short version

  • The account’s profit factor is 1.51 over 200 trades. Breakout made 54.1% of the net on 32% of the trades.
  • Range fade and News took 32% of the trades and made 12.6% of the net.
  • Range fade shows 1.26 in this journal, yet its inputs were built to lose (long-run profit factor 0.79). Only 23.5% of 40-trade journals drawn from those inputs come out above 1, and this one did.
  • Judge each setup by the low end of a 90% bootstrap interval. In this journal, Breakout’s low end clears 1 with room (1.19); Pullback’s clears it by 0.004.

One account number, four setups

The journal has 200 closed trades, each tagged with one of four setups. Every trade’s 1R is $100 and every trade pays a $4 round-trip fee. Losses vary around each setup’s mean, so the average loss runs from $96.61 to $119.97 depending on the setup. A seeded script (seed 46) generated the trades from fixed inputs, listed below the first table, so the journal is hypothetical and every figure in this post can be reproduced from them.

Setup Trades Win rate Net Share of net Profit factor
Breakout 64 45.3% $3,080.78 54.1% 1.85
Pullback 72 52.8% $1,896.68 33.3% 1.52
Range fade 40 57.5% $560.36 9.8% 1.26
News 24 45.8% $157.91 2.8% 1.10
Account 200 50.5% $5,695.73 100% 1.51

The inputs behind each setup. Win sizes vary around the mean win and losses vary up to 15% either side of the mean loss, both in R, where 1R is $100:

Setup Trades Win probability Mean win Mean loss
Breakout 64 0.42 2.40R 1.00R
Pullback 72 0.55 1.50R 1.00R
Range fade 40 0.55 0.80R 1.15R
News 24 0.38 2.00R 1.20R

Breakout made $3,080.78 of the $5,695.73 net with the lowest win rate in the journal, 45.3%. Its average win was $231.66 against an average loss of $96.61.

Range fade had the highest win rate, 57.5%, and the second-lowest profit factor. Its average win ($118.90) and average loss ($118.49) were almost equal, so its profit came from winning slightly more than half the time, and fees took $160 of it.

The account’s 1.51 hides that spread. Range fade and News together used 64 trades, 32% of the journal, to make $718.27, or 12.6% of the net.

Two of these setups were built to lose

A journal of your own trades can’t show you this part. This one was built from fixed inputs, so each setup’s long-run profit factor is known: it comes from 1,000,000 simulated trades with the same inputs. The last column runs 10,000 journals of the same size as each setup’s sample and counts how many come out above 1.

Setup Trades Profit factor in this journal Long-run profit factor of its inputs Same-size journals above 1
Breakout 64 1.85 1.62 95.6%
Pullback 72 1.52 1.68 98.3%
Range fade 40 1.26 0.79 23.5%
News 24 1.10 0.97 46.6%

Range fade’s inputs make $0.79 for every $1 they lose, fees included. Draw 10,000 journals of 40 trades from them and 23.5% show a profit factor above 1. This journal landed in that 23.5%. News is close to a coin toss: 46.6% of 24-trade journals from its inputs come out above 1.

Breakout’s 1.85 is off too, in the other direction. Its inputs produce 1.62 over the long run, so 64 trades flattered a setup that was already good.

With your own trades you never see the long-run column. What you can compute is how much each setup’s number would move if the same trades had come in a different mix, which is the interval further down.

How to split profit factor by setup

  1. Write a one-line definition for each setup before you tag anything: the entry trigger and the market it applies to. If a trade fits two definitions, tighten them until it fits one.
  2. Tag every closed trade with exactly one setup. Trades that fit none get the tag “Other”, and Other gets its own row.
  3. Export your closed trades with three columns: setup, result before fees, fee. If your results already include fees, put 0 in the fee column.
  4. For each setup, add up the winners (gross profit), the losers as a positive number (gross loss) and the fees.
  5. Divide gross profit by gross loss plus fees. Put the trade count and the net result next to it.
  6. Check that the setup nets add up to the account net. If they don’t, a trade is untagged or tagged twice.

In a spreadsheet with the setup in column A, the result in column B and the fee in column C, put a setup name in E2 and these formulas in F2 to J2:

F2 Gross profit:   =SUMIFS(B:B, A:A, E2, B:B, ">0")
G2 Gross loss:     =-SUMIFS(B:B, A:A, E2, B:B, "<=0")
H2 Fees:           =SUMIFS(C:C, A:A, E2)
I2 Trades:         =COUNTIFS(A:A, E2)
J2 Profit factor:  =F2/(G2+H2)

Copy row 2 down for each setup. If you’d rather skip the sheet, enter each setup’s gross profit, gross loss and fees into the profit factor calculator, one setup at a time. The calculator is free, with no sign-up.

If you changed a setup’s rules partway through, split it into two versions before you compute anything. How many trades you need before evaluating a strategy explains why mixed versions blur the result.

How many trades before a setup’s number means anything

No statistical rule sits behind 30 or 100 trades. What changes with more trades is how widely the number swings. The table takes the Pullback inputs, whose long-run profit factor is 1.68, and draws 10,000 journals at each size.

Trades in the journal 5th percentile Median 95th percentile Journals under 1
20 0.78 1.68 3.66 12.9%
50 1.04 1.68 2.71 3.6%
100 1.22 1.69 2.34 0.7%
200 1.33 1.68 2.13 0.0%
500 1.45 1.68 1.95 0.0%

At 20 trades, a setup that makes $1.68 for every $1 it loses shows under 1 in 12.9% of journals and above 3.66 in 5% of them. At 200 trades the middle 90% still runs from 1.33 to 2.13.

Profit factor range across 10,000 hypothetical journals from a setup with a long-run value of 1.68: 0.78 to 3.66 at 20 trades, 1.04 to 2.71 at 50, 1.22 to 2.34 at 100, 1.33 to 2.13 at 200 and 1.45 to 1.95 at 500.

Your own setup has no known long-run value, so use a bootstrap. Resample your trades with replacement 10,000 times, compute profit factor each time, and read the 5th and 95th percentiles as a 90% interval. NIST describes the method in its Engineering Statistics Handbook. Here are the journal’s intervals:

Setup Trades Profit factor 90% interval
Breakout 64 1.85 1.19 to 2.79
Pullback 72 1.52 1.004 to 2.27
Range fade 40 1.26 0.74 to 2.12
News 24 1.10 0.50 to 2.19
Account 200 1.51 1.18 to 1.93
90% intervals for profit factor by setup in a 200-trade hypothetical journal: Breakout 1.19 to 2.79, Pullback 1.004 to 2.27, Range fade 0.74 to 2.12, News 0.50 to 2.19 and the account 1.18 to 1.93, against a breakeven line at 1.00.

Here’s a rule you can write down: a setup has shown an edge in your journal only when the low end of its 90% interval is above 1. In this journal Breakout clears it with room, at 1.19. Pullback clears it by 0.004, at 1.004, too thin a margin to lean on, even though its inputs are the best of the four. Range fade and News could be anything from a losing setup to a good one.

The same check in Python, for one setup’s list of results before fees:

import random

def profit_factor(results, fee):
    gross_profit = sum(r for r in results if r > 0)
    gross_loss = -sum(r for r in results if r <= 0) + fee * len(results)
    return gross_profit / gross_loss

def interval_90(results, fee, resamples=10_000, seed=1):
    rng = random.Random(seed)
    n = len(results)
    values = sorted(
        profit_factor([results[rng.randrange(n)] for _ in range(n)], fee)
        for _ in range(resamples)
    )
    return values[round(0.05 * (resamples - 1))], values[round(0.95 * (resamples - 1))]

A setup with no losing trades and no fees has no profit factor (the division fails), and with fewer than about 20 trades the interval is too wide to say much.

What to do with a setup that isn’t paying

A setup under 1, or one whose interval reaches below 1, leaves you four options. None of them comes with a guaranteed result, and each one changes what the next block of trades can tell you.

  • Cut its size while you keep logging it. Smaller risk keeps the cost of a losing setup small while its sample grows. If the opposite has happened and size grew on a setup that isn’t paying, the position size creep check shows how to measure it.
  • Review its exits. Range fade won 57.5% of the time while its average win barely beat its average loss ($118.90 against $118.49). That pattern points at exits before entries: compare where winners were closed with where the plan said to close them.
  • Stop trading it and keep recording the trades it would have given you, so the sample keeps growing at no cost.
  • Drop it. If the high end of its 90% interval is under 1 as well, the setup lost money across nearly every mix the same trades could have come in.

Whichever you pick, write the date next to the setup name and compare the next block of trades with the old one, the way the weekly scan in the trading journal review guide compares periods.

Limits of this method

The journal is hypothetical. The long-run numbers in this post exist only because the inputs were fixed; a live setup’s results drift with market conditions.

The bootstrap treats each trade as independent of the one before it. Trades that cluster, such as several Breakout trades on the same news day, make the true interval wider than the computed one.

Profit factor ignores size. If you risk $200 on one setup and $50 on another, the bigger one dominates the dollars. When your risk per trade varies, compute each setup’s profit factor in R multiples as well.

It says nothing about drawdown or the order of trades. Two setups with the same profit factor can produce very different equity curves.

FAQ

What is a good profit factor for a trading strategy?

Above 1 means the winners made more than the losers cost, fees included, and how much higher you need depends on the trade count behind it. In this post’s simulation, a setup with a long-run profit factor of 1.68 showed anything from 0.78 to 3.66 across 20-trade journals (5th to 95th percentile), so judge the low end of a 90% interval rather than the single value.

How do I calculate profit factor for one strategy?

Filter your closed trades to that setup’s tag, add up the winners (gross profit), the losers as a positive number (gross loss) and the fees, then divide gross profit by gross loss plus fees. The profit factor calculator on ultratrader.app does the division if you enter the three totals.

How many trades do I need per setup?

No trade count works as a statistical threshold. In this post’s simulation, a setup with a long-run profit factor of 1.68 showed under 1 in 12.9% of 20-trade journals, 3.6% of 50-trade journals and 0.7% of 100-trade journals. Compute a bootstrap interval on your own trades to see how wide yours is.

Should I drop a setup with a profit factor under 1?

Check the trade count and the 90% interval first. If the high end of the interval is under 1 as well, the evidence that the setup loses money is strong. If the interval crosses 1, cutting its size while you keep logging it keeps losses small while the sample grows.

Run it on your own trades

Split your last 100 closed trades by setup and enter each setup’s totals into the profit factor calculator.

UltraTrader auto-syncs trades from MT4, MT5, cTrader and crypto exchanges over a read-only connection, so your journal fills in without retyping. It shows your win rate and R:R metrics on web, iOS and Android.

The journal in this post is hypothetical: its trades come from a seeded simulation with fixed inputs. Results depend on those inputs and are not a prediction of future performance. This post is educational content, not financial advice.

Related Categories: Trading Journal & Tools