The science

What Markets Lens actually measures, and why.

Relative rotation isn't a Markets Lens invention — it's an established institutional framework with a real history. This page explains where it came from, the exact formulas this tool runs, and how those formulas have actually performed when checked against real history.

Where Relative Rotation Graphs came from

Relative Rotation Graphs (RRG) were developed in 2004–2005 by Julius de Kempenaer, then a sell-side analyst at an investment bank in Amsterdam producing research for institutional clients — pension funds, endowments, and hedge funds. His clients wanted two things standard charts didn't give them: a clear read on relative performance (where to be overweight or underweight), and a way to see an entire universe of sectors at a glance instead of flipping through dozens of individual charts.

Sources: StockCharts ChartSchool, RRG Research (relativerotationgraphs.com).

The exact formula

RRG plots two indicators against each other: RS-Ratio (relative strength trend) on the x-axis, RS-Momentum (momentum of that trend) on the y-axis. Both center on 100 by construction, which is what makes the four quadrants meaningful.

RS = price / benchmark_price
RS-Ratio = 100 × MA(RS, 10) / MA(RS, 30)
RS-Momentum = 100 × RS-Ratio / MA(RS-Ratio, 9)

In words: RS-Ratio asks "is the short-term trend in relative strength above or below its own longer-term trend?" RS-Momentum asks the same question one level up — is RS-Ratio itself accelerating or decelerating?

These specific periods (10-day / 30-day / 9-day) — not the more commonly assumed 12/26/9 — were chosen because they were independently confirmed by a community implementer to reproduce a real Refinitiv Eikon institutional terminal's own RRG output exactly, and a second independent implementation using the same periods was confirmed "very, very close" to Refinitiv by its own author. StockCharts' exact proprietary internals aren't published, so this is the closest verifiable public match to the real methodology, not a guess.

An earlier version of this tool used a different, self-invented z-score approximation instead of this formula — it measured a different thing (statistical unusualness vs. a ticker's own history) rather than the actual JdK signal (short-term trend vs. long-term trend). It was replaced after specifically auditing the rotation math for accuracy.

The four quadrants

RS-Ratio and RS-Momentum crossing at 100 divides every ticker into one of four states. Names typically rotate clockwise through them — though not always, and not on any fixed schedule.

QuadrantRS-RatioRS-MomentumReading
LEADING≥100≥100Outperforming, momentum still positive.
WEAKENING≥100<100Still outperforming, but momentum has turned down — often an early warning.
LAGGING<100<100Underperforming, momentum still negative.
IMPROVING<100≥100Still underperforming, but momentum has turned up — the textbook "front-run" zone.

Composite score

Each ticker's RS-Ratio, RS-Momentum, and flow signal are each z-scored against every other ticker in the same day's cross-section, then blended: 40% RS-Ratio, 40% RS-Momentum, 20% flow. This is what the leaderboards rank by.

Honest limitation: the 40/40/20 weighting is a reasonable starting choice, not a validated or optimized one — it has never been backtested or tuned against an objective like Sharpe ratio or drawdown. Treat composite score as a sensible ranking, not a scientifically calibrated one.

Flow signal

For SPDR sector ETFs, "flow" is computed from real shares-outstanding history (via SSGA's own data) — day-over-day change in shares outstanding × price, z-scored. This is genuine creation/redemption flow, the closest thing to real institutional buying/selling pressure available for free.

For everything else — industry baskets, individual stocks, non-SPDR tickers — there's no equivalent free data source, so flow falls back to a volume-based proxy (rolling z-score of trading volume). This is a real limitation: volume doesn't distinguish buying from selling, so it's a much weaker signal than true flow. It's clearly labeled per-ticker (flow_source: ssga_shares vs volume_proxy) rather than presented as equivalent.

Synthetic baskets, equal-weighted

Sector and industry baskets aren't the real SPDR ETFs — they're built from individual constituent stocks (classified by FMP, priced by Polygon), combined equal-weighted rather than cap-weighted. Cap-weighting would just reproduce something close to the ETF's own methodology; equal-weighting gives smaller/mid-cap names equal say, a genuinely different (sometimes earlier) signal.

Early-momentum watchlists

The strength leaderboard ranks by composite score today — which mixes together "just started moving" with "already two weeks into the run and could roll over any day." The watchlists ask a different question: is this name improving (RS-Ratio below 100 but RS-Momentum above — the textbook front-run zone) or freshly Leading (within the last few days), and is RS-Momentum still rising over the trailing 5 days — not just high, but still climbing?

"Price since first added" is found retroactively, not from a saved timestamp: the same eligibility test is applied to every historical day, walking backward from today, to find the actual earliest day a name would have qualified continuously through to today. That's the true entry point — not just "when the quadrant changed," since a name can sit in Improving for a while before momentum genuinely turns up.

Does any of this actually work?

This is checked directly against real history, not assumed. Two questions get answered from the real quadrant history before trusting any of it:

Real result on the core 11 sectors: both hit rates came back close to a coin flip in aggregate (roughly 40% and 38%), with real variation by name — some sectors confirmed meaningfully better than chance, others meaningfully worse. That's the honest ceiling on what this signal can do: it has some edge on some names, not a strong edge everywhere. Any use of this data should sit inside that reality.

This is research, not advice

Everything on this site — quadrant positions, composite scores, watchlists, price changes — is a historical/statistical read on relative performance, not a prediction and not a recommendation. Markets Lens is not a registered investment advisor. Nothing here accounts for your personal financial situation, risk tolerance, or goals. Do your own research and consult a licensed financial advisor before making investment decisions.

Not financial advice. Markets Lens is a research and educational tool only. Nothing on this site is a recommendation to buy, sell, or hold any security. Rotation signals are historical/statistical reads, not predictions — see the Methodology page for validated hit rates, which are meaningfully better than random on some names and close to a coin flip on others. Do your own research and consult a licensed financial advisor before making investment decisions.