Momentum strategy

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.

Production
Momentum / Breakout
US equities
Scanner
Backtest

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).

35.1%
Win rate
1.37
Profit factor
+0.96%
Avg / trade
Max drawdown
n/a
CAGR
not published
Exposure
not published
459
Total trades
35d
Avg holding

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)

  1. Market is risk-on (Supertrend regime).
  2. Close above the 50-day SMA.
  3. 50-day SMA above a rising 200-day SMA.
  4. Within 10% of the 52-week high.
  5. A tight (~≤15% deep), volatility-contracting base over ~20 days.
  6. Close above the base high (the breakout).
  7. 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.

ComponentMaxDriven by
marketTrend15risk-on market
trendQuality20above 50-MA, 50>200, 200 rising
relativeStrength15proximity to the 52-week high
volumeConfirmation20breakout volume vs average
volatilityContraction15tight base + contracting ATR
breakoutQuality15close 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).
DimensionIdeal
MarketRisk-on, trending US equities with clear sector leadership.
TraderActive momentum/breakout swing trader who can take many small losses to catch the big winners, and manages exits.
TimeframeDaily bars; swing-to-position holds (weeks).
Avoid whenRisk-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_breakout fetches 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
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
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
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.*