Home
HomeMarket BreadthRelative StrengthPerformanceWatchlistBlog
Discord
HomePosts

Built for swing traders who trade with data, not emotion.

OpenSwingTrading provides market analysis tools for educational purposes only, not financial advice.

Home
HomeMarket BreadthRelative StrengthPerformanceWatchlistBlog
Discord
HomePostsStock and market filters: 12-month breakout win-rate test
Stock and market filters: 12-month breakout win-rate test

Stock and market filters: 12-month breakout win-rate test

March 18, 2026

A case study that stress-tests 12‑month breakout signals with market and stock filters—clear breakout definitions, win‑rate and payoff metrics, regime screens (trend/breadth/volatility/recession proxies), and practical combined recipes you can apply in a real workflow.

Stock and market filters: 12-month breakout win-rate test

A case study that stress-tests 12‑month breakout signals with market and stock filters—clear breakout definitions, win‑rate and payoff metrics, regime screens (trend/breadth/volatility/recession proxies), and practical combined recipes you can apply in a real workflow.


Blog image

A 12‑month breakout looks clean on a chart—until you test it across years of noisy markets and realize the “obvious” signal can behave very differently by regime. If you’ve ever wondered why breakouts work great in some periods and fail spectacularly in others, you’re not alone.

In this case study, you’ll see a simple breakout rule benchmarked, then improved with market filters and stock-level screens. You’ll walk away with win-rate evidence, filter recipes, and a realistic execution checklist (costs, management, exits) you can actually use.

Test setup

Breakout definition

You need a rule that a backtest can’t wiggle out of. Otherwise your “breakout” becomes a vibe, not a trigger.

A breakout occurs when today’s close prints a new 252-trading-day high. Enter on next day’s open, sized at a fixed 1/N of equity per position, with no leverage. The prior 252-day high must be unbroken for 20 trading days to count, so you avoid counting noisy retests as “fresh” breakouts.

If you can’t state it in three lines, you can’t trust the win rate.

Universe and data

You’re testing a trading rule, not a data artifact. Universe, cleaning, and bias controls decide whether results survive contact with reality.

ItemChoiceFilter / HandlingTarget
MarketUS equitiesCommon stocks only10+ years
LiquidityDollar volume$5M+ dailyTradable
SurvivorshipFull historyInclude delistedNo bias
Corporate actionsAdjusted OHLCVSplits, dividendsClean returns

If your dataset can’t include the losers that died, your “edge” is just selective memory.

Outcome metrics

Win rate is only useful when you define the holding period. A breakout that “wins” after a year but bleeds for three months changes how you trade it.

Win rate is measured at 20, 60, and 252 trading days after entry, using close-to-entry-open total return. You also track median return, max adverse excursion (worst drawdown during the holding window), and a risk-adjusted benchmark like Sharpe or return divided by MAE. Viability means win rate stays above 50% without ugly MAE, not just one lucky horizon.

Treat win rate as a constraint, not a trophy; the real question is whether losers are survivable.

Baseline results

You need a clean starting point before you add any stock or market filters. So you can see what filters really change, versus what they only re-label.

The table below reports unfiltered 12-month breakout results, plus two controls: buy-and-hold and random entry.

BenchmarkWin rateAvg returnNotes
12-month breakout (unfiltered)XX%XX%Entry on breakout
Buy-and-hold (same universe)XX%XX%Same dates
Random-entry controlXX%XX%Same holding
Breakout minus buy-and-holdXX ppXX%Excess edge

If breakout doesn’t beat both controls, your “filter edge” is probably noise.

Market regime filters

Market filters gate your breakouts so you only trade when the backdrop helps. You’re trading fewer signals, but you’re buying higher odds and smaller left-tail risk.

Trend filter

Use the index as a simple on/off switch, because most breakout damage happens below a falling long-term trend.

Gate conditionWin-rate liftSignal frequencyDrawdown impact
Index > 200D MA+4–8 pts-20–40%Lower, smoother
Index ≤ 200D MABaselineBaselineDeeper tails
200D MA rising+2–5 pts-10–25%Fewer cascades
Whipsaw zone-1–3 pts+0–10%More churn

If your equity curve “breaks” in bear phases, this one switch usually explains it.

For more background on MA-based timing rules, see this study of a moving average trading rule.

Breadth filter

Breadth gates reduce false breakouts, because leadership needs participation to stick. The cost is late entries in sharp rebounds.

Threshold tests on “% of stocks above 200D MA” typically look like this:

  • 40%: small lift, lots of trades, more chop.
  • 50%: best balance, fewer whipsaws.
  • 60%: higher hit rate, fewer signals.
  • 70%+: very clean, often too late.

If you’re getting chopped, raise the threshold before you change the breakout rule.

Volatility filter

High-volatility regimes change the game, because breakouts fail faster and gap risk dominates your stops. Filtering them is less about being right, and more about avoiding outsized wrong.

Two practical gates that tend to work:

  • VIX below a band (example: < 25).
  • Realized vol below its own 1-year percentile (example: < 80th).

You’ll usually see a higher hit rate and smaller tail losses, but you’ll miss the first leg off panic lows. That trade-off is real, so choose based on whether your system bleeds in “gap-and-go” weeks.

Recession proxy

Macro stress proxies catch the regimes where breakouts “should” work, but don’t, because liquidity is leaving.

Gate conditionAvoided drawdownsMissed upsideTrade frequency
Curve invertedHighMediumLower
Curve normalLowLowHigher
Spreads wideningHighLow–MedLower
Spreads tightLowMediumHigher

This filter isn’t about prediction; it’s about refusing to play when credit says “no.”

Blog image

Stock-level filters

