Reference

Vocabulary

Plain-English definitions for every finance and screening term used in [sage]SIGNALS — with concrete examples.

Universe & Filters
Universe

The full pool of stocks eligible to be screened. [sage]SIGNALS starts with 1,000+ US technology stocks and narrows them using market cap, volume, and analyst consensus before any gate runs.

Example

On a typical day, the universe contains ~1,200 tech stocks. After pre-filters, about 400 make it to the gate stage.

Market CapMkt Cap

Market capitalization — the total dollar value of a company's outstanding shares. Calculated as share price × total shares outstanding. The screener requires mid-cap and above (≥ $1B).

Example

NVDA has a market cap of ~$3T. A $900M company would be filtered out before the gates run.

Mid-Cap

A company with a market cap generally between $2B and $10B. The screener's $1B floor includes small-to-mid-cap stocks and above, filtering out micro-caps that are too illiquid or volatile.

Example

CRDO (Credo Technology) is a mid-cap stock that frequently appears in screener results.

Average Daily VolumeADV

The average number of shares (or dollar value) traded per day over a recent period. A liquidity floor — the screener requires ≥ $20M/day to ensure you can enter and exit a position without moving the price.

Example

A stock trading only $5M/day would be hard to exit quickly. The screener filters these out.

Analyst Recommendation

A rating issued by Wall Street analysts based on their research — typically Strong Buy, Buy, Hold, Sell, or Strong Sell. The screener requires Buy or better consensus before a stock enters the gate stage.

Example

If 8 of 10 analysts covering GOOGL rate it a Buy, it passes the consensus filter. A stock with mostly Hold ratings gets excluded.

Screener Gates
Gate

A binary pass/fail filter in the screener pipeline. A stock must pass all 8 gates to advance to ranking. Think of each gate as a question: does this stock qualify on this dimension?

Example

Gate 1 asks: is the stock above its 50-day and 200-day moving averages AND up over the past 1 and 3 months? A "no" on any of these fails the gate.

Momentum

Gate 1. Measures whether a stock's price trend is pointing up across multiple timeframes. The screener checks four conditions: price above SMA50, price above SMA200, positive 1-month return, and positive 3-month return.

Example

AMD closes at $180, SMA50 = $165, SMA200 = $150, up 8% in 1M and 12% in 3M. All four checks pass — gate 1 cleared.

Profitability

Gate 2. Checks that the company is earning money (positive trailing P/E) and growing those earnings year-over-year (positive EPS growth). Weeds out money-losing growth stories.

Example

A startup with no earnings has a negative P/E. Gate 2 fails it immediately — even if it's trending beautifully.

Revenue Growth

Gate 3. Requires ≥ 20% 5-year compound annual revenue growth, and that growth is not decelerating quarter-over-quarter. Ensures the business is expanding, not just its stock price.

Example

SNOW grew revenue 30% YoY for 5 years. But if last quarter was 25% and this quarter was 22%, the deceleration check fails gate 3.

Cash FlowCF

Gate 4. Checks that the company generates positive free cash flow (FCF) or operating cash flow (OCF). Currently a structural placeholder — Finviz does not expose this data, so the gate always passes as N/A.

Example

Gate 4 is marked N/A on every email. When a data source for FCF is added, it will activate and could filter out companies that are profitable on paper but cash-flow negative.

Analyst Sentiment

Gate 5. Confirms the stock has Buy-or-better analyst consensus. This is actually enforced at the data fetch step (via a Finviz URL filter), so every stock in the universe already passes gate 5.

Example

If a stock drops from a Buy consensus to a Hold consensus mid-screening, it wouldn't appear in the Finviz fetch at all — it never reaches gate 5.

Options Flow

Gate 6. Would check whether the call/put ratio is ≥ 1.0, indicating bullish options activity. Currently a structural placeholder — Finviz doesn't provide this data, so the gate always passes as N/A.

Example

A stock with 3× more call contracts than put contracts would have a call/put ratio of 3.0 — well above the 1.0 minimum. Gate 6 would pass it when the data is available.

Call/Put Ratio

