Methodology

How the QScore is calculated

We don't think it's reasonable to charge for a stock score that we won't fully explain. Every input, weight, and decision rule that feeds the QScore is documented below — along with what it can't do yet, and our commitment not to start collecting subscriptions until we've published a real backtest.

1. The QScore in 30 seconds

OutputA single 1–100 score plus a directional signal and a confidence rating.
Factor categoriesValue · Growth · Momentum · Profitability · Risk
NormalizationEach metric is z-scored against the distribution of the same metric across the ticker's sector (with a fall-back to the full universe of large-cap US stocks when the sector has too few names).
Two horizonsA long-term composite (weighted toward fundamentals) and a short-term composite (weighted toward momentum). The headline QScore is the average of the two.
SignalOne of Buy Long-Term, Buy Short-Term, Hold, or Short.
ConfidenceHigh / Medium / Low — driven by data completeness and how decisive the score is.
Refresh cadenceCached for 15 minutes per ticker. Fundamentals update with quarterly filings (typically 40–60 day lag).
UniverseLarge-cap US-listed equities (NASDAQ + NYSE, market cap above $15B). Coverage gaps exist outside this — see limitations.

2. The five factor categories

Each category is built from several underlying metrics. Every metric is converted to a 0–100 score by z-scoring it against the ticker's sector, with the ticker's standard deviations from the sector mean mapped linearly to a score (z=0 → 50, z=±3 → 100/0). Within a category, metric scores are averaged with light weighting (no metric weighs more than 1.5× another). Missing metrics are dropped from the average rather than penalized — this avoids punishing companies that don't have meaningful book value, for example, but it feeds into our confidence rating.

Value (lower multiples → higher score)

What the market is willing to pay for the company per dollar of earnings, book value, sales, and EBITDA. Roots in Graham & Dodd's Security Analysis (1934) and formalized as the HML factor in Fama–French (1993). The premise: cheap stocks tend to outperform expensive stocks over long horizons, on average.

Metrics: P/E (TTM), P/B, P/S, EV/EBITDA. Negative values (loss-making companies, distressed book values, negative EBITDA) get a fixed low score; everything else is z-scored against the sector with the sign inverted (lower raw value → higher score).

