Methodology · QScore model v0.3

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 mid+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).
UniverseUS-listed equities (NASDAQ + NYSE, market cap above $2B — mid-cap and larger), capped at 800 names per refresh. 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 — the value premium documented by Fama–French. See research foundations for the sources and for how our multi-multiple implementation differs from the strict book-to-market HML factor.

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. The return-continuation core (12- and 3-month returns) draws on Jegadeesh & Titman (1993); the 1-month return, RSI, and moving-average crossover are additional technical-trend signals rather than part of that factor (see research foundations).

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. Maps to the quality/profitability premium (Quality Minus Junk; Fama–French RMW) — see research foundationsfor the sources and for how our margin-based metrics differ from Novy-Marx's gross-profits-to-assets construction.

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 volatility, market-aligned beta → higher score)

How much the stock moves with the market and how much it moves on its own. The 60-day-volatility component reflects the low-volatility anomaly (Ang et al., 2006); the beta component rewards proximity to 1.0 and is our own market-alignment construction, not a low-beta premium (see research foundations).

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. Research foundations

QScoring is an independent implementation of published factor research. The economic ideas below come from the academic literature; the specific metrics, weights, and scoring curves are ours. We are not affiliated with, endorsed by, or in partnership with any author, institution, or firm cited on this page.

Each factor is included because there is a documented, economically motivated reason it has mattered historically — not because we have shown it predicts returns in our composite. The premia described below are published findings about the factors, not performance claims about the QScore. What we have and have not yet demonstrated in our own implementation is set out in validation status.

Factor (as implemented)Foundational sourceWhat the research establishesHow our implementation differs
Value
P/E, P/B, P/S, EV/EBITDA
Fama & French, “Common Risk Factors in the Returns on Stocks and Bonds” (1993) — the HML (High-Minus-Low) factor. Earlier roots in Graham & Dodd, Security Analysis (1934).Stocks that are cheap relative to book value have, on average, historically earned a premium over expensive ones across long horizons.HML is strictly book-to-market. We use P/B as the book-to-market analog plus three further valuation multiples (P/E, P/S, EV/EBITDA), so this is HML-motivated, built as a broader multiple composite rather than the HML factor itself.
Momentum
12-mo & 3-mo return (core); 1-mo return, RSI(14), 50/200 MA (technical)
Jegadeesh & Titman, “Returns to Buying Winners and Selling Losers” (1993); formalized as the WML factor in Carhart, “On Persistence in Mutual Fund Performance” (1997).Relative-strength winners over a 3–12 month formation window have, on average, historically continued to outperform over the following months.Canonical momentum measures returns over 3–12 months skipping the most recent month (to avoid short-term reversal). Our 12- and 3-month returns map to this; the 1-month return, RSI(14), and 50/200-day moving-average crossover are additional technical-trend signals, not part of the Jegadeesh–Titman factor — and the 1-month component runs counter to the short-term-reversal finding.
Profitability
ROE, ROA, gross / operating / net margin, FCF yield
Asness, Frazzini & Pedersen, “Quality Minus Junk” (2019); Fama–French five-factor model (2015), the RMW (Robust-Minus-Weak) factor. The profitability premium was first isolated by Novy-Marx (2013).More profitable firms have, on average, historically earned higher returns than less profitable ones with otherwise similar characteristics.Closest to the QMJ / RMW profitability basket. Novy-Marx's specific metric is gross profits / total assets; we use gross margin (gross profit / revenue) alongside ROE, ROA, the other margins, and FCF yield — so we cite him for the insight, not the exact construction.
Risk — volatility
60-day realized volatility
Ang, Hodrick, Xing & Zhang, “The Cross-Section of Volatility and Expected Returns” (2006); Blitz & van Vliet (2007). Adjacent low-risk strand: Frazzini & Pedersen, “Betting Against Beta” (2014).Lower-volatility stocks have historically delivered better risk-adjusted returns than the high-volatility names a simple CAPM would imply — the “low-volatility anomaly.”We z-score 60-day realized volatility within sector (lower → higher score). Betting-Against-Beta is a beta strategy — it motivates this low-risk family but is not the metric we compute here.
Risk — beta
distance of β from 1.0
Capital Asset Pricing Model — Sharpe (1964). No published return-factor pedigree for our specific treatment.CAPM defines beta as a stock's sensitivity to the market; β = 1 means it moves in line with the market.Our beta sub-score rewards β near 1.0 and penalizes both very high and very low beta. This is our own market-alignment / stability construction — it is neither Betting-Against-Beta nor a low-beta tilt (both of which reward low beta), and we make no factor-premium claim for it.
Growth
YoY revenue, EPS, FCF growth
No canonical positive return factor.Growth is not an established standalone return factor; in the Fama–French framework, high-growth stocks sit on the expensive (low book-to-market) side — the short leg of HML.We include sector-relative fundamental growth as a descriptive input and weight it modestly (5% long-term, 15% short-term). We describe what it measures and deliberately make no academic-pedigree claim for it.

Not a performance claim. The premia above are historical findings reported in the cited papers, each with its own data window, assumptions, and subsequent debate — several have weakened or been contested out-of-sample. They are the reasons each factor is economically motivated, not a forecast that the QScore, or any single factor within it, will produce returns. What we have and have not validated in our own implementation is documented in validation status.

4. 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 — where a free parameter is a degree of freedom fitted to the data (optimized on returns), because each one fitted is another way to overfit a backtest. The QScore has essentially none of those: z-score normalization fits nothing per metric, and the category weights below are set a-priori— chosen from the published factor literature, not tuned against historical returns — so they are not “free parameters” in Chan's sense. That is a deliberate choice to keep the model low-complexity and resistant to overfitting, at the cost of not squeezing every point of in-sample performance out of the weights.

  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.

5. 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

6. 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

7. 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
Real-time quote (FMP)15 minutes (matches the page-level cache)
End-of-day price history (FMP)6 hours (FMP only updates this once per US market close)
Company profile, TTM ratios & key metrics, growth (FMP)24 hours (these only change on quarterly filings — caching them aggressively keeps us under FMP's rate limit during traffic spikes without affecting score freshness)
Universe stats (sector means/stds)Nightly cron at 02:00 UTC (post-close); commits the refreshed file to public source control if anything changed
AI commentaryRegenerated whenever the score changes

8. Known limitations

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

9. 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.

What is live today:

The live performance page publishes a daily, locked-in snapshot of every QScore and price we compute. Each snapshot is committed to public source control on the date shown — no revisionism is possible, and forward returns against those snapshots are what feed the backtest pledge above as data accrues.

10. 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