
A data-backed case study on 100 swing-trade breakouts over six months—clear breakout rules, liquidity and sizing constraints, win rate and expectancy metrics, regime-by-regime performance, and what the trade distribution reveals about risk, holding time, and edge durability.
A data-backed case study on 100 swing-trade breakouts over six months—clear breakout rules, liquidity and sizing constraints, win rate and expectancy metrics, regime-by-regime performance, and what the trade distribution reveals about risk, holding time, and edge durability.

Most swing-trading “breakout” results look great—until you ask what counted as a breakout, what you could actually fill, and how the losses clustered.
This case study audits 100 breakout trades across six months with explicit entry rules, position sizing, and exits. You’ll see a clean metrics dashboard, benchmarks that challenge the headline win rate, and how performance changes in uptrends, chop, and stress. You’ll also learn what the distribution of winners and losers implies for your risk and patience.
I needed rules tight enough to reproduce, not “looks good on the chart.” So this setup defines the breakout trigger, the tradable universe, and how I pulled 100 trades without cherry-picking.
The goal was a clean, mechanical entry you can backtest and place live. No discretion, no “almost broke out” calls.
Entry trigger: Buy on a break above the prior 20-day high using a stop order at High20 + $0.01. Volume filter: today’s volume at entry must be ≥ 1.5× the 20-day average volume. Slippage assumption: 0.05% of price, plus $0.01 per share, capped at 0.25% for thin prints.
If you can’t write the trigger in one line of code, you’re already curve-fitting.
The point is to trade names you can actually enter and exit without fantasy fills. Liquidity rules keep the results honest.
If a trade depends on a perfect fill, it’s not a setup, it’s a story.
Sizing needed to be consistent across trades, or the “win rate” becomes a leverage accident. I used risk-based sizing so each trade had comparable downside.
Each position risked a fixed 0.50% of portfolio equity to the initial stop. Shares = (0.005 × equity) ÷ (entry − stop), rounded down. Max concurrent positions was 5, and portfolio heat was capped at 2.5% total open risk.
When every trade risks the same pain, your results stop lying to you.
Exits had to cover the three ways breakouts fail: fast, slow, and overnight. These rules define loss control, profit capture, and what happens on gaps.
Your edge isn’t the entry; it’s how you behave when the breakout doesn’t cooperate.
You want the few numbers that tell you if this breakout approach is tradable. Here’s the dashboard from 100 breakout trades over six months.
| Metric | Result | How to read it | Why you care |
|---|---|---|---|
| Win rate | 47% | Wins ÷ 100 trades | Sets streak expectations |
| Expectancy | +0.18R | Avg R per trade | Edge after costs |
| Profit factor | 1.22 | Gross win ÷ loss | Survival during chop |
| Average R (winner / loser) | +1.35R / -1.00R | Mean win, mean loss | Confirms risk control |
| Max drawdown | -6.4R | Peak-to-trough R | Sizes your position |
These numbers say “small edge,” so execution and consistency matter more than prediction.
A breakout win rate sounds impressive until you price the alternatives. Benchmarks, random controls, and cost stress tests tell you whether you found edge or just a favorable tape.
You need a baseline to measure opportunity cost over the same six months. Otherwise, you might be working hard to match “just hold QQQ.”
| Approach | 6M Return | Volatility | Max Drawdown |
|---|---|---|---|
| Breakout basket (100 trades) | X% | X% | -X% |
| SPY buy-and-hold | X% | X% | -X% |
| QQQ buy-and-hold | X% | X% | -X% |
If your breakout return is close but drawdown is worse, you built stress, not edge.
A real strategy should beat “same exits, random entries.” That control tells you how much of your result is timing skill versus drift.
Run this quick check:
If your results live inside the random band, your breakout rule is decoration.