The ratio of call options volume to put options volume. A ratio above 1.0 means more bullish bets than bearish bets are being placed in the options market — a signal that traders expect the stock to rise.

Example

NVDA has 50,000 call contracts and 20,000 put contracts traded today. Call/put ratio = 2.5. Options traders are leaning strongly bullish.

Technical Indicators
50-Day Simple Moving AverageSMA50

The average closing price of a stock over the past 50 trading days. Acts as a medium-term trend indicator. Price above SMA50 = the stock is in a short-to-medium uptrend.

Example

CRDO closes at $240 with SMA50 at $210. Price is 14% above its 50-day average — a bullish signal. If price drops below SMA50, momentum gate fails.

200-Day Simple Moving AverageSMA200

The average closing price over the past 200 trading days. The standard long-term trend indicator. Price above SMA200 = the stock is in a long-term uptrend. Falling below it is often seen as a bearish regime change.

Example

A stock at $100 with SMA200 at $120 is in a downtrend — it would fail the momentum gate regardless of short-term price action.

RSIRSI

Relative Strength Index — a momentum oscillator that measures how fast a stock has been moving up or down, on a scale of 0–100. Above 70 = overbought (may be due for a pullback). Below 30 = oversold (may bounce).

Example

NVDA had RSI of 78 last Tuesday. The screener still passed it through the gates, but flagged it as "overbought — prefer entry on cool-down."

ATRATR

Average True Range — a measure of how much a stock typically moves per day, in dollar terms. High ATR = volatile stock. Used only for the stop-loss suggestion shown on brand-new picks (stop = current price − 2.5 × ATR) — NOT used to check positions you already hold, which use a flat 10% stop instead (see "Stop-Loss Breach" under Sell Signals).

Example

TSLA has ATR of $12. Entry at $300, so ATR stop = $300 − (2.5 × $12) = $270 — a suggestion shown in the email at pick time, before you buy.

52-Week High

The highest price a stock has traded at over the past 52 weeks (one year). Used in the EXTENDED soft flag and in the stop-loss suggestion shown on brand-new picks (flat 12% below the 52-week high). Positions you already hold do NOT use the 52-week high at all — their stop-loss is a flat 10% off your entry price, and it never moves regardless of how high the stock trades afterward.

Example

RBRK's 52-week high is $100. The stop-loss SUGGESTED for a new pick would be $100 × 0.88 = $88 — but if you already own RBRK from an earlier pick, the actual sell-signal check ignores this number entirely and uses your entry price instead.

Extension

How far a stock's current price is above its 50-day SMA, expressed as a percentage. A stock more than 25% above its SMA50 is flagged as "EXTENDED" — meaning it has moved too fast and chasing it raises the risk of buying near a short-term peak.

Example

NVDA jumps to $150 while SMA50 sits at $110. Extension = (150−110)/110 = 36%. The screener passes NVDA through the gates but flags: "EXTENDED — do not chase, wait for pullback."

Overbought

A condition where a stock's price has risen so quickly that it may be due for a pause or pullback. The screener flags any stock with RSI above 70 as overbought — it passes the gate, but the email notes the elevated RSI.

Example

META rallies 15% in two weeks, pushing RSI to 74. It passes all gates and gets ranked, but the email flags: "overbought — RSI 74; prefer entry on cool-down."

Valuation
P/E RatioP/E

Price-to-Earnings ratio — how much investors are paying per dollar of earnings. Calculated as share price ÷ earnings per share. A positive P/E means the company is profitable. The screener uses P/E as a profitability proxy since Finviz doesn't expose raw EPS.

Example

MSFT trades at $400 with trailing EPS of $12. P/E = 33x. A negative P/E means the company lost money — and fails the profitability gate.

PEG RatioPEG

Price/Earnings-to-Growth ratio — the P/E divided by the expected earnings growth rate. A PEG above 2.0 suggests a stock is overvalued relative to its growth. Stocks with PEG > 2.0 are hard-excluded from the rankings even if they pass all 8 gates.

Example

