Methodology

How this engine works

Engine v4
Last updated 2026-07-17

What the scoring engine measures, why grades change, and how to interpret the rules behind each verdict. This page updates when the underlying ADRs do.

Composite scoring (ADR-013)

Every position is scored on four factors, weighted to produce a composite from 0–100. Quality carries the heaviest weight, valuation and momentum each carry a substantial share, and health rounds out the composite (exact weights are internal to the engine). Composite maps to a letter grade A+ through F using these thresholds: A+ ≥ 88, A ≥ 82, A- ≥ 76, B+ ≥ 70, B ≥ 64, B- ≥ 58, C+ ≥ 52, C ≥ 46, C- ≥ 40, D+ ≥ 34, D ≥ 27, D- ≥ 18, F < 18.

FactorEmphasisWhat drives itCommon flags
QualityHeaviestROIC, ROE, Debt-to-Equity, accrual quality, operating margin trendFalling ROE, leveraged balance sheet, accruals divergence
ValuationSubstantialP/E, EV/EBITDA, PEG, P/B, FCF owner-earnings yield spread vs FRED 10YMultiple expansion vs sector, negative spread vs Treasury
MomentumSubstantialEarnings revision velocity, beat/miss cadence, 12-1m price momentumDownward revisions, rating cuts, sector momentum decay
HealthSupportingAltman Z, Piotroski F, interest coverage, Debt-to-Equity, current ratioAltman Z < 1.81 (distress), Piotroski ≤ 3 (weak fundamentals)
Valuation blend (ADR-014)

Valuation isn't just P/E. For most positions it's a single criterion, a yield spread measured against the live 10-year Treasury rate (FRED DGS10), with the familiar multiples shown alongside for context only:

  • Yield spread (the weighted criterion): 50% trailing FCF yield (Enterprise-Value-denominated) plus 50% owner-earnings yield, minus the current FRED 10-year Treasury yield. Positive spread = the position yields more than the risk-free baseline. P/E, EV/EBITDA, PEG, and P/B vs sector medians appear on the page but carry no weight in this score.
  • Financials fallback:Banks and insurers, where free cash flow isn't a meaningful measure, are scored on P/B (55%) plus earnings yield (45%) instead.
The FRED rate is fetched live; valuation grades respond in real time when rates move (prior versions used a static "conservative-30" fallback that hid rate sensitivity).
Spec modes

Some positions need rule adjustments — a growth stock at a band edge, an ETF that shouldn't be graded like a single stock, a position with thin data. Spec modes encode those adjustments so the same engine handles edge cases without silent grade drift.

ModeWhen it activatesEffect
Lynch hysteresisPEG-eligible growth stocks scoring near a grade band edgeValuation grade persists across small score moves to avoid flapping on momentum noise.
ETF gatePosition symbol resolves to an ETF rather than a single equitySingle-stock factor analysis bypassed; ETF graded on diversification + cost characteristics.
Conservative composite penaltyCoverage ratio below the engine confidence thresholdComposite downgraded to reflect that the engine had limited factor data. Position is not failed — it is flagged as "lower confidence."
Active spec mode (if any) appears as a chip on each position inside the "Why this grade?" expander.
Coverage ratio

Each grade carries a coverage ratio— the fraction of factor data the engine had available when scoring this position. 100% means every input was present. Below 90% the engine starts applying the conservative composite penalty so a thin-data grade can't masquerade as high-confidence.

Daily snapshot cron

Every day at 22:00 UTC, the scheduled snapshot writer (spec 026) re-scores every held position and writes oneSCORE#row per (user, symbol, date). The Today tab's 7-day trend indicators and the per-position sparkline both read from this corpus.

Manual review via "Run new review now" uses the same scoring pipeline; results land in the same place and feed the same charts.
Engine performance verification

The engine self-tests against its own historical snapshots and keeps a dated, append-only record of its verdicts for forward evaluation.

Explore the quant toolkit in 3D

The option-pricing surface behind the quant concepts, with its synthetic implied-volatility smile mode, as an interactive 3D exploration.


Engine version v4 · Last updated 2026-07-17. When the methodology changes, the version stamp bumps and this page updates.