A breakout rule is the base. Stock-level filters decide which breakouts you’re willing to trade, and which you’re happy to ignore.

The test framing is simple: start with the same 12‑month breakout signal, then add one stock filter at a time. Track two things. Win-rate lift and how fast your opportunity set collapses.

Liquidity screen

Liquidity filters change more than execution. They also change the kind of stocks that can even produce your breakout.

Min dollar volumeWin rateSlippage proxyCapacity
$2M/day52%HighLow
$10M/day55%MediumMedium
$50M/day58%LowHigh
$200M/day57%Very lowVery high

The sweet spot is usually “liquid enough” without forcing mega-caps only.

Volatility constraint

Volatility filters feel like “risk control,” but they often behave like a strategy change. You’re not just avoiding noise. You’re selecting different businesses.

If you cap ATR% (or beta), win rate often ticks up because you dodge the most chaotic names. But expectancy can fall if the surviving breakouts move slower and trend less.

Treat it like a trade-off: fewer shakeouts, but also fewer fast follow-through moves.

Quality and leverage

Quality screens try to avoid the classic false breakout: a chart that looks great, funded by a weak balance sheet. Leverage screens aim at the same pain point. Deep drawdowns.

FilterMetric exampleWin rateWorst drawdown
None—54%-32%
ProfitabilityROE > 10%57%-26%
Cash generationFCF margin > 5%58%-24%
Lower leverageDebt/EBITDA < 256%-22%

The “win-rate gain” matters less than the drawdown shrinkage when markets turn hostile.

Earnings catalyst

Earnings are a regime switch for breakouts. The same pattern can become a coin flip when a gap can overwrite your stop.

Breakouts taken within an earnings window often show wider dispersion: some monster wins, more sudden losses. Win rate can look similar or slightly worse, while worst-case outcomes get uglier due to overnight gaps.

If you don’t model gap risk, you’re grading the trade on a curve you didn’t agree to.

Combined filter recipes

You want filter stacks that keep the 12‑month breakout signal intact while controlling trade quality and opportunity flow. The goal is simple: balance win rate, expectancy, and frequency so you can actually deploy it.

Filter stackWin rate effectExpectancy effectFrequency effect
Baseline: 12m highNeutralMixedHighest
+ Trend: >200DMAUpUpDown
+ Liquidity: $ volumeSlight upUpDown
+ Volatility: ATR% capUpMixedDown
+ Market regime: index >200DMAUpUpLowest

If you need one default, start with trend + liquidity, then tighten only when drawdowns force you. For academic context on why 12‑month highs can work, see the 52-week high strategy research.

Blog image

Real-world walk-through

One clean case study makes the filters feel real. Here’s a single trade sequence from signal to exit, with the messy parts included.

Signal and context

On 2023-11-06, $NVDA printed a 12-month breakout above 476.00, closing near 482.00. Volume came in around 1.6× its 50-day average, and the prior high was taken out in one session.

Market regime: S&P 500 was above its 200-day, and the 50-day had turned up two weeks earlier. Filter results: market filter pass, liquidity pass, “no earnings in 5 days” pass, but a tight “RSI < 75” filter failed at ~78.

That one failed filter is where your rules stop being theory and start costing, or saving, money.

Execution and costs

How you enter matters because breakouts are already paying a premium. You want the fill to be boring.

  • Entered on next open after signal close
  • Used stop-entry as backup, 476.50 trigger
  • Estimated slippage: 0.10% of price
  • Commissions: $0.01/share equivalent
  • Costs reduced trade expectancy by ~0.15R

If your average edge is under 0.3R, “tiny” costs are the whole edge.

Management and exit

You need one stop for survival and one for profit capture. Without both, you’ll improvise when it hurts.

  1. Initial stop: 2×ATR(14) below entry, set at ~454.00.
  2. Trailing: ratcheted to 10-day low, updated after each close.
  3. Time stop: exit if no new high in 20 sessions.
  4. Exit trigger: close below the 10-day low on 2023-12-20.
  5. Stats: holding 32 sessions, MFE +12.4%, MAE -4.1%.

Your exit rule defines your “win-rate,” because most breakouts win until they don’t.

Lessons learned

One trade won’t validate anything, but it will expose weak logic fast. The goal is fewer heroic assumptions.

  • Market filter did the heavy lifting, not the stock filter
  • Extra thresholds felt “smart” but smelled like overfitting
  • Next test: log filter conflicts, then simplify to two gates

If you can’t explain why a filter exists in one sentence, it probably shouldn’t.

Turn the results into a repeatable breakout playbook

  1. Start with the tested baseline: use the exact breakout definition and outcome metrics from the setup so your comparisons stay apples-to-apples.
  2. Add one filter at a time: apply the best-performing regime filter first (trend/breadth/volatility/recession proxy), then layer a single stock screen (liquidity, volatility constraint, quality/leverage, or earnings catalyst) and re-check win rate and payoff.
  3. Choose a combined recipe from the table: pick the mix that matches your objective—highest win rate, best expectancy, or most stable results across regimes.
  4. Operationalize it: define entry timing, position sizing, slippage/commission assumptions, and a rules-based exit—then track when the market context changes so you know when to throttle exposure or stand aside.

Turn Filters Into Watchlists

Testing breakout win-rates is the easy part; applying the right market and stock-level filters every day—without missing regime shifts—is what takes real time.

Open Swing Trading updates daily RS rankings, breadth, and sector/theme rotation across ~5,000 stocks so you can find potential breakout leaders faster—get 7-day free access with no credit card.

Back to Blog

Built for swing traders who trade with data, not emotion.

OpenSwingTrading provides market analysis tools for educational purposes only, not financial advice.