Risk-Reward Ratio and Win Rate: The Breakeven Math
Win rate alone never proves a strategy profitable. See how risk-reward ratio and win rate set the breakeven math, with the formula, a lookup table, and code.

A trader messages you screenshots of a strategy that wins 7 out of every 10 trades and asks why the account keeps shrinking. It sounds impossible. A 70% win rate feels like a money printer. It isn't, and the reason is arithmetic you can settle in one line.
The short answer
Win rate alone tells you nothing about whether a strategy makes money. What decides profitability is win rate combined with your risk-reward ratio (R), the size of your average win divided by the size of your average loss. The link between them is the breakeven win rate: you need to win at least 1 / (1 + R) of your trades just to stay flat.
Put the two numbers together and the picture resolves fast. If your winners are the same size as your losers (R = 1), you break even at a 50% win rate, so 70% is genuinely profitable. But if your winners are a quarter the size of your losers (R = 0.25), the breakeven win rate is 80%, and a 70% win rate quietly bleeds the account every month. The full test is expectancy: (win rate × average win) − (loss rate × average loss). If that number is positive after fees, the strategy has an edge. If it's negative, no win rate can save it. Everything below is how to measure R per trade, read the breakeven table, compute expectancy from your own log, and set stops and targets so the math works before you click buy.
Measure risk-reward on a single trade first
Risk-reward is defined per trade, at the moment you enter, from three prices you already know: your entry, your stop-loss, and your target. Risk is the distance from entry to stop. Reward is the distance from entry to target. R is reward divided by risk.
Work a concrete long on BTC:
- Entry: you buy at $60,000.
- Stop: you place it at $58,800, which is $1,200 below entry. That $1,200 is your risk.
- Target: you set it at $63,600, which is $3,600 above entry. That $3,600 is your reward.
- R: $3,600 ÷ $1,200 = 3. This is a 1:3 setup.
Notice what R is not. It is not the percentage move, and it is not a promise the trade will hit target. It's the shape of the bet: how much you stand to make relative to how much you've agreed to lose. A 1:3 trade risks one unit to make three. You define that shape before the trade, from your stop and target, and you don't get to renegotiate it after price moves against you. That last part is where most accounts leak, and there's a whole section on it below.
The one formula that ties win rate to R
Here's the derivation, because seeing it once means you never have to trust a calculator again. Say you win a fraction p of trades. Each win pays R units, each loss costs 1 unit. Over many trades the average result per trade is:
expectancy (in units of risk) = p × R − (1 − p) × 1
Break even means that average is exactly zero:
p × R − (1 − p) = 0
p × R = 1 − p
p × (R + 1) = 1
p = 1 / (1 + R)
That's the breakeven win rate. Every R:R value maps to a minimum win rate you have to clear, and the relationship is not linear, which is exactly why intuition fails traders here. Read across this table before you ever call a win rate "good":
| Risk-reward (R:R) | R value | Breakeven win rate | Win rate for a clear edge (+cushion) |
|---|---|---|---|
| 1:0.25 | 0.25 | 80.0% | ~85% |
| 1:0.5 | 0.5 | 66.7% | ~72% |
| 1:1 | 1 | 50.0% | ~55% |
| 1:1.5 | 1.5 | 40.0% | ~45% |
| 1:2 | 2 | 33.3% | ~40% |
| 1:3 | 3 | 25.0% | ~32% |
| 1:5 | 5 | 16.7% | ~24% |
The right-hand column matters because breakeven is not the goal; you want to clear it with room to absorb fees, slippage, and a bad streak. A 1:3 strategy that wins 32% of the time is a real edge. A 1:0.25 strategy needs to win 80% just to tread water, which almost nothing does over a large sample. Scalpers who take tiny targets and wide stops live in that top row and wonder why a high hit rate never compounds.
Expectancy: the number that actually decides it
Breakeven win rate assumes every win is the same size and every loss is the same size. Real trade logs are messier, so the honest measure is expectancy, which uses your actual average win and average loss in currency:
expectancy per trade = (win rate × average win) − (loss rate × average loss)
Now build the trap strategy from the intro, the one that wins 70% and still loses. Suppose it books a $50 average win and a $200 average loss (traders cut winners fast and let losers run, so this shape is common):
expectancy = (0.70 × $50) − (0.30 × $200)
= $35 − $60
= −$25 per trade
Every trade this strategy takes loses $25 on average, across 70% winners. The R here is 50 ÷ 200 = 0.25, which the table above says needs an 80% win rate to break even. At 70%, it's underwater by construction. This is the whole lesson in one example: a high win rate paired with a bad R is a losing strategy wearing a disguise. The same expectancy math is what an RSI divergence strategy or a MACD crossover strategy has to pass before it's worth automating, no matter how clean the signals look on a chart.
Flip the numbers to see a real edge. A trend setup that wins only 40% of the time but books a $300 average win against a $100 average loss:
expectancy = (0.40 × $300) − (0.60 × $100)
= $120 − $60
= +$60 per trade
Fewer than half its trades win, and it makes $60 every time you press the button. That's what "profitable" actually means, and it has almost nothing to do with the number most beginners fixate on.
Set stops and targets so the math works
You don't discover your R after the fact; you engineer it before entry by choosing where the stop and target go. The mistake is placing a stop at a round number or a fixed percentage that has nothing to do with how the instrument moves. A better method is to size the stop to volatility using the Average True Range (ATR), which measures the typical range a market covers in a bar. The MQL5 documentation for the ATR indicator describes it as exactly that volatility read, and it's the same logic behind an ATR-based trend system like Supertrend.
The recipe, for a long:
- Read current ATR(14) on your entry timeframe. Say it's $400 on 4-hour BTC.
- Set your stop a volatility multiple below entry, commonly 1.5× to 2× ATR. At 2× ATR your stop sits $800 below entry, wide enough that normal noise won't tag it.
- Your risk per unit is now that $800.
- Choose the R you want and place the target by multiplication, not by hope. For a 1:2 setup, the target goes $1,600 above entry (2 × the $800 risk).
- Size the position so that $800 stop is a fixed fraction of your account, usually 0.5% to 2%. That step is position sizing, and it's what turns R into consistent dollars.
Here's that stop-and-target logic as Pine Script you can drop on a TradingView chart to see the levels an ATR stop produces. It uses the ta.atr function from the Pine Script v6 reference:
//@version=6
indicator("Risk-Reward from an ATR stop", overlay = true)
atrLen = input.int(14, "ATR length")
atrMult = input.float(2.0, "Stop = ATR ×", step = 0.5)
targetR = input.float(2.0, "Target R:R (reward ÷ risk)", step = 0.5)
atr = ta.atr(atrLen)
entry = close // example long at the current close
stop = entry - atrMult * atr
risk = entry - stop
target = entry + targetR * risk // reward = targetR × risk by construction
plot(entry, "Entry", color = color.gray)
plot(stop, "Stop", color = color.red)
plot(target, "Target", color = color.green)
Because the target is built as targetR × risk, the R:R is fixed by design. You pick the number; the script places the level. The same discipline that governs stop and target placement on a fair value gap fill applies here: the level comes from structure and volatility, not from what you wish the price would do.
Measure your own edge from a trade log
Stop estimating and read it off your history. If you have a CSV of closed trades with a net PnL column (net, meaning after fees), this Python computes win rate, average win and loss, your real R, the breakeven win rate for that R, and expectancy in both dollars and units of risk:
import pandas as pd
# trades.csv needs one column: pnl = net profit/loss per closed trade, after fees
trades = pd.read_csv("trades.csv")
pnl = trades["pnl"]
wins = pnl[pnl > 0]
losses = pnl[pnl < 0]
win_rate = len(wins) / len(pnl)
avg_win = wins.mean()
avg_loss = abs(losses.mean()) # keep as a positive number
payoff = avg_win / avg_loss # this is your real R
expectancy = win_rate * avg_win - (1 - win_rate) * avg_loss
breakeven_wr = 1 / (1 + payoff)
expectancy_R = expectancy / avg_loss # expectancy in units of risk
print(f"Trades: {len(pnl)}")
print(f"Win rate: {win_rate:.1%}")
print(f"Avg win / avg loss: {payoff:.2f} (your R)")
print(f"Breakeven win rate: {breakeven_wr:.1%}")
print(f"Expectancy / trade: {expectancy:+.2f}")
print(f"Expectancy in R: {expectancy_R:+.2f}")
if win_rate > breakeven_wr:
print("Edge: positive — win rate clears the bar for this payoff.")
else:
print("Edge: negative — raise R, raise win rate, or drop the setup.")
Expectancy in R is the most portable number you own. An expectancy of +0.15R means every trade nets you 0.15 of whatever you risked, so risking 1% of your account earns roughly 0.15% per trade before compounding. It lets you compare a forex scalp against a swing stock trade on one scale, because it strips out position size and account currency entirely.
Common mistakes
- Moving the stop away as price approaches it. You planned a 1:2 trade, price threatens your stop, and you slide it lower "to give it room." You just changed R from 2 to maybe 1, which raised your breakeven win rate from 33% to 50% mid-trade, and you did it on your worst trades. The stop is the risk half of R:R; widening it silently breaks the math the whole plan rests on.
- Cherry-picking R after entry. Logging a trade's R:R based on where you actually exited, rather than the target you set at entry, flatters every winner and hides the setup's true payoff. Record the planned R at entry and the realized R at exit as two separate fields, or your expectancy is fiction.
- Ignoring costs. Fees and spread come out of every trade, and they hit small targets hardest. Binance charges a 0.1% spot taker fee per side, so a round trip costs 0.2% before spread. On a scalp targeting a 0.5% move, that's 40% of your gross gone to costs, which can flip a positive expectancy negative. Compute expectancy from net PnL, never gross.
- Judging edge on 20 trades. A 40% win rate looks like a cold streak over 20 trades and a genuine edge over 300. Expectancy needs a sample big enough that variance stops dominating; treat anything under ~100 trades as a hypothesis, not a verdict.
- Chasing win rate as the goal. Optimizing a strategy to win more often almost always shrinks R (you take profit earlier to lock the win), and the two effects can cancel or reverse. Optimize expectancy, the product of both, not either number alone.
Pro tips for the real world
Assume your realized R will land below your planned R, and build for it. Slippage on the stop, partial fills near the target, and the trades you close early in fear all drag realized R down. If the strategy only works at exactly 1:2 with zero friction, it doesn't work. Give yourself margin by targeting a planned R a notch higher than you strictly need, so the breakeven cushion survives contact with a live order book.
Once you have a positive expectancy, position sizing is what turns it into a growth rate, and the classic tool is the Kelly criterion from Kelly's 1956 paper on information rate. For simple win/loss trades it reduces to win rate − (loss rate / R), the fraction of capital that maximizes long-run growth. It also tells you when to walk away: if that fraction is zero or negative, your edge doesn't exist and no bet size fixes it. Most professionals size at half-Kelly or less, because full Kelly captures the growth but rides brutal drawdowns to get it.
One more: a strategy's R is not fixed across market conditions. The same entry rule can produce 1:3 in a trending market and 1:1 in a chop, because targets get hit in trends and stops get tagged in ranges. Segment your trade log by regime before you trust a single expectancy number, and you'll often find one edge hiding inside two very different distributions.
Making an agent refuse setups below your breakeven R:R
Once you know the breakeven win rate for the R you can realistically hit, the rule writes itself: never take a setup whose reward-to-risk falls below your threshold. Enforcing that by hand, on every alert, at 3am, is where discipline dies. In Agentic Traders you can hand the rule to an agent in plain English:
Watch BTC on the 4-hour. Before entering any long, measure the stop at 2× ATR(14) below entry and the target at the nearest structure high. Only take the trade if the reward-to-risk is at least 1:2. Skip everything below that and tell me why you skipped it.
The agent reasons through each setup in a tool-use loop: it calls ATR(14) and the price tools, computes the stop distance and the resulting R:R, and shows its thinking on every decision, including the trades it declines and the reason. It runs this check 24/7 so a marginal 1:1.3 setup never slips through because you were asleep, and you can watch the whole thing on the free $100K paper account at app.agentictraders.io before a cent is real. It's a risk filter you can read, not a black box, and it makes no promise about your win rate; it only enforces the geometry you told it to.
FAQ
What is a good risk-reward ratio?
There's no universal answer, because "good" depends on the win rate you can actually sustain with that R. A 1:2 or 1:3 is a common target because it lets a sub-40% win rate stay profitable, which is realistic for trend and breakout styles. A 1:1 demands you win more than half your trades. Match R to the win rate your strategy really produces in its trade log, not to a number you read on a forum.
Can a strategy with a low win rate be profitable?
Yes, and many of the best ones are. A trend-following system might win 35% to 40% of trades while booking winners three to five times the size of its losers, which the breakeven table shows is comfortably profitable. Low win rate feels bad because losses are frequent, but expectancy, not comfort, is what compounds the account.
How many trades do I need before I trust these numbers?
Aim for at least 100 closed trades, and prefer 200 or more, before treating expectancy as real. Below that, a hot or cold streak dominates the average and you'll draw the wrong conclusion. Track planned R at entry and realized R at exit separately, so you can see slippage between intention and outcome.
Does risk-reward account for trading fees?
Not on its own. R measured from your entry, stop, and target is a gross number. Fees and spread come out separately and shrink your realized reward, so always compute expectancy from net PnL. On small targets, costs can move a strategy from positive to negative expectancy without changing your win rate at all.
Is a higher win rate always worse for R?
Not always, but there's a strong tradeoff. Taking profit sooner raises win rate and lowers R; letting winners run does the reverse. The two changes often roughly cancel in expectancy, which is why optimizing win rate in isolation is a trap. Optimize the product of win rate and R, measured over a large sample.
What to test next
Pull your last 100 closed trades, run the Python snippet on net PnL, and read your real R and expectancy off it. If expectancy in R is negative, you now know the two levers: raise R by placing targets further out relative to your ATR stop, or raise win rate by tightening entry conditions, then re-measure. If it's positive, the question becomes position sizing, and the Kelly fraction tells you how hard to press. Either way, you're now judging strategies on the number that decides money, not the one that decides how good a screenshot looks.
Related articles
- Supertrend Strategy: ATR Trend-Following You Can Automate: the ATR stop logic that sets your R in practice.
- RSI Divergence Strategy: Spot Reversals and Automate With AI: a lower-win-rate setup that lives or dies on expectancy.
- How to Trade Fair Value Gaps (FVG): structure-based stop and target placement.
- What Is Agentic Trading? How AI Agents Trade the Markets: how an agent applies rules like a minimum R:R on its own.
Run the numbers on your own log first, then paper trade a minimum-R:R rule with an AI agent this week and watch it decline the setups that don't clear your math.
How to Trade Fair Value Gaps (FVG): Spot and Trade the Fill
A step-by-step guide to fair value gaps: the exact three-candle rule, how to spot FVGs, entry and stop placement on the fill, plus Pine Script v6 code.
AI AgentsWhat Is Agentic Trading? How AI Agents Trade the Markets
Agentic trading is when an AI agent reasons through live market data and calls indicators as tools to trade on its own. Here's how it works, and its limits.
StrategiesIchimoku Cloud Strategy: Reading the Kumo and Automating Entries
Master all five Ichimoku lines, trade cloud bias and TK crosses, and use an AI agent that scores confluence before entering.
IndicatorsBollinger Band Squeeze: Trading Volatility Breakouts With AI
Learn to detect Bollinger Band squeezes, trade breakout and reversion playbooks, and automate with an AI agent that confirms expansion before acting.
Run this strategy with an AI Trader.
Tell the AI your strategy. It picks the indicators, reasons through every setup, and trades for you 24/7. Free to start. No code.
Build your AI Trader — free