A stock has P/E of 60 and expected EPS growth of 20%. PEG = 60/20 = 3.0 — above the 2.0 ceiling. It passes all 8 gates but gets dropped at the valuation step.

EPSEPS

Earnings Per Share — a company's net profit divided by the number of outstanding shares. A measure of how profitable a company is on a per-share basis. The screener checks EPS growth year-over-year.

Example

If a company earned $500M last year across 100M shares, EPS = $5. If EPS grows from $5 to $7 this year, that's 40% EPS growth — passes the profitability gate easily.

Short Float

The percentage of a stock's available shares that are currently sold short (borrowed and sold, betting the price falls). Gate 7 excludes stocks above 20% short float — that level signals heavy bear conviction and crowded-short volatility risk (the stock can spike hard on a short squeeze, or break down hard if the bears are right).

Example

A stock has 15M shares available to trade and 4.5M are sold short — 30% short float. That crosses the 20% threshold and fails Gate 7, even if every other gate passes.

Current Ratio

A company's current assets divided by current liabilities — a basic liquidity check (can it cover what it owes in the next 12 months?). Part of Gate 8 (Financial Health); the screener requires at least 1.0.

Example

A company has $200M in current assets and $150M in current liabilities. Current ratio = 1.33 — comfortably above the 1.0 floor, passes this part of Gate 8.

Debt-to-Equity

Total debt divided by shareholder equity — how leveraged a company is. Part of Gate 8 (Financial Health); the screener excludes anything above 2.0x, which only flags genuinely over-levered balance sheets, not normal use of debt.

Example

A company has $80M in debt and $50M in equity. Debt/Equity = 1.6 — under the 2.0 ceiling, passes this part of Gate 8.

CAGRCAGR

Compound Annual Growth Rate — the steady annual rate at which something (like revenue) would have grown to reach a given result over a period. Used in the revenue gate: requires ≥ 20% 5-year revenue CAGR.

Example

A company with $100M revenue in 2019 and $249M in 2024 has a 5Y CAGR of ~20%. Exactly at the gate threshold — it passes.

Ranking & Scoring
Composite Score

A single 0–1 number that summarizes how well a stock scored across 6 scored dimensions (momentum, profitability, revenue, cash flow, sentiment, options — each contributing an equal-weighted subscore). The 2 newer gates (ownership, financial health) are pass/fail only and don't feed the composite score. Stocks are ranked by composite score — the top 10 become the day's picks.

Example

CRDO scores 0.9 on momentum, 0.7 on revenue, 0.8 on sentiment. Its composite score of 0.82 places it #1 on the day. A stock with composite 0.61 might rank #8.

Subscore

A 0–1 score for a single gate dimension that feeds into the composite score. Momentum subscore rewards more passing checks (e.g., above both SMAs and positive 1M and 3M). Revenue subscore rewards higher 5Y CAGR, capped at 100%.

Example

A stock above SMA50 and SMA200 but only up 3M (not 1M) gets a momentum subscore of 0.75 — 3 of 4 checks passed.

Risk Score

A 1–10 number (10 = most dangerous) assigned to each ranked stock. Factors in ATR-based volatility, extension above SMA50, overbought RSI, and whether the P/E is negative. A baseline of 5 is adjusted up or down.

Example

TSLA passes all gates and ranks #4, but its risk score is 8 — high ATR (volatile), 30% above SMA50 (extended), and RSI of 76 (overbought). The email flags these explicitly.

Entry Zone

The price range the screener suggests as a reasonable point to buy a stock. If the stock is near its SMA50 (within 5%), that's flagged as a reasonable entry. If it's extended, the screener says wait for a pullback toward SMA50 first.

Example

RELY trades at $28, SMA50 = $27.50. Entry zone: "current price near 50-day SMA — reasonable entry." The stock hasn't run away from its trend yet.

Stop-Loss

A pre-set price level suggested for a brand-new pick you don't own yet. The screener calculates two: an ATR-based stop (price − 2.5 × ATR) and a flat 12% trailing stop from the 52-week high. The tighter one (higher price) is marked "use this." This is a suggestion shown at pick time — not the same calculation used to check positions you already hold (see "Stop-Loss Breach (Sell Signal)" under Sell Signals, which uses a flat 10% off your entry price instead).

