# How to Calculate Expectancy

> How to calculate expectancy in trading, step by step: a 20-trade example worked by hand, the spreadsheet formulas, and how far to trust the number.

Canonical: https://www.journalx.io/guides/how-to-calculate-expectancy

To calculate expectancy, take a list of closed trades from one setup, net of fees. Work out your win rate, average win and average loss, then compute (win rate × average win) − (loss rate × average loss). Check the answer against total net P\&L divided by trade count, convert it to R, and judge it against the sample size.

Learning how to calculate expectancy in trading takes about ten minutes and one list of trades. This guide works a real-looking 20-trade list by hand, then shows the exact spreadsheet formulas, so you can run the same numbers on your own history. If you want the concept first (what [expectancy](/glossary/expectancy) is and why it matters more than win rate), the glossary entry covers it. Here we only do the arithmetic, and then ask the question most guides skip: how much should you trust the answer?

## Step 1: Pull a clean list of closed trades

Expectancy is only as honest as the list you feed it. Before you calculate anything, filter your journal down to:

- **One setup.** A blended number across different strategies hides which one is paying and which one is bleeding. Calculate each setup on its own.
- **Closed trades only.** Open positions have no result yet.
- **Net P\&L, after commissions and fees.** An edge that only exists before costs is not an edge.
- **Every trade.** The scratches, the rule breaks and the ones you would rather forget all stay in. Dropping trades you don't like is the fastest way to invent an edge.

If your journal doesn't capture net P\&L and the dollar amount you risked on each trade, fix that first. Our list of [what to track in a trading journal](/blog/what-to-track-in-a-trading-journal) covers both fields.

Here is the list we will work through. It is one setup, every result is net of fees, and the trader risked $100 per trade, so 1R is $100.

| Trade | Net P\&L | R-multiple | Trade | Net P\&L | R-multiple |
| ----- | -------- | ---------- | ----- | -------- | ---------- |
| 1     | +$210    | +2.10R     | 11    | −$120    | −1.20R     |
| 2     | −$100    | −1.00R     | 12    | +$150    | +1.50R     |
| 3     | −$100    | −1.00R     | 13    | −$100    | −1.00R     |
| 4     | +$180    | +1.80R     | 14    | +$60     | +0.60R     |
| 5     | −$85     | −0.85R     | 15    | −$60     | −0.60R     |
| 6     | −$100    | −1.00R     | 16    | +$240    | +2.40R     |
| 7     | +$95     | +0.95R     | 17    | −$100    | −1.00R     |
| 8     | −$40     | −0.40R     | 18    | +$130    | +1.30R     |
| 9     | +$320    | +3.20R     | 19    | −$85     | −0.85R     |
| 10    | −$100    | −1.00R     | 20    | +$235    | +2.35R     |

Trade 11 lost $120, more than the planned $100. That is what slippage through a stop looks like in real data, and it belongs in the list.

## Step 2: Sort the trades into wins and losses

Count every trade with a net P\&L above zero as a win and every trade below zero as a loss. The list above has **9 wins and 11 losses**.

Decide up front what to do with a trade that closes at exactly $0. The cleanest rule is to count it in the total but as neither a win nor a loss. Whatever rule you pick, write it down and apply it the same way every time, or your numbers will drift between reviews.

## Step 3: Calculate your win rate and loss rate

[Win rate](/glossary/win-rate) is wins divided by total trades. Loss rate is losses divided by total trades.

- Win rate = 9 ÷ 20 = **45%**
- Loss rate = 11 ÷ 20 = **55%**

With no breakeven trades, the two add up to 100%. A 45% win rate would put a lot of traders off, which is exactly why you don't stop here.

## Step 4: Calculate your average win and average loss

Add up the winners and divide by the number of wins. Do the same for the losers, and keep the [average loss](/glossary/average-loss) as a positive number so the formula reads cleanly.

- Total of the 9 wins = $1,620, so the [average win](/glossary/average-win) = $1,620 ÷ 9 = **$180**
- Total of the 11 losses = $990, so the average loss = $990 ÷ 11 = **$90**

