Reference
Vocabulary
Plain-English definitions for every finance and screening term used in [sage]SIGNALS — with concrete examples.
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.
On a typical day, the universe contains ~1,200 tech stocks. After pre-filters, about 400 make it to the gate stage.
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).
NVDA has a market cap of ~$3T. A $900M company would be filtered out before the gates run.
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.
CRDO (Credo Technology) is a mid-cap stock that frequently appears in screener results.
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.
A stock trading only $5M/day would be hard to exit quickly. The screener filters these out.
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.
If 8 of 10 analysts covering GOOGL rate it a Buy, it passes the consensus filter. A stock with mostly Hold ratings gets excluded.
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?
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.
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.
AMD closes at $180, SMA50 = $165, SMA200 = $150, up 8% in 1M and 12% in 3M. All four checks pass — gate 1 cleared.
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.
A startup with no earnings has a negative P/E. Gate 2 fails it immediately — even if it's trending beautifully.
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.
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.
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.
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.
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.
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.
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.
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.
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.
NVDA has 50,000 call contracts and 20,000 put contracts traded today. Call/put ratio = 2.5. Options traders are leaning strongly bullish.
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.
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.
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.
A stock at $100 with SMA200 at $120 is in a downtrend — it would fail the momentum gate regardless of short-term price action.
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).
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."
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).
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.
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.
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.
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.
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."
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.
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."
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
A company with $100M revenue in 2019 and $249M in 2024 has a 5Y CAGR of ~20%. Exactly at the gate threshold — it passes.
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.
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.
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%.
A stock above SMA50 and SMA200 but only up 3M (not 1M) gets a momentum subscore of 0.75 — 3 of 4 checks passed.
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.
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.
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.
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.
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).
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)."
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.
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.
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.
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.
A valuation filter that disqualifies a stock from the rankings even after it passes all 8 gates. One trigger: PEG ratio above 2.0.
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.
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.
FLYW ranks #3. Top strengths: "revenue growth, analyst sentiment, price momentum." These are the three subscores that pushed it above other eligible stocks.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
CRDO was stopped out around $196–203 on 2026-07-17 and traded at $282.82 a month later.
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.
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.
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.
The paper-trade record so far covers one rising regime: QQQ +2.6%, deepest dip 9.6%, fully recovered.
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.
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.
Letting a backtest use information that would not have been available at the time, which makes results look better than anything achievable in reality.
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.
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.
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.
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.
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.
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.
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."
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
`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).
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.
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.
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.
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.