Trade Expectancy Trees
9 min read
Visualize probable outcomes using branching decision trees to model strategy behavior and master your mental game.
9 min read
Visualize probable outcomes using branching decision trees to model strategy behavior and master your mental game.
A trade expectancy tree is a probability tree that maps every realistic exit scenario for a trade — full take-profit, partial profit + runner, breakeven stop, full stop-loss — assigns each branch an empirical probability from your journal, and computes expected value as the sum of P × R across all leaves. Unlike a single EV number, the tree exposes which paths produce the EV and how often you'll experience each one.
Most traders blow up not from bad systems — but from being surprised by normal randomness. The fix isn't more discipline; it's a tree. Sketch every exit before you click buy.
Prerequisites: Distribution of Trade Returns (where branch probabilities come from) and Position Sizing Based on Confidence Intervals (how to handle uncertainty in those probabilities).
You probably know your win rate, average win, and average loss already. Collapsed into one line:
EV = (P_win x R_win) + (P_loss x R_loss) = (0.45 x 2) + (0.55 x -1) = +0.35R
That number is correct. It is also the laziest possible model of what your strategy actually does. A real trade has more than two terminal states. It can hit TP1 and stop out the runner. It can hit breakeven on a wick. It can full-SL on a gap. Folding all of those into "win" or "loss" throws away the structure that makes pre-trade planning possible.
The tree replaces the binary outcome with a leaf for every distinct exit you actually use:
| Branch | Probability | R-payoff | P × R |
|---|---|---|---|
| Full TP | 0.30 | +2.0 | +0.60 |
| Partial TP + runner | 0.15 | +1.2 | +0.18 |
| Breakeven stop | 0.20 | 0.0 | 0.00 |
| Full SL | 0.35 | –1.0 | –0.35 |
| EV | 1.00 | +0.43R |
Same setup, more honest model. The EV is now +0.43R instead of +0.35R because the runner branch and the BE stop are not "wins" or "losses" — they are their own outcomes, and pretending otherwise distorts both the EV and the volatility.
Branch probabilities are not free. They come from your journal — and only your journal. Hypothetical numbers from a course or a Twitter post are useless for sizing real trades. The procedure:
full_tp, partial_runner, be_stop, full_sl. Add a fifth tag — catastrophic — for any trade that exceeded its planned 1R loss due to slippage, gap, or outage.Excel skeleton: column A is the leaf label, B is the probability, C is the R-payoff, D is =B*C. EV is =SUM(D:D). Validation cell: =SUM(B:B) should equal exactly 1.0. For a 2-trade tree, joint probability is =B2*B3 and joint payoff is =C2+C3. Python equivalent is six lines using itertools.product.
Your branch probabilities are estimates, not constants. They have confidence intervals, and those intervals are usually wider than traders want to admit.
With 50 closed trades distributed across 4 branches, you have roughly 12 samples per branch. The 95% confidence interval on each probability is approximately ±15 percentage points. A "TP1 = 30%" branch could really be 15% or 45%. Plug both extremes back into the EV calculation and your number swings from +0.18R to +0.68R — a 3.7× range on the same data.
On 50 closed trades across 4 branches, plus or minus 15pp 95% CI per branch produces an EV that can read +0.18R to +0.68R on the same data.
Minimum sample per branch: 30 closed trades. That puts a 4-branch tree at 120 closed trades minimum before the numbers stop being noise. Below that floor, the tree gives you a precise-looking EV that hides huge uncertainty. See Position Sizing Based on Confidence Intervals for the sizing-side handling of this same problem.
Once you have a single-trade tree, you can chain it to model sequences. The 2-trade tree from the original binary model:
┌─ Win ─ Win → +4R
│
┌────┤
│ └─ Win ─ Loss → +1R
Start
│ ┌─ Loss ─ Win → +1R
└────┤
└─ Loss ─ Loss → –2R
Outcome probabilities:
Two-trade outcome probabilities at 45% per-trade win rate.
The arithmetic is correct, but the framing matters. P(LL) over a 2-trade window is 30.25%. That is not the same as "1 in 3 sequences will be a back-to-back loss" over a longer run. Over a 50-trade run, the expected number of LL pairs is roughly 49 × 0.30 ≈ 15, and the probability of seeing at least one streak of 4+ losses in that run is around 70%. The tree gives you the per-window probability; streak risk requires a separate calculation.
Two assumptions are also worth flagging here. The product P(W) × P(W) only works if trades are independent. For correlated setups (same session, same regime, same parent thesis), they usually aren't, and the joint probability skews higher than the multiplied number suggests.
A 4-branch tree over N trades has 4^N leaves. By N = 5 that's 1,024 leaves, by N = 10 it's over a million, and the tree stops being readable. Two paths forward:
| Tool | Input | Output | When to use |
|---|---|---|---|
| Probability tree | Branch P + R-payoffs | Closed-form EV, exact leaf P | ≤ 5 trades, exit-rule design |
| Monte Carlo | Branch P + N samples | Path distribution, drawdown %, time-to-recovery | 50+ trades, equity-curve risk |
| Payoff matrix | Strategy × scenario grid | Per-state EV | Comparing strategies, regime analysis |
The tree gives you exact closed-form probabilities for every outcome. Monte Carlo samples sequences from the same branch probabilities and gives you the shape of the path — drawdowns, time-to-recovery, longest losing streak. Use the tree to design and EV-rank exit rules. Use Monte Carlo to size risk against the equity curve.
catastrophic > 1R — with whatever probability your venue and instrument have historically shown. Even at 1% probability with a –5R payoff, that branch costs you –0.05R of EV.The real value of drawing the tree before you enter is not the EV number. It is that you cannot draw a TP1 branch without specifying where TP1 is. You cannot draw a runner branch without committing to the trail rule. The tree is a pre-commitment device disguised as a math exercise — every leaf forces you to name an exit and assign it a probability before the trade is live and emotion takes over.
A trade expectancy tree is a probability tree where each branch represents a distinct exit scenario for a setup — typically full TP, partial TP + runner, breakeven stop, and full stop-loss. Each branch carries an empirical probability and an R-payoff, and the lesson's expected value is the sum of P × R across all leaves.
Multiply each branch's probability by its R-payoff and sum across all branches. For a 4-branch example with 30% full TP at +2R, 15% runner at +1.2R, 20% BE at 0R, and 35% SL at –1R, EV = 0.30·2 + 0.15·1.2 + 0.20·0 + 0.35·(–1) = +0.43R per trade.
A tree gives closed-form, exact probabilities for every leaf — best for ≤ 5 trades and for designing exit rules. Monte Carlo samples sequences from the same branch probabilities and produces a distribution of paths — best for 50+ trades and for sizing drawdown risk on the equity curve. They use the same inputs but answer different questions.
Roughly 30 closed trades per branch. For a 4-branch tree that means 120 closed trades minimum on a single setup. Below that, each branch's 95% confidence interval is wide enough (±15 percentage points or more) that the computed EV can swing by 3× or more on the same data.
P(LL) over any 2-trade window is 0.55 × 0.55 = 30.25%. Over a 50-trade run, the expected number of LL pairs is roughly 49 × 0.30 ≈ 15, and at least one streak of 4+ losses occurs in about 70% of 50-trade samples. The per-window probability and the streak risk are different calculations.
No. Mixing setups merges different branch distributions and corrupts the EV. Build one tree per setup. If two setups share the same exit rules but different entries, they may share the same tree shape but their probabilities will differ.
Value at Risk & CVaR — Quantifying Tail Risk. A trade expectancy tree gives you the full leaf distribution. Value at Risk & CVaR collapses the worst leaves into single risk numbers you can size against. The tree shows you which paths are possible; VaR and CVaR tell you how bad the bottom of the distribution is.
For ruin probability and capital-scaling that uses these branch probabilities directly, see Risk of Ruin.