Example

NVDA at $130. ATR stop = $130 − (2.5 × $4) = $120. Flat stop = $140 × 0.88 = $123.20. The flat stop is tighter, so the email marks it: "$123.20 (12% trailing) ← use this | $120 (2.5×ATR)."

Trailing Stop

A stop-loss that follows a stock's price upward but never moves down. This concept only applies to the stop-loss SUGGESTED for brand-new picks (flat 12% below the 52-week high) — as of 2026-07-11, the stop-loss that actually checks positions you already hold is NOT trailing at all. It's fixed at 10% below your entry price forever, even if the stock runs way up afterward.

Example

A new pick's suggested stop trails upward as the stock hits new highs. But once you actually own it, the real sell-signal check ignores that entirely — if you buy CRDO at $200, your stop-loss is a flat $180 (10% below $200), full stop, no matter how high CRDO later trades.

Soft Flag

A warning note attached to a ranked stock — not a disqualifier, but a caution. Soft flags appear in the email for conditions like: extended above SMA50 by 25%+, RSI above 70, or missing QoQ revenue data.

Example

NVDA passes all 8 gates and ranks #2. Soft flag: "EXTENDED — 38% above 50-day SMA; do not chase — wait for pullback to ~$118–$124." You can still buy it, but the email warns you.

Hard Exclusion

A valuation filter that disqualifies a stock from the rankings even after it passes all 8 gates. One trigger: PEG ratio above 2.0.

Example

SNOW passes all 8 gates but has a PEG of 2.4. It gets hard-excluded at the valuation step and never appears in the top 10.

Top Strengths

The 2–3 gate dimensions a stock scored highest on. Pulled from the subscores and included in the daily email to explain why a stock ranked where it did.

Example

FLYW ranks #3. Top strengths: "revenue growth, analyst sentiment, price momentum." These are the three subscores that pushed it above other eligible stocks.

Performance Tracking
Paper Trade

A simulated trade — logged and tracked like a real trade, but no actual money changes hands. All [sage]SIGNALS picks are paper-traded while the model is being validated. This lets us measure performance without financial risk.

Example

On July 7, the screener picks CRDO at $237. We log it as a paper trade. On July 14 (T+7), CRDO closes at $252. The paper trade shows a +6.3% return for that pick.

Trading Day

A day the NYSE is open — a weekday that isn't a market holiday. Weekends never count, and a handful of holidays each year (New Year's, MLK Day, Presidents' Day, Good Friday, Memorial Day, Juneteenth, July 4th, Labor Day, Thanksgiving, Christmas) don't either. When a holiday falls on a weekend, NYSE observes it on the nearest weekday instead — main.py's is_trading_day() encodes the exact list. Matters both for when the screener actually runs (it skips non-trading days) and for how forward-price checkpoints resolve on a closed market (see T+1/T+7/T+30/T+90 below).

Example

July 4, 2026 falls on a Saturday, so NYSE observes the holiday on the preceding Friday, July 3 — meaning July 2, 3, and 4 are Thursday (open), Friday (closed, holiday) and Saturday (closed, weekend) back to back. A screener run mistakenly triggered on either closed day would just be re-reading Thursday's stale prices.

T+1 / T+7 / T+30 / T+90

Forward price checkpoints, measured in full calendar days after the pick date (weekends and holidays count). T = pick date. T+1 = next day. T+7 = one week later. T+30 = about a month later. T+90 = about a quarter later. If a checkpoint lands on a day the market's closed, it uses the most recent close before it. Used to evaluate how each pick performed over time.

Example

RELY picked Tuesday, July 7 (T). T+1 = Wednesday, July 8. T+7 = Tuesday, July 14. T+30 = Thursday, August 6. T+90 = Monday, October 5. Each close price is fetched from Polygon.io and stored in Supabase.

Hit Rate

The percentage of picks that were profitable at a given time horizon. A hit rate above 50% means the model is picking more winners than losers.

Example

