Top Complete Score
Prime setups · 60+
Hottest sector
Top-10 turnover
Score distribution
Where the ranked universe sits. Rescaled to mean 50 / sd 15.Sector heat · median Complete Score
P&L
Marked with the same quotes the rest of the desk uses. Refreshes on every quote poll.Momentum leaders · vs 50-day
Squeeze candidates · short float
Catalysts inside the window
Performance
Equal-weighted paper books, $100k notional, long only, no rebalancing. The point is to measure the score — not a trading strategy.Equity curve vs S&P 500
Both rebased to 100 at inception. The gap between the lines is the only number that matters.My positions
Your real fills, live from the trade log.What this can and cannot tell you
—
Today's read
—Levels for the session
Computed from the last completed daily bar. Live marker needs Serve.bat.Options read
Which side of the premium the odds sit on — not a backtest of any contract.The evidence
Every test run, corrected for multiple comparisons. This is the page that can tell you the model is worthless.Market read · S&P 500
Weekly regime gauge for the week ending —Lean
P(up week)
Signal agreement
Track record
SPY · daily
Signal board
Every input, and which way it points. Disagreement is information — when these split, the read is weak and it should be.
What this means for your book
Market internals
Prediction ledger
Every call logged and scored once the week closes. This is the only thing that tells you whether any of it works.Screener
Filter the ranked universe on any factor. Everything updates live.Rankings
The full ranked ladder, 1 to N, by Complete Score.Explorer
Every name in the universe, as-is and searchable — scored or not.Portfolio builder
Guardrails: max 15% per position, max 35% per sector. Separate from the tracked paper books on the Performance page.Plan settings — your rules; every number below is computed from these
Stop = k x ATR, k set so this share of holds stop on ordinary noise. Calibrated on 183,000 entry-days of your own bars. A tighter setting is not safer — it just stops you out more often at the same dollar risk.
R = the distance from entry to stop. A 2R target means you're aiming to make twice what you're risking.
Positions · 0
Trade log
Weighted Complete Score
Allocated
Open P&L
Total risk at stop
Weighted beta
Concentration · HHI
Sector exposure
Cap mix
Nothing here is stored on a server — it lives in this page only. Export before closing if you want to keep it.
Day Desk — intraday workspace. Separate from the swing model; nothing here feeds the rankings.
Method & data
How the Complete Score is built, and exactly what it does and doesn't know.The Complete Score — short-horizon model
Tuned for a 2 to 10 trading day hold. Each factor is percentile-ranked across the universe, not compared to a fixed threshold — "cheap" and "strong" only mean anything relative to what else is available today. Ranks are weighted into five pillars, then blended:
- Reversal — 25%. The core. Short-term reversal is the best-documented effect at this horizon: last week's losers modestly outperform over the following week. The 1-week return, the 1-day return and the stretch from the 10-day all score negatively — down is the setup. A small positive weight on the 1-month drift keeps genuinely broken names out.
- Setup — 20%. Is today a good entry? RSI tuned for mean reversion (peak around 35, not 56), where the close sat inside the day's range, whether the longer trend is still structurally intact, volume surge, and a penalty for gapping up into the entry.
- Catalyst — 15%. Cut from 25%. Squeeze fuel and flow flags still matter over a week; analyst price-target upside barely does, so it's kept small. Earnings proximity is here as a risk — see below.
- Tradeability — 20%. Raised from 18%, because over five days spread and slippage eat most of the gross edge. Dollar volume, share volume, and a daily-range sweet spot: under ~1.5% average range a short trade cannot cover its own costs; over ~7% you're trading noise.
- Sentiment — 20%. Retail and social, credibility-weighted. Ranked only within the cohort of names actually being discussed — see the note below.
Four factors deliberately flip sign
This is not the swing model re-weighted. Several factors mean the opposite thing over two weeks versus three months:
- Recent return: momentum → reversal. Over three months, strength begets strength. Over five days it mean-reverts. The 1-week return is the single heaviest factor in the model and it is scored negative.
- RSI: chase risk → the setup. The swing model rewarded RSI ~56 and treated oversold as a falling knife. Here it inverts: washed-out names are the trade and extended ones are the risk. Below 20 the reward falls off again, because a vertical collapse is usually news rather than noise.
- Earnings: catalyst → gap risk. The clearest flip. Over three months an earnings print is the catalyst you're paying for. Over five days it's an unhedged binary you can neither predict nor react to. Proximity is now penalised; names that just reported score best.
- Today's winners: confirmation → fade. The GAINER flag was +25 in the swing model. Here it's −12, and LOSER flips from −25 to +10.
How social sentiment is handled
Roughly 95% of the universe is never discussed on Reddit. If those names were ranked at the bottom of a full-weight sentiment pillar, the model would become a meme-stock detector and hand the top of the ladder to whatever is being pumped that week. So social factors are ranked only within the mentioned cohort; unmentioned names get no sentiment pillar at all and their remaining four pillars are renormalised. Sentiment can push a discussed name up or down against its own fundamentals, but it never blanket-penalises the 1,400 names nobody posted about.
Two further guards: mention acceleration is capped at 5×, and the excess above that is scored negatively as a blow-off marker. Parabolic retail attention is historically a warning, not a buy signal. Author credibility weighting exists but stays inert until an author has 10+ calls scored against forward returns — roughly three to four weeks of data. Until then every author weights 1.0, and the dashboard says "building" rather than pretending otherwise.
What was removed
ROIC, ROE, margins, 3-year revenue and EPS growth forecasts, PEG, dividend yield, buyback and shareholder yield, Piotroski F, and share-count change are gone. Not down-weighted — removed. Over a two-week hold they carry no usable signal, and leaving them in at low weight would only add noise while making the score look more thorough than it is. Balance-sheet strength survives purely as a survival check: you don't want a name that blows up mid-trade.
What this model is expected to do
2–10 day equity returns are close to unpredictable from free public data. A realistic outcome is an information coefficient around 0.02–0.03 and a decile spread that is positive but noisy — which still implies roughly 45% of weeks are negative even when the model is working. The Improve page measures this directly so that changes are driven by information coefficient over 20+ sessions rather than by one bad week.
Two guards against false precision
- Confidence shrinkage. A score from 6 factors is pulled toward 50; only a name with 24+ live factors is trusted at full spread. Thin data can never outrank deep data on noise alone.
- Minimum-evidence floor. Below 12 factors a name gets no score at all. It stays browsable in the Explorer and is excluded from Rankings, the Screener and the Portfolio builder.
After blending, the composite is rescaled to mean 50 / sd 15. Averaging 40+ weakly-correlated ranks compresses everything toward the middle (that's just the central limit theorem), which would make the rating bands meaningless. The rescale is monotonic — it changes the spread, never the order.
Is this data current?
The badge in the top-right corner shows the same thing at a glance. After running
Refresh.bat, reload this page — if the build time below hasn't moved, the refresh
didn't land, and the numbers you're looking at are the old ones.
Honest coverage note
This snapshot was assembled on —. The universe is — names across the S&P 500 / 400 / 600 (large, mid and small cap). Of those, — currently carry the full deep factor set; the rest have index, sector, price and market-cap data and are shown unscored until the next refresh fills them in.
The reason is mechanical, not a design choice: the bulk fundamental pull is rate-limited per request. refresh_data.py walks the whole universe on a schedule and closes the gap — the engine is already built for the full set, the rows just need filling.
Going live
Two paths, both wired:
- Refresh script. Run
python refresh_data.py. It re-pulls every source, rebuildsdata.js, and this page picks it up on reload. No key, no signup. - API key. Drop a Financial Modeling Prep or Finnhub key into
config.jsonand the refresh script switches to bulk endpoints — the whole universe in minutes instead of a slow crawl, with true intraday quotes.
Free tiers as of 2026: Financial Modeling Prep and Finnhub both offer usable free fundamentals; Finnhub allows ~60 calls/min and free websocket streaming; Twelve Data allows ~800 calls/day; Alpha Vantage is capped near 25/day and is too thin for a universe this size.
What this is not
A ranking engine, not advice. The Complete Score measures how a name looks against its peers on measurable factors right now — it knows nothing about your tax situation, your time horizon, pending litigation, a fraud that hasn't surfaced, or what the Fed does next month. Position sizing and the diversification guardrails exist because the score will sometimes be confidently wrong. I'm not a licensed financial advisor and this isn't personalized investment advice.
Factor inventory
— factors, each percentile-rankedSources
Index constituents and GICS sectors — Wikipedia S&P 500 / 400 / 600 lists.
Prices, market caps, fundamentals, analyst data, technical readings, short interest, Altman Z / Piotroski F — StockAnalysis.com (data sourced from S&P Global Market Intelligence).
Flow flags — StockAnalysis.com gainers, losers, oversold, overbought and most-shorted screens.
Filing-level fundamentals available for cross-check via the SEC XBRL company-concept API.