How [sage]SIGNALS actually works
The engineering detail behind the pitch on /about — what data the screener can and can't see, how a sell signal actually fires, and how we're proving the model works before any real money moves.
Last major update: 2026-07-11 · See /parameters for the full threshold list, /vocab for term definitions.
Overview
What it is, who it's for
[sage]SIGNALS is a daily pre-market email screener for US technology stocks. Every weekday at 9am ET, before the market opens, it screens the full tech universe through 8 gates, ranks the top 10 candidates, checks held positions for sell signals, and sends the result by email.
It's built for two investors with an aggressive risk tolerance and a days-to-weeks trading horizon. Every design choice below follows from that: the gates favor momentum over value investing, and the stop-loss is fixed — there's no discretion once it fires.
The project is in paper-trade validation. Every pick is tracked and compared against QQQ before either investor commits real capital.
Data & Limitations
What the screener can and can't see
All screening data comes from the Finviz Elite API, pulled across six views and merged by ticker.
| View | Covers |
|---|---|
| Overview | Ticker, sector, market cap, P/E, price, volume |
| Valuation | Forward P/E, PEG, price/sales, EPS and sales growth |
| Ownership | Short float, short ratio, insider and institutional activity |
| Performance | 1-month and 3-month returns, volume trend |
| Financial | Margins, current ratio, debt/equity, return on equity |
| Technical | 50/200-day moving averages, RSI, ATR, 52-week high |
What Finviz doesn't provide — confirmed by directly probing the API, not by reading documentation: MACD, Bollinger Bands, ADX, and other technical indicators beyond what the Technical view already covers; Earnings surprises and analyst rating-change history; Broker-level analyst price targets — that data sits behind a separate paid Finviz product; Buyback activity, index-inclusion events, and news-driven catalysts. Two of the 8 gates (cash flow and options flow) exist as placeholders for this reason — they always pass, and stay that way until a data source that covers them gets added.
Sell-Signal Logic
How a sell signal actually fires
Sage places every paper trade manually in Alpaca. Each morning, the screener reads his current positions from that account and checks each one for four exit conditions.
| Signal | Fires when |
|---|---|
| Deteriorating fundamentals | EPS growth turns negative and 5-year revenue growth turns negative |
| Sentiment breakdown | Analyst consensus drops to Sell, Strong Sell, Underperform, or Underweight |
| Sentiment softened | Analyst consensus drops to Hold or Neutral — a lower-severity, watch-only flag |
| Stop-loss | Price falls more than 10% below entry — a flat rule, same for every position, no exceptions |
Why we simplified the stop-loss — this replaced a more complex dual system (a trailing stop off the 52-week high, plus a separate ATR-based stop) after Sage and Ashwad reviewed it together. A flat, non-negotiable rule is easier to trust and impossible to second-guess in the moment. The old trailing-stop math didn't disappear — it still powers the stop-loss suggestion shown for brand-new picks, which is a different feature from the sell check above. That suggestion got a correctness fix in August 2026: it could previously display a stop sitting above the current price, which would trigger the moment you bought. Levels that aren't below the price are now discarded before one is chosen.
Validation
How we know it's working
Every pick gets logged to Supabase before either investor puts real money behind it — run metadata, gate results, and the picks themselves, all written the morning they're made.
A separate job checks each pick's closing price at 1, 7, 30, and 90 calendar days out and compares it to QQQ over the same window. That comparison is what powers this dashboard's hit rate, alpha, and rank-validity numbers.
Directional signal becomes readable after 2 to 4 weeks of picks. A statistically meaningful read on whether the model actually beats the market takes 12 to 16 weeks — we're not there yet, and the dashboard says so plainly rather than rounding up.
Status & Roadmap
Where things stand
| Phase | What it is | Status |
|---|---|---|
| Phase 1 | Daily email screener — 8 gates, top 10 picks, sell signals, paper-trade log | Live |
| Phase 1.5 | Supabase migration — run history, forward prices, benchmark data | Live |
| Phase 2 | Alpaca paper account as the sell-signal source of truth, with a live positions dashboard | Live |
| Phase 2a | Automatic paper-order placement — built, but switched off until we decide it earns a place in the pipeline | Built, disabled |
| Phase 3 | This validation dashboard — hit rate, picks vs. QQQ, rank validity, trade history | Live |
| Phase 4 | Real position tracking and multi-user support, once the paper-trade results hold up | Future |