Axes. Right of centre means the group is outperforming its benchmark's recent trend (RS-Ratio above 100); above centre means that relative strength is accelerating (RS-Momentum above 100). The two measures have very different spreads, so each axis is divided by its RMS distance from 100 across the dots and tails on screen. These are view-relative units, not a statistical σ: +1 is the same visual distance on both axes, but the numbers are not comparable between views. The window is square and centred, so a rotation traces a circle rather than an ellipse. Raw values are in each dot's tooltip.
Levels. Seven tiers, cut where the AI trade actually moves apart: Core Semis, AI Compute, Networking & Optics, Power & Buildout, Platforms & Software, Physical AI and Bio AI. Full stack and the tier views compare everything against QQQ, a common yardstick; switch Full stack to All layers to see every layer at once. Opening a layer switches to its industry peer (Accelerators against SOXX, software against IGV, biotech against XBI, and so on), so you see which names lead within their industry. The vs control overrides either, and the Benchmark check under the lists shows how the call changes across benchmarks.
Lists. Each quadrant is sorted by strength: relative return over common daily endpoints from about six months ago to one month ago (dots too new for it follow, by distance from the centre). The Strength tab prints the exact dates and ranks every dot on it at once. The arrow is the direction of the last step; the small number is how long the dot has been in that quadrant (* means it includes the week still in progress); NEW marks a crossing in the last two bars; the percentage is relative performance over the tail; breadth is the share of the historically eligible basket members that are themselves right of centre against the same benchmark. Untick a row to hide it; the axes rescale to what is left, and Show all remains available on every list tab. To see small moves when one name sets the scale, use Scale + above the chart (or + / −, 0 to fit, or pinch on a trackpad); zoomed in, the window follows the bulk of the dots, and any that fall beyond the edge are pinned to it with an arrow in their quadrant's colour.
Custom views. Customize (or + New view under My views in the sidebar) starts a view of your own from the dots on the chart. Add any tier, layer, subsector or ticker as its own dot (+ each adds every layer of a tier, or every subsector of a layer, separately), remove what you don't want, and pick the benchmark with vs. A combined basket merges several of them into one dot that equal-weights their distinct stocks, the same rule a layer or tier uses, so a name in two of its parts counts once and weighted proxies are not weighted inside it. Views are kept in this browser only; the page address carries the open view, so a link shares it, and a view opened from someone else's link can be saved to your own list.
Research scope. scripts/backtest.py explores individual stocks and ETFs across several settings, horizons and universes. It does not directly test the seven displayed tier portfolios, and it does not validate this page as an allocation or timing strategy. Strength ranks past relative performance while excluding the latest month; use it as descriptive context, not a forecast. The universe was chosen in 2026 with hindsight, which can flatter results.
Stability. The smoothing choices change the answer more than most readers would guess. Every dot is also run under four alternatives: four-bar momentum, EMA 5 with a longer baseline, a much longer baseline, and no smoothing. A badge such as 2/5 marks a call that only a minority of settings share; a recent listing may lack history for some settings, which then don't count (3/4). Treat badged calls as provisional.
What it measures. Relative price performance. It says which groups are outperforming or losing momentum against a benchmark, not how much money is flowing into them; there are no flow, volume or positioning data here. This is an RRG-style chart that approximates the JdK Relative Rotation Graph (RRG and Relative Rotation Graph are registered marks of RRG Research). Its formulas are intended to produce similar rotation concepts, but the values and crossings are not established as equivalent to proprietary JdK calculations.
Baskets. A basket's return is the equal-weighted mean of its members' one-bar returns, compounded: a portfolio rebalanced to equal weight every bar, not buy-and-hold, and not a tradable index. A subsector equal-weights its stocks; a layer or tier equal-weights its distinct stocks directly, so subsector size does not change a stock's influence and a name listed twice in one layer counts once. Equal weight shows breadth; a cap-weighted basket would mostly show its largest member.
Formulae. RS = price ÷ benchmark. RS-Ratio = 100 × EMA(3) of RS ÷ its moving average (10 weeks on weekly bars, 21 sessions, about a month, on daily bars). RS-Momentum = EMA(3) of the one-bar change in RS-Ratio. Weekly and daily therefore differ in horizon as well as bar size, answer different questions, and can disagree; the line above the chart always states which is shown.
Replay. Replay shows today's baskets through past prices, not the baskets as they would have been defined at the time; the trading on this date count shows how many members existed then. Deliberate membership changes recorded in the configuration are applied historically from the date they were made ().
Prices from Yahoo Finance, rebuilt every 30 minutes during US trading hours and again after the close. During the session the latest bar is live: drawn hollow, labelled with the time of the build, never given a NEW badge, and replaced by the official close afterwards. Yahoo's quotes can be delayed by around 15 minutes and GitHub's scheduler can run late, so live data is typically 20–45 minutes behind the market. Foreign listings are converted to USD and carried forward on local holidays. An Asian close lands 13–15 hours before the US close it is paired with, so on daily bars those names read about one session behind; weekly bars are the better choice for comparisons across regions. When Yahoo has not yet published a day's official close, the last intraday bar stands in and is marked ≈ until the next build replaces it. A badge beside the title appears if a build has failed and data is two or more sessions old.