Subscribe to FUNDA on Substack

Thematic Sector Rotation

Thematic Sector Rotation101 Thematic Sectors

Relative Rotation Graph · benchmark = equal-weight index of all 484 constituents

Today in one line

Leading quadrant holds 33 sectors, fronted by Social Media, Signal Retimers, Artificial Intelligence; weekly clockwise rotation 70.9%. Market style (S&P 500 cross-section) over the last 20 sessions: Low Volatility +3.6% strongest, Growth -3.7% weakest.

FindLiquidity101 / 101 sectors · 0 pinned

Movers use the Daily Board's median score (the median same-day percent change of a sector's constituents); quadrants and breadth use RRG relative strength (multi-year). The two are not comparable.

Quadrants
33123620
● Leading · ■ Weakening · ▼ Lagging · ▲ Improving
Momentum breadth52%↓5 · 5 wkshare with RS-Momentum >= 100
Risk appetite-61.16↓36.1 · 5 dhigh-vol minus low-vol RS
Concentration92%↓8 · 5 dcore vs long-tail, 252d percentile

Today's movers2026-10-19 · intraday, 10:30 ET

Top 8

Bottom 8

Recent crossingslast 3 weekly bars

Into Leading5
Out of Leading1
Into Lagging1

Biggest RS movesdisplacement on the RRG over the last 4 weekly bars; arrow = direction

Pinned

Nothing pinned yet. Star a sector in the RRG or tables (wiring up next).
Method — formulas, parameters, known limits

Price basis

Everything uses undefined. Do not use close from /v1/stock-price — it is split-adjusted only, not dividend-adjusted. Measured over 5 years the resulting error spans 51.4 percentage points across sectors (XLE +51.4pp, XLU +21.1pp vs XLK just +9.0pp, GLD 0pp). The error compounds monotonically, steadily pushing high-dividend sectors to the left of the RRG.

RRG formula

RS          = 100 × P / B
RS-Ratio    = 100 + normalize( SMA(RS, short) / SMA(RS, long) − 1 )
RS-Momentum = 100 + normalize( mom_lag-period difference of RS-Ratio )
normalize = divide by point-in-time pooled stdev — uses only data up to t, no look-ahead

Parameters: weekly short=undefined / long=undefined / mom_lag=undefined; daily short=undefined / long=undefined / mom_lag=undefined.

Why not the common z-score approximation: The most popular open-source RRG approximation takes a rolling z-score of the RS ratio. Testing shows it has a severe mean-reversion flaw: at the peak of the 2022 energy bull market, XLE scored an RS-Ratio of just 99.45 (below 100), ranking 17th of 28 — the market's strongest sector read as neutral-to-weak. With the dual-moving-average construction used here, XLE ranks 1st of 28 at that same date. Measured comparison (weekly, SPY benchmark): historical scenarios passed 2/5 → 4/5, sustained strength placed on the correct side 74.0% → 89.7%, clockwise dominance 56.5% → 74%.

Clockwise rotation check

RRG theory predicts trajectories rotate predominantly clockwise (momentum is the derivative of the ratio, so it turns first). Measured here: 70.9% clockwise / 21.1% counter-clockwise / 8% diagonal jumps across 1404 quadrant changes (Weekly bars, benchmark Universe EW). This is the most direct falsifiable check on the whole computation.

Quadrants and signals

The displayed quadrant is where the dot actually sits (raw). Signals use a filtered confirmed quadrant instead: the raw quadrant must hold for undefined consecutive periods with both axes outside 100±undefined. Grades: L1 = entering Leading; L2 = entering Improving/Weakening; L3 = entering Lagging or any two-quadrant jump.

Leadership and RS

RS = excess return over the universe EW index weighted , then cross-sectionally ranked into 1-99. The volume-ratio denominator is shifted by one day so it excludes the day itself.

Narrative anti-hallucination

Headlines are passed to claude-sonnet-5 as a numbered list; the model may only cite index numbers, and URLs are filled back in locally by index — so it is structurally unable to invent a source. When no relevant news is found, that is stated plainly.