![The 20 trades from the worked example plotted in R: nine wins averaging +1.8R and eleven losses averaging −0.9R.](https://assets.journalx.io/marketing/guides/how-to-calculate-expectancy/expectancy-trade-list.avif)

## Step 5: Plug the numbers into the expectancy formula

The expectancy formula weights each side by how often it happens:

> Expectancy = (Win rate × Average win) − (Loss rate × Average loss)

For our list:

- (0.45 × $180) − (0.55 × $90)
- \= $81.00 − $49.50
- \= **+$31.50 per trade**

Now check it the short way. Total net P\&L is $1,620 − $990 = $630, and $630 ÷ 20 trades = $31.50. The two methods always agree, because expectancy is the average result per trade. If your two answers don't match, you have a counting error (usually a breakeven trade that was dropped from the total, or a loss entered as a positive number).

The long form is still worth doing. It shows *why* the number is positive: this setup loses more often than it wins, and it still comes out ahead because the average winner is twice the average loser.

## Step 6: Convert expectancy to R

Dollar expectancy changes every time you change size. To compare setups, or this setup now versus last year, express each result as an [R-multiple](/glossary/r-multiple): net P\&L divided by the amount risked on that trade.

With $100 risked on every trade, the conversion is straightforward. The average win is +1.8R, the average loss is −0.9R, and:

- (0.45 × 1.8R) − (0.55 × 0.9R) = 0.81R − 0.495R = **+0.315R per trade**

If your [risk per trade](/glossary/risk-per-trade) varies, convert each trade to R first and then average the R column. Don't divide the dollar expectancy by an "average risk", because big-size trades will dominate the result.

## Step 7: Set it up in a spreadsheet

Doing it by hand once is how you learn it. After that, let a spreadsheet do it. Put net P\&L in column B (rows 2 to 21) and dollars risked in column C. These formulas work in both Excel and Google Sheets:

| Cell                  | Formula                                           | Result          |
| --------------------- | ------------------------------------------------- | --------------- |
| R-multiple (column D) | `=B2/C2`, filled down                             | +2.10R … +2.35R |
| Win rate              | `=COUNTIF(B2:B21,">0")/COUNT(B2:B21)`             | 45%             |
| Loss rate             | `=COUNTIF(B2:B21,"<0")/COUNT(B2:B21)`             | 55%             |
| Average win           | `=AVERAGEIF(B2:B21,">0")`                         | $180.00         |
| Average loss          | `=-AVERAGEIF(B2:B21,"<0")`                        | $90.00          |
| Expectancy ($)        | win rate × average win − loss rate × average loss | $31.50          |
| Check ($)             | `=AVERAGE(B2:B21)`                                | $31.50          |
| Expectancy (R)        | `=AVERAGE(D2:D21)`                                | +0.315R         |

Microsoft documents [COUNTIF](https://support.microsoft.com/en-us/office/countif-function-e0de10c6-f885-4e71-abb4-1f464816df34) and [AVERAGEIF](https://support.microsoft.com/en-us/office/averageif-function-faec8e2e-0dec-4308-af69-f5576d8ac642) if you want the full syntax. Because the loss rate counts only trades below zero, a breakeven trade lands in the total but on neither side, which is exactly the rule from Step 2. The check row is your safety net: if it doesn't match the expectancy row, something in the sheet is off.

## Step 8: Judge how much to trust the number

This is the step that turns a calculation into a decision. +$31.50 a trade looks like an edge. Over 20 trades, it isn't proof of one.

The chart below recalculates expectancy after every trade. Early on it swings wildly: +2.1R after the first trade, close to zero after the third. It settles as trades accumulate, but the shaded band (one [standard error](https://en.wikipedia.org/wiki/Standard_error) either side) still touches zero after trade 20.

![Expectancy recalculated after each of the 20 trades, settling at +0.32R, with a band of one standard error either side that still reaches zero.](https://assets.journalx.io/marketing/guides/how-to-calculate-expectancy/expectancy-running-average.avif)

You can put a number on this with two more spreadsheet cells:

1. **Standard deviation** of the results: `=STDEV.S(B2:B21)`, which is about $148 for our list.
2. **Standard error** of the expectancy: the standard deviation divided by the square root of the trade count. Here that is $148 ÷ √20 ≈ $33.

An expectancy of $31.50 with a standard error of $33 is less than one standard error above zero. Put plainly, a setup with no edge at all could have produced this list. A rough rule for how many trades you need before the result stands about two standard errors clear of zero is **(2 × standard deviation ÷ expectancy)²**. For this setup that is (2 × 148 ÷ 31.5)², or about **90 trades**.

Run the expectancy numbers from the first trade so you build the habit and spot errors in your data. Hold off on scaling up, dropping a setup or rewriting your rules until the sample is large enough that the standard error band sits fully above or below zero.

Two more checks before you rely on the number. Read it next to [maximum drawdown](/glossary/drawdown), because a positive expectancy you can't sit through in practice does you no good. And recompute it as new trades come in, ideally as part of [your weekly trade review](/guides/the-weekly-trade-review-process), so you notice when an edge starts to fade.

## Putting it together

Calculating expectancy comes down to a clean list, four numbers and one formula, with a check that the formula matches your average trade. The worked example shows the part that matters most: a setup that loses 55% of the time can carry a positive expectancy, the same reason [a 70% win rate can still lose money](/blog/win-rate-vs-expectancy), and 20 trades are not enough to know which kind of setup you have. Calculate it in R, calculate it per setup, and give it enough trades to mean something.

JournalX calculates expectancy in dollars and R from your synced trades and breaks it down by setup, symbol and session, so you can see where the numbers hold up and where the sample is still too thin.
