This document describes analytical methods only. Nothing on this platform constitutes investment advice, a recommendation to buy, sell, or hold any security, or a securities rating of any kind.

This page explains how ETFVision calculates the scores and labels you see in the app. Start with Characteristics Score to understand what Good, Neutral, or Weak means. Go to Portfolio Score to understand your overall portfolio rating. Technical formula details are included for transparency - they are not required reading.

Public methodology

Analytical Methodology

How ETFVision scores and classifications are produced

Last updated: 2026-06-23
Methodology sections

Overview

ETFVision uses a deterministic, rules-based scoring engine. All outputs are analytical classifications derived from stored quantitative data. No outputs constitute investment advice, trade instructions, or ratings under any securities regulation.

Scores are stored on a 0-100 scale. Missing inputs are excluded from weighted averages rather than treated as zero, so scores reflect available data only. Confidence metrics indicate data completeness and recency, not probability of outperformance.

This page describes the scoring logic implemented in the current ETFVision engine as of 2026-06-23. Changes to scoring logic should update this page in the same release.

Key termsFor transparency - not required reading
TermPlain-English meaning
ClampedHeld within a fixed range; "clamped to 0-100" means never below 0 or above 100.
DenominatorThe components actually used in an average; missing inputs are left out, not counted as zero.
DrawdownThe percentage drop from a prior peak.
VolatilityHow much returns fluctuate; higher means bigger swings.
RegimeThe prevailing macro environment, such as rates being "restrictive," from FRED.
Look-throughSeeing the holdings inside an ETF rather than treating it as one position.
Flow-adjusted (TWR)Returns adjusted for deposits and withdrawals so cash moves are not mistaken for gains or losses.
WinsorizedExtreme values capped at a limit before scoring.
Coefficient of variationA consistency measure; lower means steadier.
DispersionThe spread of a set of scores.
BoundedHeld within a range; same idea as clamped.
ToleranceA small allowance band; here about 5% of the level.
MagnitudeThe size of a change, ignoring direction.
Downside volatilityVolatility from negative returns only.
Composite / weighted averageSeveral scores combined, with some counting more than others.
Component / sub-scoreOne ingredient of a bigger score.
BenchmarkA yardstick to compare against, such as the S&P 500.
ValuationWhether a stock looks cheap or expensive for its financials.
MomentumRecent direction of price.
AllocationHow money is split across asset types.
ConcentrationHow much sits in one holding, company, or sector.
DiversificationHow widely spread across holdings, sectors, and regions.
LiquidityHow easily something can be traded without moving its price.
DurationFor bonds, how much price moves when rates change.
ROICReturn on invested capital.
Free cash flowCash left after running and investing in the business.
MacroThe big-picture economy: rates, inflation, and growth.
Yield curveHow short- versus long-term rates compare.
MedianThe middle value; half above, half below.
AnnualizedScaled to a one-year basis.
Percentage pointsThe plain difference between two percentages.
ThemeA long-running trend an investment is tied to, such as AI.

Notation

SymbolPlain-English meaning
clamp₀¹⁰⁰(x) / bounded(x)Holds the result within a range; here, no lower than 0 and no higher than 100.
𝟙(condition)An on/off switch: 1 when the condition is true and 0 when it is false.
∧ / ∨ / ∈Logical shorthand: ∧ means and, ∨ means or, and ∈ means is in the listed set.
No usable value is available, so that component is excluded rather than counted as zero.
ΣUsually means a sum; in the covariance formula, it is the holdings' covariance matrix.
wᵀTranspose of the weights vector w, written as a row so matrix multiplication works.
√ and |x|√ means square root; |x| means absolute value, or size without direction.
Δ, such as Δ₁yChange over the stated period, such as one-year change.
x̄, first, and secondx̄ means average; first and second denote the first and second halves of the observation window.
r and wr means return; w means weight.
Financial termsFor transparency - not required reading
TermPlain-English meaning
Gross / operating / net marginThe share of revenue left after different levels of cost.
EBITDAEarnings before interest, taxes, depreciation and amortization; a rough measure of operating profit.
P/E (price/earnings)Price relative to yearly earnings; higher means more expensive.
Forward P/EP/E based on expected next-year earnings.
Price/sales, Price/bookPrice relative to revenue, or to net asset value.
EV/EBITDAEnterprise value relative to EBITDA; a valuation multiple.
ROE / ROAReturn on equity / on assets: profit relative to shareholder equity / total assets.
EPSEarnings per share.
Free cash flow yieldFree cash flow relative to price.
Debt/equityBorrowings relative to shareholder equity; a leverage measure.
Net debt/EBITDADebt minus cash, relative to EBITDA; roughly, years of profit to repay.
Current ratio / quick ratioShort-term assets versus short-term bills; a liquidity check.
Operating cash flowCash generated by the core business.
IssuerThe company behind a security; used to spot single-company concentration seen through ETFs.
High BetaMoves more than the market; amplified ups and downs.
TreasuryA US government bond; very low credit risk.
High yieldLower-credit-quality ("junk") bonds that pay more to compensate.
Standard deviationHow spread out a set of values is; the basis of volatility.
CovarianceHow two holdings move together; used to estimate their combined risk.

How ETFVision scores work

How ETFVision scores work - in plain terms

Two report cards: one for each investment, and one for your whole portfolio.

Think of it as two report cards. First, a report card for each investment: for any stock or fund we ask a few simple questions, such as whether the business is financially strong, whether the price is reasonable, how bumpy it has been, and whether it fits today's market. Those answers roll into one Characteristics Score with an easy label: Excellent, Good, Neutral, Weak, Poor, or Significant Concerns.

Second, a report card for your whole portfolio: we look at how your money is spread out, how concentrated it is, how risky it has been, and a few other angles, and roll those into a Portfolio Score. The two are linked: part of your portfolio's score reflects how well the individual investments you hold score on their own.

Everything is calculated by fixed rules from your data. No human opinion, market call, or stock tip is involved.

Characteristics Score

Characteristics Score Methodology

One overall score and label for a single investment.

The Characteristics Score is shown with user-facing analytical assessment labels. These labels do not mean buy, sell, hold, reduce, or any other trade instruction.

