How the Score Works

No black boxes. Every 1–100 score is a transparent, weighted blend of three indicators you can verify yourself. The "Why this pick?" card maps 1:1 to what's below.

The Formula

score = 0.40·momentum + 0.35·maTrend + 0.25·rsiGuardrail

Each component is first normalized to a 0–100 scale, then blended with the weights below and rounded to a 1–100 score.

40%
Momentum
35%
MA Trend
25%
RSI Guardrail

1 · Momentum (20-day rate of change)

We measure the percent price change over roughly the last 20 trading days (a swing-trade horizon).

momentumScore = clip( 50 + ROC% × 2.5 , 0, 100 )

So a +20% run maps to ~100 and a −20% drop maps to ~0. Flat price sits near 50.

2 · Moving-Average Trend (20 & 50 SMA)

We check trend alignment: price vs its 20-day average, and the 20-day vs the 50-day average.

maTrendScore = clip( 50 + (price/SMA20−1)×300 + (SMA20/SMA50−1)×300 , 0, 100 )

A healthy uptrend (price > SMA20 > SMA50) scores high; a stacked downtrend scores low.

3 · RSI as a Guardrail (not a buy signal)

RSI(14) is used for mean-reversion protection, not naive "buy when high". The healthiest zone is roughly RSI 40–65.

rsiScore = clip( 100 − max(0, RSI−65)×3 − max(0, 40−RSI)×2 , 0, 100 )

Overbought (RSI > 65, especially > 70) is penalized so we don't chase extended names; deeply oversold is trimmed too.

Risk Meter (separate from the score)

Risk comes from volatility — the 14-day Average True Range as a percent of price — not from the score. A high score can still be high risk.

  • Low — ATR < 2% of price
  • Medium — ATR 2–4%
  • High — ATR > 4%

AI Scorecard: data-grounded, not invented

On the AI Search page, the prediction percentage is computed from the data, not made up by the AI. We anchor it on the model score, tilt it by the stock's relative strength vs the S&P 500, and apply an RSI overbought/oversold caution — then clamp it to a realistic 20–80% band.

Gemini 3 Flash only explains that fixed number in plain English; it is explicitly told not to alter or invent figures. The optional news-sentiment nudge is a small secondary adjustment layered on top, shown transparently.

Accuracy: 'Beat the S&P 500'

Our track record is deliberately honest and hard to game. Each day we rank the watchlist, take the top 5, and the next day a pick is only counted "correct" if its return beat the S&P 500 (SPY) — not merely if it closed up.

The rolling hit-rate you see on the Track Record page is that win count divided by total graded picks.

Data & Refresh

Scores are pre-computed by a scheduled job once per day (after the US market close, ~20:30 UTC), then served instantly from the database — so the app stays fast and doesn't hammer data providers.

We fetch live daily-close data first, and today's run used live market data. If a provider rate-limits or fails, we fall back to a deterministic seeded simulation and flag it, rather than crashing the leaderboard.

⚠️ This methodology is for education only. Scores and picks are not recommendations and never involve real money.

© 2026 Aqvoro AI · Built by Ahmed Faruqui. All rights reserved.

⚠️ For educational purposes only — not financial advice. No real money is involved. Do your own research.