After 3 weeks of paper trading, 14 of 20 resolved picks were positive at T+7. Hit rate = 70% — well above the 50% random baseline.

Alpha

The return of the screener's picks above and beyond what QQQ (the tech benchmark) returned over the same period. Positive alpha = the model is outperforming passive tech investing.

Example

In week 2, [sage]SIGNALS picks returned an average of +4.2% at T+7. QQQ returned +1.8% over the same window. Alpha = 4.2 − 1.8 = +2.4%. The model beat the index.

QQQ

The Invesco QQQ ETF — tracks the Nasdaq-100, a basket of the 100 largest non-financial companies on the Nasdaq. Used as the benchmark for [sage]SIGNALS because it represents the tech-heavy market the screener competes against.

Example

If QQQ returns +2% over a two-week period and [sage]SIGNALS picks return +5% on average, the model is generating alpha vs the benchmark.

Benchmark

A reference index used to measure the screener's relative performance. [sage]SIGNALS uses QQQ. If the picks don't consistently beat QQQ, you'd be better off just buying QQQ and doing nothing.

Example

Over 8 weeks, [sage]SIGNALS average pick returns +3.1% at T+7. QQQ returns +2.6% over the same windows. The model is beating the benchmark — but 8 weeks isn't statistically conclusive yet.

Validation Period

The paper-trading phase before any real capital is deployed. The model needs 12–16 weeks of consistent data to establish statistical confidence that its hit rate and alpha are real, not noise.

Example

We're currently on day 5 of validation (as of July 7, 2026). Full statistical validation requires roughly 12 weeks minimum. No real capital moves until Sage and Ashwad formally exit this phase.

Percentile Rank

Where a stock's score or return falls relative to all other stocks in the same run. A stock in the 90th percentile scored higher than 90% of all screened stocks that day.

Example

CRDO has a composite score of 0.84, higher than 95% of the 80 stocks that passed all gates today. Its percentile rank is 95th — which is why it's #1.

Reward-to-Risk RatioR:R

How much you stand to gain divided by how much you stand to lose on a trade — the distance from your entry to your target, over the distance from your entry to your stop. Saying an entry and a stop are "too close together" is really saying the reward-to-risk ratio is too low to justify the trade.

Example

Buy RELY at $23.17 with a stop at $21.00 and a target of $28.00: you risk $2.17 to make $4.83, an R:R of about 2.2 to 1.

Whipsaw

Getting stopped out by ordinary price noise, then watching the stock immediately reverse back in your original direction. The failure mode of a stop set tighter than a stock’s normal daily movement.

Example

CRDO was stopped out around $196–203 on 2026-07-17 and traded at $282.82 a month later.

Backtest

Replaying a rule against history to see what it would have done, instead of guessing from a few memorable trades. Its answer is only as good as the period it covers.

Example

Replaying 14 stop-loss rules over 310 past picks showed every one of them made less money than simply holding — in a window where the market only rose.

Market RegimeRegime

The prevailing market environment — rising, falling, or choppy. Stop-loss rules behave oppositely across regimes, so a rule tested in only one of them has not really been tested.

Example

The paper-trade record so far covers one rising regime: QQQ +2.6%, deepest dip 9.6%, fully recovered.

Survivorship Bias

Drawing conclusions from the cases that survived and are therefore memorable, while the ones that quietly failed never come to mind. It makes a rule look better or worse than it was.

Example

CRDO and SKHY stand out because they both recovered. The picks where a stop correctly avoided a deeper fall are just as real and far easier to forget.

Look-Ahead Bias

Letting a backtest use information that would not have been available at the time, which makes results look better than anything achievable in reality.

Example

A stop must not be allowed to fire on the same bar the position was opened — that bar had already traded before the trade existed.

Sell Signals
Sell Signal

An automated flag generated each morning for positions currently held (read from your Alpaca paper account). Three triggers: deteriorating EPS or revenue growth, analyst sentiment breakdown or softening, or a stop-loss breach.

Example

You hold SHOP from a pick 3 weeks ago. This morning, the screener detects the price has fallen 13% below your entry price — breaching the 10% stop-loss. A sell signal fires in the email.