How the Daily Board is built

The Daily Board score is the median same-day percent change of a sector's constituents, winsorised at +/-30%, in percentage points: a score of +1.2 reads as 'the median constituent rose 1.2% today'. It is a self-contained statistic - it fits nothing external, so it cannot quietly drift - and it measures same-day cross-sectional strength, unrelated to the RRG's multi-year relative strength. Source: /v1/stock-price closes (split-adjusted only, no dividend adjustment); each session is scored once, after the close, on close-to-close changes. While a session is trading, the newest day is the intraday board: the same score on /v1/quotes batch quotes, refreshed through the session and replaced by the settled board once the session settles. Version 2 was a five-feature ridge fit that imitated a third-party sector score; measured, it correlated 0.975 with the plain median and regressed as 0.1455 + 1.3785 x median, its six coefficients cancelled one another out, and the snapshots it was fitted against are no longer reproducible - retired 2026-09-07.

Algorithm calibration

The RRG normalisation was not guessed. It was back-solved against the reference implementation's own 31-ETF snapshot across all four bases (weekly/daily x two benchmarks): after warm-up the median absolute error is 0.0026, max 0.032, with 99.9% of points inside 0.02, per-series start offsets exact 30/30, and zero level mismatches. That pins down three things the formula text leaves open: normalisation uses a point-in-time expanding standard deviation about the pooled mean (not RMS about zero); heading is the direction of travel over one bar (not the angle from the centre); and level is a pure function of (from, to) (not a distance threshold).

Known limits

  • Membership is current-day: today's 101 sectors / 484 constituents are projected back to 2019, so the series carry survivorship and look-ahead bias.
  • Daily-rebalanced equal weighting carries a volatility-harvesting bias: the universe index runs 100 to 810 over 7.8 years versus 404 for equal-weight buy-and-hold (~2.0x). It cancels inside the RRG because sector and benchmark share the construction (measured dispersion-vs-drift correlation is only +0.045), but it does not cancel across bases, so the ratio cards deliberately use buy-and-hold.
  • The drill-down is self-referential: a constituent is benchmarked against a sector index that includes it. 38 sectors hold only 5 names and 5 hold only 3; at n=3 each name is 1/3 of its own benchmark, so true relative displacement is tiny. Because normalisation uses each sector's own pool, small sectors get their noise amplified to the same visual scale as large ones. Drill-down magnitudes are not comparable across sectors.
  • The pooled standard deviation for momentum has not converged at the start of a series: calibration shows RS-Ratio is exact throughout while RS-Momentum can be off by up to 1.0 on the earliest bars. The first 40 weekly / 200 daily bars are therefore trimmed before emission.
  • The Daily Board and the RRG are unrelated measures: the board is the same-day cross-sectional median constituent move; the RRG is multi-year relative strength. Measured across the 90 sectors on the board on the latest session (recomputed every build and swinging widely day to day), the two correlate at Spearman -0.213 with a top-ten overlap of 0, and the board score versus the Leadership RS percentile is Spearman 0.151. Do not compare these numbers across tabs.
  • The Daily Board applies a display threshold of +/-0.6, so sectors inside it are hidden entirely and the number on the board changes daily (measured 57 to 94). Rank denominators are therefore not fixed; the inline rank-change arrow carries a 'yesterday #X / N' tooltip to keep it readable.
  • The signal list is truncated twice: the build keeps only the signals inside a fixed recent time window, and the page then renders at most 400 of them; the count line above the list states how many the block holds and how many were kept. Daily signals differ from the reference implementation by +/-1 bar on timing (same transition, date off by one or two), a boundary effect of comparing the dead zone before versus after rounding.
  • Quadrants are encoded by shape, not colour alone: the four quadrant hues are indistinguishable under deuteranopia (Leading versus Lagging contrast is 1.04), so marker shape is the primary channel - circle Leading, square Weakening, up-triangle Improving, down-triangle Lagging.

Data range undefined → undefined, 101 instruments. Built 2026-10-17 01:49.