Expectancy is a simple way to describe what a trading approach has done on average per trade over a sample of past results. This guide explains the formula, the difference between win rate and edge, why position sizing and costs change the picture, and how traders study expectancy in a strategy tester. It is educational only and makes no claims about future results. Nothing here is predictive, and trading carries risk of loss.
Expectancy is the average result of a trading approach per trade, measured over a set of past trades. One common form of the formula is:
Expectancy = (Win rate x Average win) - (Loss rate x Average loss)
Suppose a sample of 100 trades won 40% of the time. The average winner was 250 and the average loser was 100 (in whatever unit the results are measured in, such as currency or points). Then:
(0.40 x 250) - (0.60 x 100) = 100 - 60 = 40 per trade, on average, across that sample.
That 40 is descriptive. It tells you what those 100 trades did on average. It does not tell you what the next trade will do, and it does not become more predictive by being positive. Expectancy is an average over outcomes that have already happened; the order of wins and losses, the drawdowns along the way, and the next result are all separate questions. Nothing here is a forecast, and a positive historical expectancy does not remove the risk of loss.
A high win rate feels reassuring, but on its own it says nothing about whether an approach made or lost money over a sample. What matters is win rate combined with the size of wins relative to losses.
Two contrasting examples make the point:
The low-win-rate example is positive over this sample; the high-win-rate example is negative. This is why traders often describe edge as the interaction of how often you are right and how much you make when right versus lose when wrong. A win rate quoted without the average win-to-loss size is incomplete information, not evidence of an edge. None of this predicts the next trade.
Comparing trades that risked different amounts is hard in raw currency. Many traders normalise results into R-multiples, where R is the amount risked on a trade (typically the distance from entry to the planned stop, times position size).
A trade that makes twice what it risked is +2R. A trade stopped out for its full planned risk is -1R. A trade closed early for a small loss might be -0.4R. Once every trade is expressed in R, expectancy can be read on a single scale regardless of position size:
Expectancy (in R) = average R across all trades.
An expectancy of +0.2R means the sample returned, on average, one-fifth of the risked amount per trade. R-multiples make different setups comparable and keep the focus on the risk taken rather than the raw money figure. They remain a description of past trades. They are not a target the market is obliged to deliver, and the realised loss on a single trade can exceed the planned 1R if price gaps through a stop.
Expectancy calculated on clean theoretical fills tends to look better than expectancy you could have realised. Three things eat into it:
A thin positive expectancy can turn negative once these are subtracted, so traders generally study expectancy with realistic costs included rather than on frictionless numbers.
Sample size is the other trap. A handful of trades cannot distinguish a real pattern from luck; a few large winners can flatter an average that would not hold up over more trades. Larger samples reduce noise but never remove uncertainty, and an approach that looked good in one market regime can behave differently in another. Treat any expectancy figure as a measurement with error bars, not a settled fact about the future.
Charting platforms let you compute expectancy from a strategy's closed trades. The short Pine v6 example below tracks closed-trade profit and counts wins and losses, then prints the average win, average loss, win rate, and expectancy per closed trade. It is a measurement tool for reviewing past behaviour on historical data, not a recommendation to trade and not a signal generator.
//@version=6 strategy("Expectancy Stats", overlay = true)
// Example entry logic for illustration only (not advice) fast = ta.sma(close, 10) slow = ta.sma(close, 30) if ta.crossover(fast, slow) strategy.entry("L", strategy.long) if ta.crossunder(fast, slow) strategy.close("L")
// Read realised stats from closed trades wins = 0 losses = 0 winSum = 0.0 lossSum = 0.0 for i = 0 to strategy.closedtrades - 1 p = strategy.closedtrades.profit(i) if p > 0 wins += 1 winSum += p else if p < 0 losses += 1 lossSum += p
total = wins + losses winRate = total > 0 ? wins / total : 0.0 avgWin = wins > 0 ? winSum / wins : 0.0 avgLoss = losses > 0 ? lossSum / losses : 0.0 // negative number expect = winRate avgWin + (1 - winRate) avgLoss
if barstate.islastconfirmedhistory label.new(bar_index, high, "Trades: " + str.tostring(total) + "\nWin rate: " + str.tostring(winRate * 100, "#.0") + "%\nAvg win: " + str.tostring(avgWin, "#.##") + "\nAvg loss: " + str.tostring(avgLoss, "#.##") + "\nExpectancy/trade: " + str.tostring(expect, "#.##"))
A few notes on reading the output. The expectancy figure describes only the trades in the test window, on the data and settings used; change the symbol, timeframe, or dates and it can change. Backtest results assume fills that may not match live execution, so add realistic commission and slippage in the strategy settings before drawing conclusions. As always, this is educational and not a recommendation. Past performance does not indicate future results, and trading carries risk of loss.
Educational only — not financial advice. Trading involves substantial risk of loss.