Stop-Loss Breach (Sell Signal)

A held position's sell-signal stop-loss trigger: current price below entry price × 0.90 (a flat 10% below your entry, set 2026-07-11). Static — it never moves as the stock rises, and it's the same 10% for every position, no exceptions. Not to be confused with the "Stop-Loss" shown for brand-new picks (see Ranking & Scoring) — that's a different, unrelated calculation for stocks you don't own yet.

Example

You buy NVDA at an average price of $200 (across two purchases). Stop-loss = $200 × 0.90 = $180. If NVDA drops to $179, a sell signal fires — regardless of how high it traded in between.

Alpaca Paper Account

A fake-money brokerage account (via the Alpaca API) where Sage and Ashwad place trades manually to track this strategy in real time. sageSignals never places orders automatically — it only reads the account (positions, balance) each morning to check sell signals and show them on the /positions dashboard page.

Example

You buy $500 of NVDA in the Alpaca app yourself. The next morning, sageSignals sees that position, checks it against its sell-signal rules, and includes it in the daily email — no code ever clicked "buy."

DCA (Dollar-Cost-Average)DCA

When you buy the same stock more than once at different prices, your "entry price" becomes the blended average across all purchases — not your original buy price. sageSignals uses this average (pulled directly from Alpaca) as the entry price for stop-loss calculations.

Example

You buy NVDA at $210, then buy more later at $225. Your DCA entry price is roughly $217 (weighted by how many shares you bought at each price) — that's the number the stop-loss math uses, not $210.

Unrealized P&L

The paper gain or loss on a position you're still holding — "unrealized" because you haven't sold yet, so it's not locked in. Shown in dollars and as a percentage on the /positions dashboard page.

Example

You bought NVDA at $160 and it's now $210.96. Unrealized P&L = +$50.96/share, or about +31.9%. If you sell today, that becomes a realized gain; until then, it can still go up or down.

Data & Infrastructure
Finviz

The primary data source for [sage]SIGNALS. The screener fetches 6 different Finviz "views" per run (overview, valuation, ownership, performance, financial, technical) and merges them by ticker to build a complete data picture of each stock.

Example

The overview view gives market cap and P/E. The technical view gives SMA50, SMA200, and RSI. Merging all 6 views gives each stock ~35 data points to screen against.

Polygon.io

The data provider used to fetch historical closing prices for forward price tracking. A separate backfill job runs at 4:30pm ET each weekday to pull T+1 through T+90 closing prices for all picked stocks.

Example

RELY was picked on July 7. Polygon.io provides its closing prices on July 8 (T+1), July 14 (T+7), August 6 (T+30), and October 5 (T+90) as those dates pass.

GitHub Actions

The automation platform that runs the screener on a schedule. A cron job triggers the full pipeline at 9:00am ET every weekday (Monday–Friday). No manual intervention required.

Example

Even if Sage is asleep, the screener runs at exactly 9:00am ET on Tuesday morning, screens the universe, ranks picks, and sends the email automatically.

Cron

A time-based job scheduler — the mechanism that tells GitHub Actions "run this pipeline at exactly this time on these days." The screener cron is set to `0 13 * * 1-5` (UTC), which maps to 9:00am ET.

Example

`0 13 * * 1-5` means: at minute 0, hour 13 (UTC), every day of the month, every month, Monday through Friday. That's 9am ET in summer (EDT).

Supabase

The PostgreSQL database that stores all paper trade data, forward prices, QQQ benchmarks, and run metadata. The dashboard reads from Supabase to display performance analytics.

Example

After a run, each of the 10 picks is written to the `paper_trades` table in Supabase. As T+7 prices resolve, they're written to `forward_prices`. The dashboard queries both to calculate hit rate and alpha.

Daily BarOHLC

One day of trading summarised as four prices: open, high, low, and close. The low is what tells you whether a stop-loss level was actually touched — a closing price alone cannot.

Example

CRDO closed at $177.45 on 2026-07-29 having traded down to $177.00 during the session. A stop between those two numbers is unanswerable from closes.