Reference

Methodology

Every score, grade and statistic on capXalpha, with the formula behind it. Where the implementation takes a shortcut, that is stated rather than smoothed over.

Quant score & ratings

The headline rating is a weighted mean of five factor scores, each on a 0–5 scale.

Factor score
percentile rank of the metric within the universe → mapped to 0–5
Sector-relative where a sector is known, otherwise market-relative. A percentile needs a real peer set; fewer than 2 comparables returns the neutral 0.5.
Overall quant score
weighted mean of Value, Growth, Profitability, Momentum, EPS Revisions (0–5)
Weights are part of the engine (services/src/quant.rs); the five factors are the Seeking-Alpha-equivalent set.
Letter grade
A+ ≥ 4.5 · A ≥ 4.0 · A− ≥ 3.7 · B+ ≥ 3.3 · B ≥ 3.0 · B− ≥ 2.7 · C+ ≥ 2.3 · C ≥ 2.0 · C− ≥ 1.7 · D+ ≥ 1.3 · D ≥ 1.0 · F < 1.0
Applied to the 0–5 factor scores, so an ETF grade means what a stock grade means.
Rating band
Strong Buy ≥ 4.0 · Buy ≥ 3.0 · Hold ≥ 2.0 · Sell ≥ 1.0 · Strong Sell < 1.0
The same bands are used by the live engine and by the historical score series.
Value
inverted percentiles of P/E, P/B, P/S, EV/Revenue, PEG
Inverted because a lower multiple is cheaper. Negative earnings make P/E undefined — the metric is skipped, not coerced to zero.
Growth
revenue growth and EPS growth (period over period)
Uses reported fiscal periods; no forward guidance is invented.
Profitability
gross / operating / net margin, ROE, ROA, ROIC
ROIC = NOPAT ÷ invested capital. Rankings are within the peer set.
Momentum
12-month total return, skipping the most recent month (12-1)
Skipping the last month avoids short-term reversal noise; it is the standard academic momentum definition.
EPS revisions
net analyst EPS estimate revisions over the trailing 30 days
Requires forward estimates (Yahoo consensus). Absent coverage means the factor is neutral, not zero.
Price-based score history
0.40 × momentum(-30%…+30%) + 0.30 × trend(-20%…+20%) + 0.15 × volatility(50%…15%, inverted) + 0.15 × drawdown(-50%…0%)
Each input maps to 1–5 over the range shown, then the weighted mean is the score. This series is price-only by necessity — see Data limits.

Risk & return

Computed from the daily close series. Metrics are suppressed (null) below 30 observations rather than annualised from a handful of days.

Annualized return
mean daily return × 252
Arithmetic annualisation. A two-day sample annualises to nonsense, hence the 30-observation floor.
Volatility
stdev(daily returns) × √252
Sample standard deviation (n−1).
Sharpe ratio
(Rₚ − R_f) ÷ σₚ
R_f annualised then divided by periods-per-year before use, so both terms are on the same basis.
Sortino ratio
(Rₚ − R_f) ÷ σ_downside
Downside deviation counts only returns below the target, so upside volatility is not penalised.
Beta
cov(rₐ, r_b) ÷ var(r_b)
Only meaningful with a benchmark and overlapping dates; otherwise null — never 1.0 by default.
Alpha (Jensen)
Rₚ − [R_f + β × (R_m − R_f)]
Requires beta, so it inherits the same benchmark requirement.
Max drawdown
max over t of (peak − priceₜ) ÷ peak
Reported as a positive magnitude of the worst peak-to-trough decline.
VaR (95%)
5th percentile of the daily return distribution
Historical simulation, not a normal assumption.
CVaR (95%)
mean of returns at or below the VaR threshold
Expected shortfall: what the bad tail averages.
Correlation
Pearson r of daily returns
Tail-aligned on common dates; the correlation matrix uses the same rule.

Fundamentals

Sourced from SEC EDGAR XBRL, so values are what the company reported — not a vendor's restatement.

PEG
P/E ÷ earnings growth rate
Undefined for negative or zero growth; shown as null.
ROIC
NOPAT ÷ invested capital
NOPAT = operating income × (1 − tax rate). Invested capital = total debt + equity − cash.
DuPont (3-factor)
ROE = net margin × asset turnover × equity multiplier
Decomposes ROE into profitability, efficiency and leverage.
Piotroski F-score
sum of 9 binary signals (profitability, leverage/liquidity, operating efficiency)
Score is 0–9; each signal is reported so the total is auditable.
Margins
gross = (revenue − COGS) ÷ revenue · operating = operating income ÷ revenue · net = net income ÷ revenue
Shown as null when the filer does not tag the input (e.g. many companies never tag GrossProfit).
Free cash flow
operating cash flow − capital expenditure
From the cash-flow statement.