Score rangeAssessment label
80-100Excellent
65-79Good
48-64Neutral
35-47Weak
20-34Poor
Below 20Significant Concerns
MissingInsufficient Data
Characteristics Score = weighted average of available component scores for the instrument type. A component contributes only when its score is available and finite. Each result is clamped to the 0-100 scoring scale.
Stocks
ComponentWeightWhat it measures
Business Quality40%How financially strong and well-run the company is
Valuation20%Whether the price looks cheap or expensive for its financials
Fundamental Trends15%Whether the financials are improving or weakening over time
Risk Analytics10%How volatile and loss-prone it has been (higher score = lower risk)
Market Vision alignment7%How it fits the current macro/market backdrop
Theme alignment5%How well it maps to tracked investment themes
Momentum3%Recent price direction
ETFs
ComponentWeightWhat it measures
Risk analytics30%How volatile and loss-prone it has been (higher score = lower risk)
Momentum20%Recent price direction
Macro fit18%How the asset suits the current rate/inflation/growth regime
Benchmark relative18%1-year return versus its asset-class benchmark
Market Vision alignment9%How it fits the current macro/market backdrop
Theme fit5%How well it maps to tracked investment themes
Bond ETFs
ComponentWeightWhat it measures
Duration fit22%Whether the bond's rate sensitivity suits the current rate environment
Rate regime22%How the duration matches the current interest-rate regime
Inflation regime16%How the bond suits the current inflation environment
Yield curve13%How it fits the current shape of interest rates
Credit risk11%The credit quality of the bond exposure
Portfolio stability11%How cash-like or defensive the bond role is
Market Vision alignment5%How it fits the current macro/market backdrop

Duration fit scores are ultra-short/short = 72, intermediate = 62, and long = 48. Rate and inflation regimes can further affect the bond ETF score through deterministic macro rules.

Gold ETFs
ComponentWeightWhat it measures
Inflation hedge36%How well gold hedges current inflation
Geopolitical hedge29%How well gold hedges current market/liquidity stress
Rates context14%How the rate environment affects gold
Momentum14%Recent price direction
Market Vision alignment7%How it fits the current macro/market backdrop
Crypto
ComponentWeightWhat it measures
Risk40%How volatile and loss-prone it has been (higher score = lower risk)
Momentum20%Recent price direction
Liquidity regime20%How current liquidity conditions affect crypto
Macro risk appetite9%How the macro backdrop affects risk-on assets
Theme score7%How well it maps to tracked investment themes
Market Vision alignment4%How it fits the current macro/market backdrop

Crypto scores weight risk and liquidity heavily to reflect the elevated volatility profile of digital assets.

Component Calculation Details

The table below explains how the main score components, fits, and alignments are calculated before they are combined by instrument type.

Show component formula detailFor transparency - not required reading
Component / fit / alignmentCalculation detail
Weighted composite

In plain terms: Available component scores are multiplied by their weights, added together, and divided by the weights that were actually available.

score=isiwiiwi\mathrm{score}=\frac{\sum_i s_i w_i}{\sum_i w_i}

Missing or non-finite component scores are excluded from both numerator and denominator.

Momentum

In plain terms: Momentum starts at 50, then adds bounded YTD and daily-return effects.

momentum=clamp0100 ⁣(50+clamp1515(rYTD×40)+clamp55(rdaily×80))\mathrm{momentum}=\operatorname{clamp}_{0}^{100}\!\left(50+\operatorname{clamp}_{-15}^{15}(r_{YTD}\times40)+\operatorname{clamp}_{-5}^{5}(r_{daily}\times80)\right)

ETF 1-year return is excluded here because it is measured separately in Benchmark Relative.

Risk analytics

In plain terms: The component starts from 100 and subtracts the measured instrument risk score, so lower measured risk gives a higher component score.

risk analytics=100instrumentRiskScore\mathrm{risk\ analytics}=100-\mathrm{instrumentRiskScore}
Theme alignment / Theme fit / Theme score

In plain terms: Theme fit starts at 55, adds bounded points for themes and a single selected-positive-tag bonus, and subtracts for High Beta.

theme=clamp0100(55+min(20,5T)+51(AQG)5H)\mathrm{theme}=\operatorname{clamp}_{0}^{100}(55+\min(20,5T)+5\cdot\mathbb{1}(A\lor Q\lor G)-5H)

T is theme count; A, Q, G, and H indicate AI / Automation, Quality, Global Diversification, and High Beta. The +5 applies once when any of A, Q, or G is present.

Macro fit

In plain terms: Macro fit starts at 55 and applies fixed asset-specific adjustments from the current macro regime.

macroFit=clamp0100(55+regimeAdjustments)\mathrm{macroFit}=\operatorname{clamp}_{0}^{100}(55+\mathrm{regimeAdjustments})

Examples: gold can gain 20 in elevated/rising/sticky inflation or stress/tight liquidity; crypto loses 25 under stress/tight liquidity; long-duration bonds lose 20 in restrictive/rising/high rates; Treasuries gain 15 when growth is weak/slowing/recessionary; Technology loses 8 in restrictive rates; Consumer Staples gains 8 when growth is weak. These are representative examples, not the exhaustive rule set.

Market Vision alignment

In plain terms: Market Vision alignment starts at 55, adds points for matching sector/theme/supportive language, and subtracts for risk language.

alignment=clamp0100(55+8S+8T+5U5R+B)\mathrm{alignment}=\operatorname{clamp}_{0}^{100}(55+8S+8T+5U-5R+B)

S, T, U, and R indicate sector mention, theme mention, supportive/tailwind language, and risk/headwind/stress/caution language. B is the asset-specific macro term bonus for bonds (+3), gold (+5), or crypto (+3).

ETF benchmark relative

In plain terms: Benchmark Relative compares an ETF's 1-year return with its external benchmark return and converts the excess return into a score.

benchmarkRelative=clamp0100 ⁣(50+clamp0.50.5(retfrbench)×100)\mathrm{benchmarkRelative}=\operatorname{clamp}_{0}^{100}\!\left(50+\operatorname{clamp}_{-0.5}^{0.5}(r_{etf}-r_{bench})\times100\right)

US broad, sector, style, factor, option-income, mid-cap, ESG, and aerospace/defense ETFs use sp500; global equity and multi-asset/balanced ETFs use global_equities; developed ex-US and International Dividend use developed_ex_us; emerging markets uses emerging_markets; curated developed single-country ETFs (EWJ, DXJ, JPXN, EWU, EWC, EWG) use developed_ex_us; curated emerging single-country ETFs (MCHI, FXI, KWEB, INDA, INDY, EWZ, EWY, EWT) use emerging_markets; other single-country ETFs receive no Benchmark Relative component; bonds, cash equivalents, preferred stock, municipal bond, and emerging-market bond ETFs use us_aggregate_bonds; commodity/gold uses gold; crypto ETFs use bitcoin.

