← Back to the screener

ETF Relative Strength — Methodology

How every number on the screener is calculated, and what was tested before trusting it.

What this is

A relative-strength screen over 80 exchange-traded funds spanning commodities, fixed income, developed markets, emerging markets, US sectors and US subsectors. It ranks each fund against every other in the universe and shows where the strength and weakness currently sit.

It is an attention-routing tool. Its job is to make it obvious which funds and which groups are moving, so that a chart review starts somewhere sensible rather than with all eighty names.

The universe

Eighty funds across six buckets. Buckets are used for display and for the within-group correlation measure; the ranking itself is always computed across the whole universe, so a fund is judged against everything, not just its peers.

Because the universe deliberately spans asset classes, its members are less correlated with each other than a single-sector list would be. That is what gives a relative-strength measure something to separate.

Percentile ranks — the core measure

For each lookback window the fund's total return over that window is computed, and then ranked across the universe on the same date. The rank is expressed as a percentile, so every horizon is on the same 0–1 scale and averaging across horizons is meaningful.

Four lookbacks are used: one month (21 trading days), three months (63), six months (126) and twelve months (252).

pct_1m … pct_12m
Percentile rank of the fund's return over that window, against all 80 funds, as of the latest close. 1.00 means it is the strongest in the universe over that window.
composite
The mean of the four percentiles. One number, but a decomposable one — you can always see which horizon is driving it.
agreement
How many of the four horizons place the fund in the top quartile (percentile ≥ 0.75). 4 means strong over every window; 1 means the strength is confined to one lookback.

Why agreement matters more than the composite

A fund can reach the same composite two ways: consistently strong across all four horizons, or extremely strong over one window and mediocre elsewhere. Those are different situations and the composite alone cannot tell them apart.

The agreement column separates them. Four out of four is an established trend. One out of four is usually a short-term spike in an otherwise unremarkable fund — the kind of thing that looks like a signal and is not.

Movers — measured over four weeks

The change figure is the composite today minus the composite 21 trading days ago, expressed in percentile points. It is deliberately not a week-on-week change.

A single week's rank move has a median of 5 places, and roughly a third of names move ten or more places in a week. Almost all of that is churn in the underlying measurements rather than a change in what the market is doing, so a weekly risers-and-fallers list is mostly noise. Four weeks filters most of it out while still being timely enough to act on.

change_4w
Composite now minus composite 21 trading days ago, in percentile points.
rank_change
Places gained (positive) or lost (negative) over the same four weeks.

Triggers and context

These are computed directly from price and volume, without reference to the ranking. They are the things that make a chart worth opening.

The context columns exist so that a review starts informed: whether a fund is moving on its own or because its whole group is moving is usually the first question worth answering about any individual chart.

days_since_52w_high
Trading days since the fund last set a 52-week high. Blank if it has not set one inside the measured window — deliberately not reported as zero.
pct_from_52w_high
How far the current price sits below the highest close of the past 252 trading days.
volume_ratio
Latest volume divided by its own 20-day average. Above 2 is flagged as a spike.
range_break
True when the close is above the highest close of the preceding 60 trading days.
vol_63d
Annualised standard deviation of daily returns over 63 trading days.
bucket_corr
Correlation of the fund's daily returns with the average of its own bucket over 63 trading days. High means it is moving with its group; low means it is moving alone.

The data

Daily adjusted closes and volumes, sourced from Yahoo Finance via yfinance, stored in this repository as a single file and updated incrementally: each rebuild requests only the bars it does not already have, normally one row per fund.

Because the history is committed, a rebuild reads local data only and never touches the network. That makes a deployment deterministic and means a build cannot fail because a data provider is slow.

Adjusted prices are revised retroactively when a split or dividend is applied. An append-only store cannot see those revisions, so the history is re-downloaded in full periodically to resynchronise.

What was tested, and what it showed

The ranking on this page was tested against subsequent returns rather than assumed to work. Forward rank correlation was measured between the score and the return over the following period, at horizons from one week to five years, on this universe from 2004 to 2026.

At no horizon was the relationship statistically reliable. Some long-horizon figures look strong — naive t-statistics of 6 to 8 — but those are an artifact of overlapping windows: a 52-week forward return measured every week reuses 51 of the same 52 weeks, so the effective sample is around 22 observations, not 1,125. Corrected for that, every horizon sits below t = 2.

This is stated on the page because it should change how the screen is used. It describes what has been happening and where. It does not forecast, and any narrative built on it is a description with hypotheses attached, not a prediction.

A note on the original construction

This screen previously ranked funds by a pairwise tournament: every fund against every other, on the ratio of their prices measured against that ratio's own moving average, with the winner of each pair collecting a point.

That score's ranking was measured against simpler alternatives across 600 weeks and turned out to be a near-perfect copy of a single far simpler quantity — price divided by its own moving average — at a rank correlation of 0.9998. It was also close to trailing four-week return, at 0.894.

In other words the tournament reproduced, at the cost of 3,160 comparisons per rebuild, something that 80 divisions give you directly. The current construction computes the cheap thing openly instead of the expensive thing obscurely, and the multi-horizon percentiles add information the tournament could not express.