跳轉到

Momentum Discovery

Momentum Discovery is the admin-only research page behind /momentum/discovery. It is separate from /momentum and /momentum/early:

  • /momentum is the confirmed Momentum Leaders report.
  • /momentum/early is the Early Momentum Radar for setup timing.
  • /momentum/discovery is for broader candidate discovery and quality audit.

Current scope

Discovery uses an expanded_bars_universe: symbols already present in the grouped-daily DuckDB bars table, with sufficient history, minimum price, symbol-shape, and liquidity filters. This expands beyond the 518-symbol Momentum core, but it is still not a formal exchange master. A future reference-data ingest should replace the symbol-shape filter for definitive delisting/ADR/ETF/common-stock classification.

Screen Groups

The page reads discovery_screens from the latest Momentum snapshot and renders four groups:

Group Purpose
liquid_breakouts Higher-quality breakouts with enough technical score and volume participation.
early_base_breakouts Earlier setup-stage names that are not yet too extended.
high_flow_confirmation Names where FMP or Unusual Whales confirmation is unusually strong.
filtered_low_quality Rows that were visible during discovery but failed quality gates; shown for audit instead of silent promotion.

Manual Refresh

Admins can use Run now on /momentum/discovery to queue the shared Momentum pipeline. It calls the same POST /api/v1/admin/momentum/run endpoint used by /momentum and /momentum/early.

Run now is not a Discovery-only job. It rebuilds the latest Momentum snapshot, including the main leaderboard, Early Momentum, and discovery_screens. First-ever runs may need to backfill history; normal refreshes usually complete faster. After the worker finishes, use Refresh to load the new snapshot. On weekends or US market holidays, the task rebuilds the latest available trading-day snapshot.

Quality Gates

Default gates are centralized in momentum_screener/screener_config.py:

  • minimum price;
  • minimum technical score;
  • minimum volume ratio;
  • minimum 20-day average dollar volume for expanded bars-universe inclusion;
  • separate volume-confirmation ratio for liquid breakouts;
  • maximum 20-day run-up and MA20 stretch for early-base rows;
  • high-confirmation threshold for FMP/UW-supported discovery rows.

Low-quality rows carry flags such as low_price, low_volume, weak_technical_score, and ma_not_aligned. These flags are there to explain why a row should not be treated like a clean leader.

Discovery can use the same FMP and Unusual Whales context as the main and early Momentum pages. Paid context is still confirmation, not a standalone stock picker. To control API cost, FMP/UW are re-read only for a capped technical Discovery shortlist after the bars-based scan, not for every symbol in the expanded universe. The page should make it clear when a name is technically strong, when it is mostly paid-data confirmed, and when the row is included only for audit.

Product Boundary

Discovery is the right surface for the broader scan because it can absorb more noisy candidates without diluting the confirmed Top 20. The primary Momentum leaderboard can stay on the curated core universe while Discovery reports its own expanded universe size.

The output is descriptive market research, not investment advice.