Momentum Breakout
An objective scanner for stocks breaking out of a tight, volatility-contracting base near 52-week highs on expanding volume — only while the market is risk-on.
Performance
Real internal-backtest statistics from the registry — Internal universe backtest · 42 US large-caps, regime-gated entries, 50-day-MA exit · 459 trades · 2005–2026 (Yahoo Finance).
CAGR and exposure are not published for the library yet — we show “—” rather than invent them. Max drawdown, best year and worst year are undefined for the pooled Momentum universe backtest. Win rate is a share of trades, average return is per trade, and holding period is in trading days.
Historical pattern
No fixed-window historical pattern is published for this strategy — its holding period is variable (or, for a market-wide read, there is no single held window), so a single averaged return path would misrepresent it. Use the backtest for its full trade-by-trade history instead. We never fabricate a curve.
Momentum Breakout looks for the classic footprint of institutional accumulation: a durable uptrend, a tight volatility-contracting base near the highs, and a volume-backed breakout — but only in a healthy (risk-on) market. It is primarily a scanner (GET /api/scan?strategy=momentum_breakout) returning today's matching stocks, each with a full trade plan.
Best for
Healthy, risk-on, trending markets with clear leadership, where clean breakouts follow through.
Avoid when
Choppy or risk-off markets and low-liquidity names, where breakouts fail and reverse. The market-regime filter suppresses signals in risk-off tapes to mitigate this.
Market behaviour exploited
Institutional accumulation — buyers stepping in with size after a quiet consolidation tend to keep pushing price.
Durable uptrends, tight bases and volume expansion cluster around real accumulation. Requiring all of them — plus a rising 200-day trend and a risk-on market — filters out most low-quality breakouts. Inspired by the shared principles of classic momentum traders (Minervini, Kullamägi, O'Neil, Darvas) without copying any one method; every rule is a fixed numeric test.
Entry — a BUY requires ALL of (evaluateMomentumBreakout)
- Market is risk-on (Supertrend regime).
- Close above the 50-day SMA.
- 50-day SMA above a rising 200-day SMA.
- Within 10% of the 52-week high.
- A tight (~≤15% deep), volatility-contracting base over ~20 days.
- Close above the base high (the breakout).
- Breakout volume ≥ 1.5× the 50-day average.
Entry = the breakout close; stop = the base low (an objective structural stop, reported with a risk %). The live scanner defines no timed exit.
Backtest methodology (universe)
Because it is cross-sectional with no single-symbol timed exit, the backtest:
- runs the real entry rules (regime-gated, as-of each session) across a fixed universe of 42 liquid US large-caps,
- applies one explicit, documented exit — a close back below the 50-day SMA (a standard trend-following exit that exists only in the backtest; the live scanner is unchanged),
- pools every symbol's round-trips and summarises them.
Deterministic, from buildConfidence. confidenceScore is a setup-quality measure (0–100), not a probability of profit. On /api/scan it is populated per match; the live /api/strategies state is neutral (null) and points you to the scanner.
| Component | Max | Driven by |
|---|---|---|
marketTrend | 15 | risk-on market |
trendQuality | 20 | above 50-MA, 50>200, 200 rising |
relativeStrength | 15 | proximity to the 52-week high |
volumeConfirmation | 20 | breakout volume vs average |
volatilityContraction | 15 | tight base + contracting ATR |
breakoutQuality | 15 | close above the base high |
A bare BUY ≈ 73 (Good); a textbook breakout → 100 (Exceptional). Bands: <70 Weak · 70–79 Good · 80–89 Strong · 90–100 Exceptional.
The scanner returns the labels of the rules that passed (a full BUY shows all of):
- Market risk-on
- Above 50-day MA
- 50-day MA above 200-day MA
- 200-day MA rising
- Within 10% of 52-week high
- Tight consolidation base
- Volatility contracting
- Breaking out above base
- Volume surge (≥1.5× average)
- Enter at the breakout close; stop at the base low; manage the exit yourself (the backtest uses a 50-day-MA exit).
- Positive expectancy from asymmetric payoffs — PF 1.37 with big winners despite a low win rate.
- Objective, no-chart-reading screen of institutional-quality setups, gated by market regime.
- Real structural stop at the base low (risk % reported) — objective risk management.
- Cross-sectional — scans a whole universe for leadership, not a single instrument.
- Low win rate / negative median trade — psychologically hard; most trades lose a little.
- Whipsaw-prone in choppy/risk-off tapes — failed breakouts; the regime filter helps but doesn't eliminate them.
- No portfolio-level drawdown from the pooled backtest (see §4) — sizing/risk-of-ruin must be managed by the trader.
- Costs matter — frequent trading; the close-to-close backtest models no commissions/slippage.
- Fixed backtest universe — 42 large-caps, not the full shifting S&P 500 (chosen for reproducibility and live speed).
| Dimension | Ideal |
|---|---|
| Market | Risk-on, trending US equities with clear sector leadership. |
| Trader | Active momentum/breakout swing trader who can take many small losses to catch the big winners, and manages exits. |
| Timeframe | Daily bars; swing-to-position holds (weeks). |
| Avoid when | Risk-off/choppy markets; illiquid names; or when costs would erode the edge. |
- Universe backtest, not a portfolio. Per-trade stats are honest; portfolio return/drawdown are a labelled pooled-sequential proxy (§4).
- Heavier endpoint.
/api/backtest?strategy=momentum_breakoutfetches the whole universe, so it is slower than a single-symbol backtest. - Backtest exit ≠ live rule. The 50-day-MA exit exists only in the backtest methodology; the live scanner is entry-only (with a base-low stop).
- Single-vendor, close-to-close. Yahoo prices; 2005–2026; no costs modelled.
API examples
Real responses from the live endpoints for this strategy.
Live strategy
GET /api/strategies?id=momentum_breakout{
"id": "momentum_breakout",
"name": "Momentum Breakout",
"category": "Technical",
"asset": "US equities",
"description": "WHAT IT IS: Momentum Breakout is Raspberry's own objective, rules-based breakout screen … (full prose)",
"historical": {
"yearsTested": 21, "winRate": 0.3508, "averageReturn": 0.96,
"bestYear": null, "worstYear": null, "maxDrawdown": null,
"averageHoldingPeriod": 35, "profitFactor": 1.37, "totalTrades": 459,
"source": "Internal universe backtest · 42 US large-caps, regime-gated entries, 50-day-MA exit · 459 trades · 2005–2026 (Yahoo Finance)"
},
"historicalPattern": null,
"status": "Active",
"entryDate": "", "exitDate": "", "daysUntilEntry": 0,
"entryPrice": null, "stopLoss": null, "firstTarget": null,
"riskPercent": null, "rewardRiskRatio": null,
"confidenceScore": null, "confidenceBreakdown": null,
"explanation": "Momentum Breakout is a stock-selection screen: it does not evaluate a single instrument here. Call /api/scan?strategy=momentum_breakout to get today's matching stocks, each with a full trade plan.",
"checklist": [],
"score": 15, "recommended": false, "weight": "none"
}Scanner
GET /api/scan?strategy=momentum_breakout{
"strategy": "momentum_breakout",
"supported": true,
"scanned": 500,
"matches": [
{
"symbol": "NVDA",
"signal": "BUY",
"score": 91,
"reasons": { "marketRiskOn": true, "aboveSma50": true, "sma50AboveSma200": true, "sma200Rising": true, "within10pctOfHigh": true, "tightBase": true, "volatilityContracting": true, "breakoutAboveBase": true, "volumeSurge": true },
"metrics": { "close": 178.42, "breakoutPrice": 176.10, "stop": 168.90, "volumeRatio": 2.11 },
"entryPrice": 178.42,
"stopLoss": 168.90,
"firstTarget": null,
"riskPercent": 5.34,
"rewardRiskRatio": null,
"confidenceScore": 94,
"confidenceBreakdown": { "marketTrend": 15, "trendQuality": 20, "relativeStrength": 14, "volumeConfirmation": 18, "volatilityContraction": 12, "breakoutQuality": 15 },
"explanation": "NVDA rates 94/100 — an exceptional setup by the Momentum Breakout rules…",
"checklist": ["Market risk-on", "Above 50-day MA", "50-day MA above 200-day MA", "200-day MA rising", "Within 10% of 52-week high", "Tight consolidation base", "Volatility contracting", "Breaking out above base", "Volume surge (≥1.5× average)"]
}
],
"skipped": []
}Backtest
GET /api/backtest?strategy=momentum_breakout{
"strategy": "momentum_breakout",
"symbol": "42 US large-caps (fixed universe)",
"range": { "requestedFrom": null, "requestedTo": null, "testedFrom": "2005-01-03", "testedTo": "2026-08-04", "barsTested": 5430 },
"metrics": {
"totalTrades": 459, "winningTrades": 161, "losingTrades": 298,
"winRate": 0.3508, "averageReturn": 0.0096, "medianReturn": -0.0186,
"bestTrade": 0.6832, "worstTrade": -0.1579, "averageHoldingPeriod": 35.36,
"profitFactor": 1.3713, "totalReturn": 10.5001, "maxDrawdown": 0.8821
},
"sampleTrades": [
{ "entryDate": "2026-05-20", "exitDate": "2026-07-28", "entryPrice": 982.12, "exitPrice": 1033.34, "return": 0.0522, "holdingDays": 46 }
],
"openTradeEntryDate": null
}References
- Mark Minervini, Trade Like a Stock Market Wizard; William O'Neil, How to Make Money in Stocks; Nicolas Darvas, How I Made $2,000,000 in the Stock Market — the shared breakout principles this screen draws on (copying none).
- Backtest data: 42 US large-caps daily OHLCV via Yahoo Finance, 2005–2026 (
lib/market-data/prices.ts); regime gate from SPY + QQQ.
*Past behaviour does not ensure future results. confidenceScore measures setup quality, not the probability of profit.*