Bond duration fit

In plain terms: Bond duration fit maps duration buckets to fixed scores.

durationFit={72ultra-short or short62intermediate48long\mathrm{durationFit}=\begin{cases}72&\text{ultra\text{-}short or short}\\62&\text{intermediate}\\48&\text{long}\end{cases}
Bond rate regime

In plain terms: Rate regime scoring uses fixed scores for long duration in difficult rate regimes and short duration in restrictive rates.

rateRegime={35long duration in high/restrictive/rising rates75ultra-short or short in restrictive rates58other available combinations\mathrm{rateRegime}=\begin{cases}35&\text{long duration in high/restrictive/rising rates}\\75&\text{ultra\text{-}short or short in restrictive rates}\\58&\text{other available combinations}\end{cases}
Bond inflation regime

In plain terms: Inflation-linked exposure scores higher in elevated or rising inflation; long duration scores lower under elevated inflation.

inflationRegime={78inflation-linked in elevated/rising inflation42long duration under elevated inflation58other available combinations\mathrm{inflationRegime}=\begin{cases}78&\text{inflation\text{-}linked in elevated/rising inflation}\\42&\text{long duration under elevated inflation}\\58&\text{other available combinations}\end{cases}
Bond credit risk

In plain terms: Credit risk uses a lower fixed score for high-yield credit quality and a higher fixed score for other known credit quality.

creditRisk={40high yield65other known credit qualitymissing\mathrm{creditRisk}=\begin{cases}40&\text{high yield}\\65&\text{other known credit quality}\\\varnothing&\text{missing}\end{cases}
Bond portfolio stability

In plain terms: Cash-like liquidity roles and Treasury classifications receive the higher stability score.

stability={75cash-like or Treasury55other bond profiles\mathrm{stability}=\begin{cases}75&\text{cash\text{-}like or Treasury}\\55&\text{other bond profiles}\end{cases}
Gold inflation hedge

In plain terms: Gold inflation hedge scoring is higher when inflation is elevated or rising.

goldInflation={78elevated or rising inflation55other available inflation regimes\mathrm{goldInflation}=\begin{cases}78&\text{elevated or rising inflation}\\55&\text{other available inflation regimes}\end{cases}
Gold geopolitical hedge

In plain terms: Gold geopolitical hedge scoring is higher when liquidity conditions are stressed or tight.

goldGeopolitical={72stress or tight liquidity55other available liquidity regimes\mathrm{goldGeopolitical}=\begin{cases}72&\text{stress or tight liquidity}\\55&\text{other available liquidity regimes}\end{cases}
Crypto liquidity regime

In plain terms: Crypto liquidity regime scoring is lower in tight liquidity and neutral when macro regime data is available but not tight.

cryptoLiquidity={35tight liquidity58macro regime available and not tightmissing macro regime\mathrm{cryptoLiquidity}=\begin{cases}35&\text{tight liquidity}\\58&\text{macro regime available and not tight}\\\varnothing&\text{missing macro regime}\end{cases}

Fundamentals

Fundamentals

How financially strong and well-run a company is, from its reported financials.

Business Quality is the stock fundamentals headline displayed in ETFVision. It combines growth, profitability, cash flow, balance-sheet strength, and earnings quality. Valuation remains a separate Characteristics component and is shown separately from Business Quality. These scores do not predict future performance.

Business Quality Score

Business Quality is the 40% weighted component for stocks. It combines Growth (25%), Profitability (25%), Cash Flow (20%), Balance Sheet (15%), and Quality (15%). Valuation is measured separately as its own top-level Characteristics component.

ComponentWeight
Growth25%
Profitability25%
Cash Flow20%
Balance Sheet15%
Quality15%

Note: "Quality" (the 15% sub-score measuring earnings stability, cash conversion, ROIC durability, and capital discipline) is one ingredient of "Business Quality" (the overall 40% stock component) - they are related but not the same.

Only available component scores contribute to the weighted average. Missing components are excluded from the denominator, so a missing input does not become a zero score.

Normalization Helpers

Show normalization formulasFor transparency - not required reading
HelperFormula
Annual basis

In plain terms: Stock fundamental sub-scores use the latest annual ratios and statements, not the latest quarter, so flow-sensitive metrics are measured on an annual basis.

selectedInput=latestAnnualRow\mathrm{selectedInput}=\mathrm{latestAnnualRow}
Positive percent metrics

In plain terms: Positive-percent scoring maps weak negative growth low, neutral growth around the middle, and strong growth high.

scorePositivePercent={10v0.1035+v+0.10neutral+0.10×15vneutral50+vneutralexcellentneutral×50v>neutral\mathrm{scorePositivePercent}=\begin{cases}10&v\le -0.10\\35+\frac{v+0.10}{neutral+0.10}\times15&v\le neutral\\50+\frac{v-neutral}{excellent-neutral}\times50&v>neutral\end{cases}

Defaults: neutral 5%, excellent 30%; final result is clamped to 0-100.

Margin metrics

In plain terms: Margin metrics scale the value between weak and strong anchors, then clamp the score.

scoreMargin=clamp0100 ⁣(valueweakstrongweak×70+25)\mathrm{scoreMargin}=\operatorname{clamp}_{0}^{100}\!\left(\frac{value-weak}{strong-weak}\times70+25\right)
Return metrics

In plain terms: Return metrics scale the value between weak and strong anchors, then clamp the score.

scoreReturn=clamp0100 ⁣(valueweakstrongweak×75+20)\mathrm{scoreReturn}=\operatorname{clamp}_{0}^{100}\!\left(\frac{value-weak}{strong-weak}\times75+20\right)
Lower-is-better metrics

In plain terms: For lower-is-better inputs, values near the excellent anchor score high and values near the poor anchor score low.

scoreLowerBetter=clamp0100 ⁣(100valueexcellentpoorexcellent×80)\mathrm{scoreLowerBetter}=\operatorname{clamp}_{0}^{100}\!\left(100-\frac{value-excellent}{poor-excellent}\times80\right)

Null values are excluded; negative values are excluded unless the metric uses a negative excellent anchor, such as share-count shrinkage.

Higher-is-better metrics

In plain terms: For higher-is-better inputs, values near the excellent anchor score high and values near the poor anchor score low.

scoreHigherBetter=clamp0100 ⁣(valuepoorexcellentpoor×80+10)\mathrm{scoreHigherBetter}=\operatorname{clamp}_{0}^{100}\!\left(\frac{value-poor}{excellent-poor}\times80+10\right)

Sub-Score Calculations

Show sub-score calculationsFor transparency - not required reading
Sub-scoreCalculation detail
Growth

In plain terms: Growth averages the available scored growth inputs.

growth=avg(revGrowth,epsGrowth,netIncomeGrowth,fcfGrowth)\mathrm{growth}=\operatorname{avg}(revGrowth,epsGrowth,netIncomeGrowth,fcfGrowth)

Each input is first scored with scorePositivePercent.

Profitability

In plain terms: Profitability averages available margin and return-on-capital inputs.

profitability=avg(GM0.15,0.65,OM0.05,0.35,NM0.03,0.25,ROE0.03,0.25,ROIC0.03,0.25,ROA0.02,0.15)\mathrm{profitability}=\operatorname{avg}(GM_{0.15,0.65},OM_{0.05,0.35},NM_{0.03,0.25},ROE_{0.03,0.25},ROIC_{0.03,0.25},ROA_{0.02,0.15})

GM = gross margin, OM = operating margin, NM = net margin, ROE = return on equity, ROIC = return on invested capital, ROA = return on assets. Each subscript pair is the (weak, strong) anchor; for example GM_{0.15,0.65} scores gross margin from 15% weak to 65% strong.

Valuation

In plain terms: Valuation averages lower-is-better valuation multiples and higher-is-better free-cash-flow yield.

valuation=avg(PE12,60,FPE12,55,PS2,20,PB1.5,15,EVEBITDA8,35,FCFY0,0.08)\mathrm{valuation}=\operatorname{avg}(PE_{12,60},FPE_{12,55},PS_{2,20},PB_{1.5,15},EVEBITDA_{8,35},FCFY_{0,0.08})

PE = price/earnings, FPE = forward P/E, PS = price/sales, PB = price/book, EVEBITDA = EV/EBITDA, FCFY = free-cash-flow yield. Subscripts are each metric's anchor pair.

Balance sheet

In plain terms: Balance sheet averages leverage, liquidity, and cash-to-debt inputs when available.

balanceSheet=avg(DE0.2,3,ND ⁣/EBITDA0.5,5,CR0.7,2.5,QR0.5,2,CashDebt0.05,1)\mathrm{balanceSheet}=\operatorname{avg}(DE_{0.2,3},ND\!/EBITDA_{0.5,5},CR_{0.7,2.5},QR_{0.5,2},CashDebt_{0.05,1})

DE = debt/equity, ND/EBITDA = net debt/EBITDA, CR = current ratio, QR = quick ratio, CashDebt = cash/debt.

Cash flow

In plain terms: Cash flow compares operating cash flow and free cash flow with revenue scale, then adds margin and growth inputs.

cashFlow=avg(OCF0,0.25R,FCF0,0.20R,FCFMargin0,0.25,FCFGrowth0.03,0.25)\mathrm{cashFlow}=\operatorname{avg}(OCF_{0,0.25R},FCF_{0,0.20R},FCFMargin_{0,0.25},FCFGrowth_{0.03,0.25})

OCF = operating cash flow, FCF = free cash flow, R = revenue.

Quality

In plain terms: Quality is a weighted average of stability, cash conversion, ROIC durability, and capital discipline.

quality=0.30E+0.30C+0.25D+0.15K\mathrm{quality}=0.30E+0.30C+0.25D+0.15K

E = earnings stability, C = cash conversion, D = ROIC durability, K = capital discipline. ROIC durability scores 10 when average ROIC is below the 8% cost-of-capital proxy; otherwise it uses scoreLowerBetter(coefficientOfVariation(roicSeries), 0.15, 0.60). Missing signals are excluded. For balance-sheet financials, cash conversion and ROIC durability are excluded from the denominator.

Financial-sector handling

In plain terms: Balance-sheet financials use adjusted inputs because bank, insurance, thrift, and mortgage-finance balance sheets differ from industrial companies.

financialAdjusted=1(sector=Financials  industry{banks,capital markets,insurance,thrifts,mortgage finance})\mathrm{financialAdjusted}=\mathbb{1}(sector=Financials\ \land\ industry\in\{banks,capital\ markets,insurance,thrifts,mortgage\ finance\})

Fee-based credit-services, payments, and asset-management firms keep standard industrial inputs. Financial scores do not currently include capital adequacy, reserve quality, or asset-quality measures.

Quality valuation adjustment

In plain terms: Large-cap quality-growth companies can receive a bounded valuation adjustment when quality metrics are strong.

adjustedValuation=clamp2855(rawValuation+premium+growthBonus)\mathrm{adjustedValuation}=\operatorname{clamp}_{28}^{55}(rawValuation+premium+growthBonus)

Applies only when market cap is at least $50B, eligible sector/industry text is present, quality composite is at least 70, and raw valuation is below 55. Premium is +22, +17, or +12 by quality band; growth score at least 70 adds +4. These are representative examples, not the exhaustive rule set.

Fundamentals confidence = clamp((availableInputs / 16) x 100). The availability count reflects the available fundamental data points (growth, profitability, valuation, balance-sheet, cash-flow, and quality signals) relative to the full set the scoring service can use.

Fundamental Trend Calculations

Trend elementCalculation detail
Observation windows

In plain terms: Short-term trend uses up to five quarterly observations; long-term trend uses up to five annual observations.

nshort5,nlong5n_{short}\le5,\quad n_{long}\le5

Annual-only metrics use not applicable for short-term direction.

Direction inputs

In plain terms: Trend direction compares early average, later average, latest value, prior value, direction changes, and volatility.

direction=f(xˉfirst,xˉsecond,xlatest,xprior,changes,volatility)direction=f(\bar{x}_{first},\bar{x}_{second},x_{latest},x_{prior},changes,volatility)

The label is chosen deterministically by comparing the overall drift (second-half average vs first-half average) with the latest move (latest vs prior value), plus the value's sign, the number of direction flips, and volatility. For lower-is-better metrics the signs are flipped so 'improving' always means getting better. Rebounding: was negative, just turned positive. Accelerating: a positive metric rising on both the latest move and the overall drift. Improving: rising overall but not yet positive, or a lower-is-better metric falling. Decelerating: still positive but the latest move dipped, or falling while still positive. Deteriorating: falling on both the latest move and the overall drift. Volatile: direction flipped 3 or more times, or the series swings widely. Stable: both drift and latest move within about 5% of the level.

Trend strength

In plain terms: Trend strength reflects how big the change is.

strength={strongxlatestxfirst0.15moderatexlatestxfirst0.05weakotherwisestrength=\begin{cases}strong&|x_{latest}-x_{first}|\ge0.15\\moderate&|x_{latest}-x_{first}|\ge0.05\\weak&\text{otherwise}\end{cases}

x_first is the earliest observation in the window. Stable counts as weak and volatile as moderate.

Positive directions

In plain terms: Positive trend labels map to fixed scores by strength.

score={90accelerating/improving strong74accelerating/improving moderate66accelerating/improving weak78rebounding strong68rebounding other56stablescore=\begin{cases}90&\text{accelerating/improving strong}\\74&\text{accelerating/improving moderate}\\66&\text{accelerating/improving weak}\\78&\text{rebounding strong}\\68&\text{rebounding other}\\56&\text{stable}\end{cases}
Negative directions

In plain terms: Negative or volatile trend labels map to lower fixed scores by strength.

score={44decelerating strong50decelerating other18deteriorating strong34deteriorating moderate42deteriorating weak32volatile strong44volatile otherscore=\begin{cases}44&\text{decelerating strong}\\50&\text{decelerating other}\\18&\text{deteriorating strong}\\34&\text{deteriorating moderate}\\42&\text{deteriorating weak}\\32&\text{volatile strong}\\44&\text{volatile other}\end{cases}
Trend confidence

In plain terms: Trend confidence rises with observation count and is reduced for volatility or non-finite values.

confidence=base(n)181volatile201nonfiniteconfidence=base(n)-18\mathbb{1}_{volatile}-20\mathbb{1}_{nonfinite}

Base confidence: fewer than 3 observations = 20; 3-4 observations = 62; 5+ observations = 82.

Per-metric score

In plain terms: Each metric combines short-term and long-term trend scores using confidence-scaled weights.

overallTrendScore=weightedAvg(shortScore,longScore),wshort=0.4c,wlong=0.6coverallTrendScore=\operatorname{weightedAvg}(shortScore,longScore),\quad w_{short}=0.4c,\quad w_{long}=0.6c

c is the metric's trend confidence (0-1).

Summary trend score

In plain terms: Category trend scores are confidence-weighted and then combined with fixed category weights.

summary=0.35G+0.25M+0.20P+0.10B+0.10Qsummary=0.35G+0.25M+0.20P+0.10B+0.10Q

G = growth, M = margin, P = profitability, B = balance sheet, Q = quality category trend scores.

Confidence Metric

Confidence Metric

How much data we had to work with - not how likely something is to go up.

ContextHow confidence is calculated
FundamentalsAvailable data points divided by 16 defined inputs, clamped to 0-100.
Trend scores3-4 observations produce 62%; 5+ observations produce 82%; volatile direction subtracts 18.
Risk metrics30 days = 40%, 60 days = 55%, 120 days = 70%, 252+ days = 90%.
Characteristics ScoreComposite of available component ratio, score dispersion, strategic agreement, and signal conflict; strong/weak conflict subtracts 8.

Characteristics Confidence Formula

Show confidence formula detailFor transparency - not required reading
InputCalculation detail
Available ratio

In plain terms: The available ratio is the share of configured component weight that has usable data.

ratio=availableComponentWeighttotalConfiguredComponentWeightratio=\frac{availableComponentWeight}{totalConfiguredComponentWeight}
Base confidence

In plain terms: Most instruments start from base confidence 72; crypto starts from 62 because crypto classifications are intentionally conservative.

base={62crypto72otherwisebase=\begin{cases}62&\text{crypto}\\72&\text{otherwise}\end{cases}
Completeness bonus

In plain terms: The completeness bonus rewards near-complete component coverage.

bonus={8ratio0.954ratio0.800otherwisebonus=\begin{cases}8&ratio\ge0.95\\4&ratio\ge0.80\\0&\text{otherwise}\end{cases}
Agreement bonus

In plain terms: Agreement bonus adds points when component-score dispersion is positive but low.

agreement={50<dispersion<120otherwiseagreement=\begin{cases}5&0<dispersion<12\\0&\text{otherwise}\end{cases}
Strategic agreement bonus

In plain terms: Strategic agreement adds points when fundamentals, Market Vision alignment, and theme alignment are all strong.

strategic=51(fundamentals70marketVision70theme70)strategic=5\cdot\mathbb{1}(fundamentals\ge70\land marketVision\ge70\land theme\ge70)
Conflict penalty

In plain terms: Conflict penalty subtracts points when strong and weak components coexist.

conflict=81(max(component)70min(component)<45)conflict=8\cdot\mathbb{1}(\max(component)\ge70\land\min(component)<45)
Dispersion penalty

In plain terms: Dispersion penalty grows with score spread but is capped at 12.

dispersionPenalty=min(12,dispersion×0.25)dispersionPenalty=\min(12,dispersion\times0.25)
Final formula

In plain terms: Final confidence starts from base confidence scaled by available data, adds bonuses, subtracts penalties, and clamps to 0-100.

confidence=clamp0100 ⁣(baseratio+completeness+agreement+strategicconflictdispersionPenalty)confidence=\operatorname{clamp}_{0}^{100}\!\left(base\cdot ratio+completeness+agreement+strategic-conflict-dispersionPenalty\right)

Higher confidence means more complete underlying data. It does not represent expected return, probability of outperformance, or suitability for any individual investor.

Guardrails

Guardrails

Safety checks that can lower a label even when the raw score looks high.

GuardrailConditionEffect
Low confidence capConfidence below 50Insufficient Data
Weak business quality capBusiness Quality score below 35 (stocks)Capped at Weak
Severely stretched valuation capValuation score below 15 (stocks)Capped at Neutral
Excessive instrument risk capInstrument risk score above 75Capped at Neutral for Strong or Exceptional Business Quality; otherwise capped at Weak unless already Poor or Significant Concerns
Bond duration and rate regime mismatch capLong-duration bond profile in restrictive, rising, or high-rate regimeCapped at Neutral
Portfolio concentration capPortfolio-level concentration thresholdPortfolio Review only; not applied to per-instrument Characteristics Score
Duplicate exposure capDuplicate exposure detected from holdings or look-through dataPortfolio Review only; not applied to per-instrument Characteristics Score
Crypto allocation capPortfolio-level crypto allocation thresholdPortfolio Review only; not applied to per-instrument Characteristics Score

An instrument may have a high Characteristics Score but still be capped by a guardrail. Guardrails are applied consistently and mechanically. They are not discretionary judgements.

Portfolio Score

Portfolio Score

A report card for your whole portfolio, not just one holding.

DimensionWeightWhat it measures
Allocation15%Cash, equity, fixed income, gold and crypto balance
Concentration15%Underlying-company top holding, top-five issuer exposure, and sector concentration
Diversification15%Holding count, asset class, sector, geography, currency spread and correlations
Risk15%Volatility, drawdown and risk contribution
Macro Fit15%Portfolio posture vs FRED regimes and Market Vision
Insight Alignment10%Holdings agreement with the Characteristics Score engine
Fixed Income10%Duration, credit quality and recession-hedge roles
Theme Exposure5%ETF look-through theme alignment vs current news and macro themes
Geography0%Displayed diagnostic dimension; currently excluded from the composite

Portfolio Dimension Definitions

DimensionHow it is evaluated
AllocationStarts from an 82 baseline and adjusts for equity-heavy exposure, low fixed-income ballast, high cash, and material crypto exposure.
ConcentrationUses underlying-company issuer exposure on a total-value basis. Direct single-stock holdings are included; diversified ETF wrappers remain visible as direct positions but do not trigger single-company concentration findings.
DiversificationUses meaningful direct holding count, asset-class count, sector count, currency count, and average correlation. Concentration is measured in the Concentration section; Diversification measures breadth and correlation as a separate dimension.
RiskUses portfolio volatility, current drawdown, max drawdown, and risk contribution diagnostics from flow-adjusted return data.
Macro FitCompares portfolio posture against FRED rates, inflation, growth, liquidity regimes and the latest Market Vision risk context.
Insight AlignmentCompares current holdings with the Characteristics Score engine output and measures coverage of scored instruments.
Fixed IncomeUses total bond allocation, duration exposure, high-yield exposure, treasury/corporate mix, recession hedge exposure, and bond profile coverage.
Theme ExposureUses ETF look-through theme exposure and current news/macro theme intelligence where available.
GeographyUses ETF country look-through or direct geography fallback. It is displayed as a diagnostic and currently carries 0% portfolio-score weight.

Portfolio Section Score Formulas

Each section score is rounded and clamped to 0-100 before the weighted composite is calculated.

DimensionPlain-English explanation
AllocationStarts at 82 and is reduced by excess equity concentration, insufficient bond ballast, high cash, or material crypto exposure.
ConcentrationStarts at 90 and is reduced by large single-company issuer exposure, high top-five issuer concentration, or dominant sector exposure.
DiversificationBuilds from the risk analytics diversification score, which measures breadth and correlation, and adds points for broader sector and country coverage from ETF look-through. Concentration is measured separately in the Concentration section.
RiskStarts at 88 and is reduced by high volatility, large drawdowns, or deep current drawdowns.
Macro FitStarts at 72 and adjusts based on whether the portfolio posture is appropriate for current rate, growth, and inflation regimes.
Insight AlignmentStarts at 60 and increases when current holdings score well in the Characteristics Score engine, and decreases when holdings score poorly.
Fixed IncomeStarts at 78 and adjusts for bond sleeve size, long-duration exposure, high-yield exposure, and recession-hedge coverage.
Theme ExposureStarts at 64 and increases for theme alignment, and decreases for excessive single-sector concentration.
GeographyCalculated as a diagnostic only - currently carries 0% weight in the composite score.
Show portfolio score formulasFor transparency - not required reading
SectionFormula
Allocation

In plain terms: Allocation starts at 82 and subtracts points for excess equity, insufficient bonds, high cash, and material crypto exposure.

8280max(0,weq0.85)90max(0,0.08wbond)55max(0,wcash0.35)90max(0,wcrypto0.10)82-80\max(0,w_{eq}-0.85)-90\max(0,0.08-w_{bond})-55\max(0,w_{cash}-0.35)-90\max(0,w_{crypto}-0.10)
Concentration

In plain terms: Concentration starts at 90 and subtracts points for large top issuer, top-five issuer, and sector weights.

90150max(0,wtopIssuer0.10)80max(0,wtop50.40)60max(0,wtopSector0.40)90-150\max(0,w_{topIssuer}-0.10)-80\max(0,w_{top5}-0.40)-60\max(0,w_{topSector}-0.40)

Measured at the underlying-company issuer look-through level on a total-value basis.

Diversification

In plain terms: Diversification starts from Risk Analytics diversification and adds a small capped benefit for broader sector and country look-through.

diversification=riskDiversification+min(8,sectorCount+countryCount)diversification= riskDiversification + \min(8, sectorCount+countryCount)

holdingScore, assetClassScore, sectorScore, and currencyScore each reward breadth and are capped; correlationPenalty grows with average correlation between holdings.

Risk

In plain terms: Portfolio risk starts at 88 and subtracts points for volatility, max drawdown, and current drawdown above thresholds.

88120max(0,volatility0.18)100max(0,maxDrawdown0.15)70max(0,currentDrawdown0.08)88-120\max(0,volatility-0.18)-100\max(0,|maxDrawdown|-0.15)-70\max(0,|currentDrawdown|-0.08)
Macro Fit

In plain terms: Macro Fit starts at 72 and applies fixed adjustments for restrictive rates, weak growth, and elevated inflation with gold exposure.

728R10G+5I72-8R-10G+5I

R applies when rates are restrictive and equity allocation is above 75%; G applies when growth is weak and equity allocation is above 70%; I applies when inflation is elevated and the portfolio has gold exposure.

Insight Alignment

In plain terms: Insight Alignment starts at 60, adds for constructive held instruments, subtracts for weak held instruments, and adds coverage.

min(94,60+4C8W+12V)\min(94,60+4C-8W+12V)

C = constructive held instruments, W = weak-scoring held instruments, V = coverage/share of holdings scored. The 94 cap applies when the section has any incomplete-coverage or weak-holding finding.

Fixed Income

In plain terms: Fixed Income starts at 78 and adjusts for bond sleeve size, long duration, high yield, and recession-hedge exposure.

78120max(0,0.08wbond)60max(0,wlongDuration0.35)80max(0,whighYield0.20)+min(8,wrecessionHedge×10)78-120\max(0,0.08-w_{bond})-60\max(0,w_{longDuration}-0.35)-80\max(0,w_{highYield}-0.20)+\min(8,w_{recessionHedge}\times10)
Theme Exposure

In plain terms: Theme Exposure starts at 64, adds for aligned themes, and subtracts for a very large largest sector weight.

64+min(15,alignedThemeCount×4)50max(0,wlargestSector0.45)64+\min(15,alignedThemeCount\times4)-50\max(0,w_{largestSector}-0.45)
Geography

In plain terms: Geography subtracts for high US weight or low international weight, but currently carries 0% overall weight.

8680max(0,wUS0.70)120max(0,0.12winternational)86-80\max(0,w_{US}-0.70)-120\max(0,0.12-w_{international})

This is diagnostic only and currently has 0% overall weight.

The Portfolio Score reflects analytical characteristics at the time of the last review run. It does not predict future performance or assess suitability for any individual.

Portfolio review confidence starts at 40 and adds points for holdings, recent prices, sufficient risk observations, available Characteristics Score outputs, Market Vision, macro regime, theme intelligence, and ETF look-through coverage.

Risk Analytics

Risk Analytics

How bumpy and loss-prone something has been in the past.

Risk Analytics measures how volatile and loss-prone an instrument or portfolio has been based on historical price data. A higher risk score means higher measured risk. These are backward-looking metrics - they describe past behaviour, not future risk.

Daily portfolio returns are calculated as current value less external cash flow, divided by previous value, minus one. This TWR-style adjustment avoids treating deposits as gains or withdrawals as drawdowns.

MetricCalculation detail
Instrument daily return

In plain terms: Daily return compares today's close with the previous close.

rdaily=closetcloset11r_{daily}=\frac{close_t}{close_{t-1}}-1
Instrument weekly return

In plain terms: Weekly return compares today's close with the close five trading days earlier.

rweekly=closetcloset51r_{weekly}=\frac{close_t}{close_{t-5}}-1
Instrument annualized volatility

In plain terms: Annualized volatility scales daily return fluctuation to a one-year basis.

σannual=stdev(rdaily)×252\sigma_{annual}=\operatorname{stdev}(r_{daily})\times\sqrt{252}

30D requires at least 10 observations, 90D at least 30, and 1Y at least 60.

Instrument drawdown

In plain terms: Drawdown measures the percentage drop from the running peak.

drawdown=closetrunningPeakt1drawdown=\frac{close_t}{runningPeak_t}-1

Current drawdown is the latest drawdown. Max drawdown is the most negative drawdown in the analyzed history.

Instrument risk score

In plain terms: Instrument risk blends volatility, drawdown, downside volatility, and negative-return frequency.

risk=0.35v+0.35d+0.20s+0.10frisk=0.35v+0.35d+0.20s+0.10f

v = bounded(1Y volatility / 0.60 x 100); d = bounded(abs(maxDrawdown) / 0.50 x 100); s = bounded(downsideVolatility / 0.45 x 100); f = negativeReturnFrequency x 100 or 50 when missing.

Risk buckets

In plain terms: Risk buckets map risk score ranges to labels.

bucket={lowrisk<25mediumrisk<50highrisk<75very highrisk75insufficient datarisk=bucket=\begin{cases}low&risk<25\\medium&risk<50\\high&risk<75\\very\ high&risk\ge75\\insufficient\ data&risk=\varnothing\end{cases}
Portfolio period return

In plain terms: Portfolio period return removes deposits and withdrawals before measuring the portfolio's change.

periodReturn=currentTotalValuenetExternalFlowpreviousTotalValue1periodReturn=\frac{currentTotalValue-netExternalFlow}{previousTotalValue}-1

Deposits are positive external flows; withdrawals are negative external flows.

Portfolio volatility

In plain terms: Portfolio volatility annualizes flow-adjusted daily portfolio return fluctuation.

annualizedVolatility=stdev(rportfolio,daily)×252annualizedVolatility=\operatorname{stdev}(r_{portfolio,daily})\times\sqrt{252}
Portfolio drawdown

In plain terms: Portfolio drawdown chains flow-adjusted returns from 100, tracks the running peak, and measures drops from that peak.

levelt=100i=1t(1+ri),drawdownt=leveltpeakt1level_t=100\prod_{i=1}^{t}(1+r_i),\quad drawdown_t=\frac{level_t}{peak_t}-1

Max drawdown is the most negative point in the series.

Covariance risk contribution

In plain terms: When enough overlapping observations exist, covariance estimates each holding's share of portfolio volatility.

σp2=wTΣw\sigma_p^2=w^{\mathsf{T}}\Sigma w

w = vector of holding weights, Σ = holdings' covariance matrix, and wᵀΣw = portfolio variance. Eligibility requires at least 30 overlapping observations and about 70% eligible portfolio-value coverage. Covariance is annualized by multiplying by 252.

Proxy risk contribution

In plain terms: When covariance coverage is insufficient, proxy risk contribution weights allocations by fixed asset-type risk weights.

riskSharei=wi×proxyWeighti,contributioni=riskShareijriskSharejriskShare_i=w_i\times proxyWeight_i,\quad contribution_i=\frac{riskShare_i}{\sum_j riskShare_j}

Proxy weights are crypto 1.80, stock 1.25, gold ETF 1.05, bond ETF 0.55, other 1.00.

Annualized volatility is the sample standard deviation of daily returns multiplied by the square root of 252. Drawdown is calculated from a chained level series starting at 100.

Risk contribution is covariance-based when at least 30 overlapping observations exist and covariance coverage is at least 70% of portfolio value. Otherwise, proxy risk factors are used: crypto 1.80x, stock 1.25x, gold ETF 1.05x, bond ETF 0.55x, and other 1.00x.

Diversification Score = holdingScore + assetClassScore + sectorScore + currencyScore + 30 - correlationPenalty. holdingScore, assetClassScore, sectorScore, and currencyScore each reward breadth and are capped; correlationPenalty grows with average correlation between holdings. Concentration is measured in the Concentration section; Diversification measures breadth and correlation as a separate dimension.

Portfolio Balance Review

Portfolio Balance Review

Categories where your portfolio looks light, shown for awareness only.

Portfolio Balance Review is the deterministic screener behind the Portfolio Review page's "Portfolio Balance Review" and "Portfolio Balance Summary" cards. It checks your portfolio's look-through exposure against a fixed set of category triggers - for example low fixed-income, low international exposure, sector/defensive concentration, low real-estate exposure, elevated crypto risk, single-issuer concentration, macro vulnerability, and low inflation hedge.

A finding appears only when a trigger's threshold is met. Where a finding lists example instruments, they appear only if the category is lightly represented, the instrument is in the active approved universe, and it has passed all guardrail filters. Every finding carries the disclaimer "Analytical observation only - not a position sizing recommendation," and example instruments are labelled "Shown because category is lightly represented - not a buy recommendation." These are mechanical screens, not suggestions to buy, sell, or hold.

Market Vision

Market Vision

A weekly read of the market backdrop, used as one small input - not a prediction.

Market Vision alignment uses weekly macro and market-context text as scoring input. Its component weight is 7% for stocks, 9% for ETFs, 5% for bond ETFs, 7% for gold ETFs, and 4% for crypto.

Market Vision reports are generated weekly from macroeconomic (FRED) regime data and news and theme intelligence, and may be produced with AI assistance. They provide analytical context only - not a forecast, outlook, or CIO opinion.

Show macro and Market Vision formula detailFor transparency - not required reading
Macro / Market Vision elementCalculation detail
Macro trend confidence

In plain terms: Macro trend confidence measures whether enough observations exist for the indicator frequency.

confidence=clamp0100 ⁣(round(observationCountneeded×100))confidence=\operatorname{clamp}_{0}^{100}\!\left(round\left(\frac{observationCount}{needed}\times100\right)\right)

Needed observations: quarterly = 6, daily = 30, other = 12.

Macro trend severity

In plain terms: Macro trend severity uses fixed formulas by indicator type.

severity={min(100,Δ1y×15)inflationmin(100,latest×10)rates/yieldsmin(100,max(0,latest3.5)×25)unemploymentmin(100,Δ1y×10)otherseverity=\begin{cases}\min(100,|\Delta_{1y}|\times15)&\text{inflation}\\\min(100,|latest|\times10)&\text{rates/yields}\\\min(100,\max(0,latest-3.5)\times25)&\text{unemployment}\\\min(100,|\Delta_{1y}|\times10)&\text{other}\end{cases}
Macro persistence

In plain terms: Macro persistence counts how many of the latest six observations are non-decreasing versus the prior observation.

persistenceScore=min(100,count×16)persistenceScore=\min(100,count\times16)
FRED theme signals

In plain terms: FRED theme signals copy or clamp macro trend severity, persistence, and confidence into mapped themes.

themeSignal=(theme,clamp(severity),clamp(persistence),clamp(confidence))themeSignal=(theme,\operatorname{clamp}(severity),\operatorname{clamp}(persistence),\operatorname{clamp}(confidence))

Themes include Rates, Inflation, Growth, Employment, Yield Curve, Currency, and Energy.

Market Vision source text

In plain terms: Market Vision alignment scans the relevant report text sections for deterministic sector, theme, support, and risk language.

alignmentText=summary+assetClassViews+rates+inflation+growth+currency+geopolitical+opportunities+risks+portfolioImplicationsalignmentText=summary+assetClassViews+rates+inflation+growth+currency+geopolitical+opportunities+risks+portfolioImplications

Market Vision is not a market forecast, investment outlook, or CIO opinion. References to supportive context or risk language reflect mechanical alignment scores only, not predictions about future returns.

FRED macroeconomic regime signals are sourced from the Federal Reserve Bank of St. Louis public API and updated on a scheduled basis.

Limitations

Limitations

Known boundaries of ETFVision analytical outputs.

  • Scores reflect data available at the time of the last scheduled engine run. Data may be delayed, incomplete, or subject to revision by the source provider.
  • Bond rate and spread shock estimates are first-order approximations and do not model convexity, curve shape, ETF premium/discount behavior, or changing fund composition.
  • Covariance risk contribution requires sufficient price-history overlap. When coverage is insufficient, a proxy model is used and flagged in risk diagnostics.
  • Fundamental scores require financial statement data. Companies with limited reporting history or non-standard reporting may have fewer inputs and lower confidence.
  • ETF look-through data reflects cached provider allocations. Allocations may lag actual fund composition.
  • The Portfolio Score is bounded by its component construction and in practice tops out in the mid-80s rather than 100; a mid-80s score reflects a well-constructed portfolio, not an underperformance signal.
  • Business Quality is a quality-and-growth composite — it includes a 25% growth weight alongside profitability, cash flow, balance-sheet strength, and earnings quality — not a pure quality measure.
  • Sub-score thresholds are fixed absolute economic anchors, not sector-relative; capital-light and capital-intensive businesses are measured against the same anchors, so cross-sector comparisons should account for structural differences.
  • Bond, gold, and crypto component scores are regime-dependent (rates, inflation, liquidity) and shift as the macro regime changes, independent of the instrument.
  • Geography is computed for context and shown diagnostically but carries 0% weight in the composite score.
  • The Excellent band (80-100) is intentionally reserved for instruments with exceptional characteristics across components and is uncommon; most sound instruments fall in the Good or Neutral range.
  • Structurally low-margin business models may score lower on margin-based profitability inputs despite strong returns on capital; profitability should be read alongside the capital-efficiency signals.
  • ETF Benchmark Relative pairs US equity ETFs to the S&P 500 and international developed / emerging-market ETFs to MSCI-family proxies (MSCI EAFE, MSCI EM). Funds tracking FTSE or S&P index families — which classify markets such as South Korea differently — can legitimately diverge from these MSCI benchmarks over a given period; this reflects index construction, not a data issue.
  • Scoring anchors and label bands are fixed absolute thresholds, validated once against the universe as a sanity check and held constant across refreshes and market regimes; they are not refit to the current universe.

Scores do not account for individual tax circumstances, investment horizons, liquidity needs, or personal financial goals. ETFVision does not have knowledge of users' broader financial situation. All outputs should be considered alongside advice from a qualified financial professional.

Related: Legal Disclosures|