Technical indicators

50+ indicators. Price-only indicators use closes; OHLC indicators require stored open/high/low and return null without them.

RSI (n)
100 − 100 ÷ (1 + average gain ÷ average loss)
Wilder smoothing. Needs n+1 bars; a short series returns null, not 0.
MACD
EMA(12) − EMA(26); signal = EMA(9) of MACD; histogram = MACD − signal
MACDEXT allows any moving-average family for each leg (TA-Lib codes 0–8).
Bollinger Bands
SMA(n) ± k × stdev(n)
The middle band is exactly the SMA, so the band and the overlay share a basis.
ATR (n)
Wilder-smoothed true range, TR = max(high−low, |high−prev close|, |low−prev close|)
OHLC-based.
ADX / +DI / −DI
smoothed directional movement, DX = 100 × |+DI − −DI| ÷ (+DI + −DI), ADX = smoothed DX
ADX measures trend strength, not direction.
Stochastic
%K = 100 × (close − lowₙ) ÷ (highₙ − lowₙ); %D = SMA(%K)
Fast and slow variants; slow is the smoothed contract.
Aroon
Aroon Up = 100 × (n − bars since n-period high) ÷ n; Down is the mirror
Oscillator is Up − Down.
Hilbert family
HT_TRENDLINE, HT_DCPERIOD, HT_DCPHASE, HT_PHASOR, HT_SINE, HT_TRENDMODE, MAMA
Transcribed from TA-Lib and validated against TA-Lib 0.8.1 reference vectors to <1e-6.
KAMA / T3 / TRIMA
Kaufman adaptive MA · Tillson T3 · triangular MA
TRIMA is SMA(p/2) of SMA(p/2+1) — not SMA of SMA, which is a common and wrong shortcut.

Portfolio, backtest & forecast

Premium analytics; all long-only by default so weights are investable.

Minimum variance
min wᵀΣw subject to Σw = 1, w ≥ 0
Long-only clamps negative weights to zero and renormalises.
Tangency (max Sharpe)
max (wᵀμ − R_f) ÷ √(wᵀΣw)
Unconstrained tangency can short and lever; the UI runs it long-only.
Risk parity
weights such that each asset contributes equal risk
Iterative solution, not a closed form.
Efficient frontier
the set of (σ, μ) points from minimum variance to maximum return
Backtest
SMA-crossover entries/exits on adjusted closes
Reports total/annualised return, Sharpe, max drawdown, win rate, equity curve and alpha/beta vs a benchmark.
Forecast
OLS trend, lag-1 autocorrelation, mean-reversion z-score, rolling volatility, day-of-week seasonality
Descriptive statistics, not a price prediction — the UI says so.

Dividends & ETF grades

Dividend yield
trailing 12-month dividends ÷ price
Trailing, from actual ex-dates — not a forward estimate.
Dividend grades
yield, consistency, growth and safety, each graded A–F
Safety uses payout ratio and cash-flow coverage.
ETF factor grades
Σ (constituent weight × constituent factor score) ÷ Σ scored weight
Weights come from the newest N-PORT snapshot only. A bond CUSIP has no ticker and contributes nothing — it is not scored zero.
ETF coverage
scored weight ÷ total weight
Shipped alongside every ETF grade. A bond fund can score a tiny slice of its portfolio, and the UI warns below 20%.

Data limits — what is deliberately not shown

Honest gaps matter more than a full-looking page. A null here means unknown, never zero.

Fundamentals start ~2009
SEC XBRL mandate
Pre-2009 statements exist only as filing documents, not structured data. Any all-time fundamental series would be incomplete before then.
Historical score is price-only
price history exists since listing; point-in-time fundamentals do not
Using today's latest statement to score 1995 would be look-ahead bias, so the history series excludes fundamental factors and says so.
ETFs have no fundamentals
—
A fund files N-PORT/N-CSR, not 10-K/10-Q, and SEC companyfacts returns 404 for a fund CIK. ETFs get a Fund Overview (fee, AUM, issuer, holdings) instead.
No paid feeds
—
Every figure comes from SEC EDGAR, Yahoo's delayed chart endpoint, FRED, FINRA, BLS, ECB or DefiLlama. Real-time intraday is out of scope by design.
Nothing here is investment advice
—
Scores are mechanical summaries of reported data. They can be wrong and they do not know your circumstances.

Formulas reflect the implementation in services/ at the time of writing. Nothing on this platform is investment advice.