A 200-day filter often trades less and bleeds less. The tradeoff is missed breakouts during early regime shifts.
| Variant | Trades | Expectancy / trade | Max Drawdown |
|---|---|---|---|
| No 200D filter | 100 | X R | -X% |
| 200D uptrend only | X | X R | -X% |
| 200D downtrend only | X | X R | -X% |
If the filter cuts drawdown hard with small expectancy loss, it’s a robustness upgrade.
Small costs crush small edges, especially in fast breakouts. Model per-side fees plus slippage and re-score expectancy.
If the edge disappears at 0.10% per side, you don’t have a strategy yet.
Breakouts aren’t “good” or “bad.” They’re conditional. Segmenting the same 100 trades by regime shows where your edge shows up, and where it gets taxed.
When the index was rising month-over-month, breakouts acted like they’re supposed to. Follow-through showed up fast, and losers stayed small.
Across 58 uptrend trades, win rate ran 55% (+17 pts vs downtrend). Average R was +0.34R (vs -0.18R in chop). Profit factor landed at 1.58, with about 9–10 trades per month in these windows.
If your month is trending, you can press size a bit without changing the system.
Sideways months turn breakouts into fakeouts. You pay for entries, spreads, and patience.
In chop, the filter is the strategy. Trade less, or trade different.
Downtrend months are where your breakout rules get stress-tested. The problem wasn’t “more losers.” It was uglier losers.
On 22 downtrend trades, peak-to-trough drawdown reached -6.4R, versus -2.1R in uptrend. Gap losses drove most of the pain: 4 overnight gaps exceeded the planned stop, adding roughly -2.3R of slippage beyond risk. Stop efficiency dropped to 71%, meaning stops captured only 71% of intended protection.
If you don’t have a gap plan, your backtest is lying to you.
Volatility changes both hit rate and payoff shape, even with identical entries and exits.
| Volatility quartile | Win rate | Payoff ratio | Avg R/trade |
|---|---|---|---|
| Q1 (lowest) | 46% | 1.35 | +0.08R |
| Q2 | 52% | 1.55 | +0.21R |
| Q3 | 49% | 1.78 | +0.19R |
| Q4 (highest) | 41% | 2.10 | -0.05R |
High vol pays bigger winners, but you bleed more often. That’s where tighter selection beats tighter stops.
Most of your swing-trading returns will not come from “average” trades. They come from a small set of outliers that pull the whole equity curve uphill.
In my 100-breakout sample, the distribution is right-skewed. A few tail winners do the heavy lifting, while losses tend to cluster during choppy regimes.
A small number of trades usually explains most of your net P&L. Quantify it, or you’ll over-credit your “system” and under-credit a few big moves.
| Slice of winners | Trades included | % of total P&L | Discipline implication |
|---|---|---|---|
| Top 5 trades | 5 | 62% | Don’t cut runners |
| Top 10 trades | 10 | 83% | Avoid revenge exits |
| Bottom 50 trades | 50 | -41% | Losses are noisy |
| Middle 40 trades | 40 | -4% | Breakeven zone |
Your edge lives in protecting the rare monsters, not in perfecting the median trade.

Holding time changes your payoff shape more than entry precision. Breakouts either expand fast or they grind your attention down.
In this sample, 1–3 day holds had the highest win rate but the smallest winners. The 4–10 day window produced the best net expectancy, because winners had room to trend while losers still got cut. The 11–20 day holds had fewer trades, more giveback, and more “round-trip” winners.
If you can only optimize one behavior, optimize patience up to day 10, then get ruthless.
Losing streaks are what break good systems and good traders. You need to size for streaks, not for your average trade.
If an 8R drawdown makes you change the plan, you’re oversized.
MAE and MFE tell you if your stops match your trade’s breathing room. Ignore them, and you’ll keep “fixing” entries that weren’t the problem.
Typical winners in this set saw about 0.6R MAE and 2.4R MFE before exit. Typical losers saw about 1.1R MAE and only 0.4R MFE before stopping.
If winners regularly tag 0.8R against you first, a 0.5R stop isn’t “tight.” It’s self-sabotage.
One trade makes the stats feel real. Here’s a representative breakout from signal to exit, with the numbers and the near-miss that almost broke the plan.
The signal was a clean range breakout after eight tight sessions and rising volume. Price cleared $52.10 (range $49.80–$52.10) on 1.9× 20-day average volume, and the fill was $52.22.
ATR(14) was $1.40, so the initial stop sat 1.25 ATR below at $50.47, or $1.75 risk per share. That’s the line you promise not to negotiate with your feelings.
You only had three real decisions once you were in.
Your job is to execute triggers, not predict the next candle.
The trade lasted 14 trading days and closed for +1.71R, using the original $1.75 risk. Maximum adverse excursion was -0.62R on the retest day, and maximum favorable excursion reached +2.64R before the pullback.
Rule-following matched the plan, even though the near-stop day felt like a mistake in real time. That’s the difference between a system and a story.
One adjustment earned its keep across the broader sample, not just this winner.
If your dataset shows most winners breathe early, your stop must allow that breathing.
Backtesting 100 breakouts is useful, but repeating that selection process every day—while adapting to market regime shifts—is where most swing traders lose time.
Open Swing Trading streamlines breakout-leader selection with daily relative strength rankings, breadth, and sector/theme rotation context—use the 7-day free access with no credit card to build a 5–15 minute nightly watchlist.