Reference
Parameters
Every filter, threshold, and gate the screener runs on, broken out by category. This mirrors config/thresholds.yaml and the screener code directly — not marketing copy.
Universe FiltersSelects stocks4 params
Applied before a single gate runs — narrows ~1,000+ US tech stocks down to a screenable pool.
| Parameter | Value |
|---|---|
| Sector | Technology |
| Min market cap | $1B |
| Min avg daily $ volume | $20M/day |
| Analyst consensus floor | Buy or better Enforced at the Finviz fetch level via the fa_recom_buy URL filter — not a post-fetch check. |
The 8 Screening GatesSelects stocks8 params
A stock must pass every gate to be eligible for ranking. Gates 4 and 6 are structural placeholders — Finviz has no cash-flow or options-flow data, so they always pass as N/A. Gates 7-8 (added 2026-07-10) were derived from the real percentile distribution of the production universe, not textbook defaults — deliberately loose, excluding only extreme-tail risk.
| Parameter | Value |
|---|---|
| 1Gate 1 · Momentum | Price > SMA50 AND SMA200; 1M perf > 0; 3M perf > 0 |
| 2Gate 2 · Profit | P/E > 0; EPS growth > 0 EPS-growth field is Finviz "eps growth this year" — a forward analyst estimate, not realized trailing YoY. |
| 3Gate 3 · Revenue | 5-year sales CAGR ≥ 20% QoQ non-deceleration sub-check is N/A in production — Finviz doesn’t expose prior-quarter growth. |
| 4Gate 4 · Cash Flow | FCF or OCF positive |
| 5Gate 5 · Sentiment | Buy+ analyst consensus Enforced at fetch — this gate always passes at screen time. |
| 6Gate 6 · Options | Call/put ratio ≥ 1.0 |
| 7Gate 7 · Ownership | Short float < 20% Excludes only extreme short-interest tail risk (crowded-short/squeeze volatility) — production universe p75 was 11.5%. |
| 8Gate 8 · Financial Health | Current ratio ≥ 1.0 AND gross margin ≥ 0% AND debt/equity ≤ 2.0 Bundled 3-check gate. Missing data on any sub-check passes through as N/A rather than failing. |
Note: Missing data on gates 1–3, 7, and 8 passes through as N/A rather than failing — a stock isn’t penalized for a data gap it can’t control.
Valuation Hard ExclusionsSelects stocks1 param
Applied after all 8 gates pass. An excluded stock is dropped from ranking entirely — it never appears in the top 10, no matter how well it scored.
| Parameter | Value |
|---|---|
| PEG ceiling | PEG > 2.0 excluded |
Soft FlagsWarning only2 params
Attached to a ranked stock as a caution note — never blocks a pick or affects its rank.
| Parameter | Value |
|---|---|
| EXTENDED | Price > 125% of 50-day SMA Adds a pullback-zone suggestion to the email. |
| Overbought | RSI(14) > 70 |
Ranking & Composite ScoreSelects stocks2 params
Determines which eligible stocks become the day’s top 10, and in what order.
| Parameter | Value |
|---|---|
| Top N | 10 |
| Scored dimensions | Momentum, Profit, Revenue, Cash Flow, Sentiment, Options — equal weight (1.0 each) Gates 7–8 (Ownership, Financial Health) are pass/fail only and don’t contribute a subscore — the composite score summarizes 6 dimensions, not all 8 gates. |
Risk & Position SizingSizing / exit — not selection4 params
Governs how much capital a hypothetical position uses and where its stop-loss sits. Does not affect which stocks get picked.
| Parameter | Value |
|---|---|
| Capital base | $5,000 |
| Risk per trade | 2% (~$100) |
| Flat trailing stop | 12% below reference high Reference high = 52-week high, or current price if unavailable. Not 12% off current/entry price. |
| ATR stop multiplier | 2.5× ATR |
Sell-Signal EngineSizing / exit — not selection4 params
Runs each morning against positions in the Alpaca paper account (config/holdings.yaml is a fallback for local testing only) — flags exit conditions on current positions. Does not affect which stocks get picked.
| Parameter | Value |
|---|---|
| Deteriorating fundamentals | EPS growth negative AND (QoQ decel OR 5Y CAGR negative) QoQ decel is always N/A in production, so this reduces to EPS negative AND 5Y CAGR negative. |
| Sentiment breakdown | Consensus → Sell / Strong Sell / Underperform / Underweight |
| Sentiment softened | Consensus → Hold / Neutral / Market Perform / Peer Perform Monitor-only, lower severity than a breakdown. |
| Stop-loss | Price < entry price × 0.90 Static, flat 10% off entry — decided 2026-07-11. Never trails, same rule for every position, no per-position override. Unrelated to the Risk & Position Sizing category’s trailing-stop values, which only apply to brand-new picks. |
Alpaca Paper TradingBuilt, disabled2 params
Places real orders against an Alpaca paper (fake-money) account. Off by default — requires explicit sign-off to enable.
| Parameter | Value |
|---|---|
| Enabled | false Kill-switch. Never flipped without explicit sign-off — see CLAUDE.md. |
| Notional per pick | $500 (fractional shares) $500 × 10 picks = $5,000/day if enabled. |
Operational & DeliveryNot a filter3 params
How and when the result actually reaches an inbox — doesn’t affect stock selection.
| Parameter | Value |
|---|---|
| Send email | send_direct: true |
| Recipients | Sage, Ashwad |
| Schedule | 9:00am ET summer / 8:00am ET winter Authoritative cron lives in .github/workflows/screener.yml, not config/thresholds.yaml. |
Not currently gated, by design: Dividend Yield (66.6% of the universe pays none — this is a momentum screener, not a value screener), ROE / ROA / ROIC / Operating Margin / Profit Margin (redundant with the gates above — stacking correlated profitability checks risks over-filtering), Insider/Institutional Ownership + Transactions (no discriminating power in this cap range), Short Ratio, Quick Ratio. These were evaluated against real production data and deliberately excluded, not overlooked.
↑ Back to top