Known weakness:P/B becomes meaningless for companies that have bought back enough stock to drive book value near zero (Apple's P/B is currently ~40). Sector z-scoring partially mitigates this by comparing each tech mega-cap only to other tech mega-caps, but the ratio itself is fundamentally noisy in those situations.

Growth (higher growth → higher score)

How quickly the business is getting bigger and more profitable on a per-share basis. Year-over-year growth in revenue, EPS, and free cash flow as of the most recent annual filing.

Metrics: Revenue growth (YoY), EPS growth (YoY), Free cash flow growth (YoY). Each is z-scored against the sector — a 10% growth rate in Energy means something different than a 10% growth rate in Technology.

Known weakness: annual figures lag intra-year reality by up to 12 months. Quarterly fundamentals would be more responsive but introduce more noise.

Momentum (positive trend → higher score)

Price-based signals capturing how the market has been valuing the stock recently. Origin: Jegadeesh & Titman (1993), formalized as the WML factor in Carhart's four-factor model (1997). The premise: stocks that have outperformed recently tend to keep outperforming over 3–12 month horizons.

Metrics: 12-month total return, 3-month return, 1-month return, RSI(14), 50-day vs 200-day moving-average position. Returns are z-scored against the sector; RSI uses a fixed non-monotonic curve (low RSI = oversold rebound potential, mid-high = healthy momentum, extreme high = overbought risk); the MA crossover is a binary golden-cross / death-cross indicator.

Known weakness:momentum factors fail at regime turns. A stock crashing from a high RSI looks “healthy” right up until the moment it doesn't.

Profitability (higher returns on capital → higher score)

How efficiently the business converts capital into profit and cash. Origin: Fama–French five-factor model (2015), specifically the RMW (Robust Minus Weak) factor.

Metrics: Return on equity (TTM), Return on assets (TTM), Gross margin, Operating margin, Net margin, Free cash flow yield. All z-scored within sector. A 30% gross margin is excellent in retail and unremarkable in software, and the score reflects that.

Known weakness:aggressive buybacks can artificially inflate ROE by shrinking the equity base. Apple's ROE around 147% is real but largely an accounting artifact. ROA and absolute margins partially correct for this.

Risk (lower risk → higher score)

How much the stock moves with the market and how much it moves on its own. Origins span CAPM (Sharpe, 1964) and the low-volatility anomaly research from Frazzini–Pedersen and others.

Metrics:Beta to S&P 500 (closer to 1.0 = higher score), 60-day annualized realized volatility (lower = higher score, z-scored within sector).

Known weakness:beta is inherently backward-looking. A stock's beta can shift dramatically through regime changes. We use beta as reported by FMP, which is calculated against ~5 years of history.

3. How factors combine into a composite

The math is deliberately simple — Chan's rule of thumb in Quantitative Trading (2008) is to keep free parameters under five, so backtest results have a chance of holding up out-of-sample. Z-score normalization gives us essentially zero free parameters per metric, with the remaining choices being the category weights below.

  1. Z-score each raw metricagainst the distribution of that same metric across the ticker's sector. If the sector has fewer than 15 covered names, fall back to the full universe distribution. Statistics are winsorized at the 5th and 95th percentile before computing mean and standard deviation, so a single outlier can't skew the reference distribution.
  2. Map the z-score to a 0–100 score. Linear: z=0 → 50, z=±1 → ~67/33, z=±2 → ~83/17, clipped at z=±3 → 100/0. For metrics where lower is better (P/E, P/B, volatility), the sign is inverted before mapping.
  3. Aggregate within category. Weighted average of metric scores in the category. Missing metrics are skipped (not zeroed) — they reduce the completeness factor that feeds confidence.
  4. Compute two composites using two different sets of category weights, one per horizon:
CategoryLong-term weightShort-term weight
Value30%10%
Growth20%15%
Profitability25%10%
Momentum5%40%
Risk20%25%

The headline composite QScore is the simple average of the two horizon scores. Any user-customizable blend would be a separate product feature, not the default.

4. Signal generation

The directional signal is derived from the long-term and short-term scores using these rules, evaluated in order:

If…Then signal is
Long-term < 30 or short-term < 30Short
Short-term ≥ 65 and momentum category ≥ 60Buy Short-Term
Long-term ≥ 70Buy Long-Term
Long-term ≥ 60 and long-term > short-termBuy Long-Term
Short-term ≥ 60 and short-term > long-termBuy Short-Term
OtherwiseHold

5. Confidence

Confidence reflects two things: how complete the underlying data is, and how decisive the resulting score is. A composite of 50 with 40% missing data is genuinely less useful than a composite of 78 computed on complete data, and we say so.

ConfidenceRule
HighAverage data completeness ≥ 85% AND composite ≥ 70 or ≤ 30
MediumAverage data completeness ≥ 75% but the score lands in the indecisive 30–70 range
LowAverage data completeness < 60%, or insufficient data to evaluate any one category

6. Data sources and freshness

We use Financial Modeling Prep for everything price- and fundamentals-related: company profile, real-time quote, trailing-twelve-month ratios and key metrics, year-over-year growth, and 5 years of end-of-day price history. Their /stable/* API is the source of truth for every number that feeds a QScore.

The natural-language analysis paragraph below each score is generated by Cloudflare Workers AI running Llama 3.3 70B (Instruct, FP8). The model receives the structured QScore output — composite, signals, all category scores, all underlying raw metrics — and produces a 60–100 word paragraph explaining what's driving the score. It does not have access to news, analyst opinions, or any data outside the structured score.

LayerRefreshes every
Score page (CDN cache)15 minutes
Underlying FMP data fetches15 minutes (cache TTL)
End-of-day pricesUpdated by FMP after US market close
TTM ratios & key metricsUpdated by FMP after each quarterly filing (typically 40–60 day lag)
Universe stats (sector means/stds)Refreshed periodically (target: daily; currently manual)
AI commentaryRegenerated whenever the score changes

7. Known limitations

Things we'd rather you read here than discover the hard way:

8. Validation status

Backtest in progress.

We have not yet published backtested information-coefficient (IC) values, quintile spread returns, or risk-adjusted performance metrics for the QScore. Until we do, this page is a description of methodology, not a claim of risk-adjusted returns.

We will not turn on subscription billing until this section contains:

  • Information coefficient (Spearman rank correlation between QScore and forward returns) for 1-month, 3-month, 6-month, and 12-month horizons
  • Long-short quintile-spread return time series with annualized return, volatility, and a Sharpe ratio of at least 1.5
  • Drawdown profile of the top quintile vs SPY benchmark
  • Rolling-window IC analysis to show factor stability over time
  • Look-ahead bias verification using the truncation-rerun method described in Chan (2008)
  • An explicit list of survivorship-bias and look-ahead-bias caveats applied to the backtest

Once published, those numbers will replace this box. Until then, treat the QScore as a transparent synthesis of well-established factor research — useful as a structured second opinion, but not validated as a standalone investment strategy.

9. Disclaimers

QScoring provides quantitative analysis for informational and educational purposes only. It does not constitute investment advice, a recommendation, or a solicitation to buy or sell any security. Past performance and quantitative scores do not guarantee future results. Always conduct your own research and consult a licensed financial advisor before making investment decisions. Nothing on this site establishes a fiduciary or advisory relationship.

← Back to scoring