A point-in-time, survivorship-free dataset and a pre-registered, filtered state model — the same discipline behind asymmetricbeta.com, applied to sector rotation.
Formally this is a state-estimation problem. The latent state is rotation phase; the observables are noisy sector-level returns and breadth. The deliverable is a calibrated posterior probability over rotation phase at daily frequency, using data through today only — with two kinds of noise removed first: market-wide movement, and the distortion from a single dominant constituent (a cap-weighted sector index is hostage to its largest holding).
The project owns its price feed on one consistent, single-source basis rather than reading a shared, multi-vendor table. That discipline is deliberate — mixing vendors with no cross-source resolution lets one bad print corrupt returns invisibly. Each return is computed within a single source; where two sources meet, they are joined by return, not by splicing incompatible levels.
Before modelling, each sector return is taken net of its own trailing beta to the market, leaving a market-denoised residual. Alongside it we compute breadth (how many members participate) and concentration (how much of the move is one name). A genuine rotation shows broad participation; a fake one driven by a single mega-cap does not — and the breadth/concentration measures are the direct discriminators.
To detect a rotation you must first define one. The definition is pre-registered and frozen before any model is fit: cross-sectional dispersion above a trailing percentile, for a minimum run of days, with sufficient breadth in the leading sectors and low rank-correlation to the prior ordering. This mechanical rule is an external reference the model never sees — so "state 2 is a rotation" becomes checkable, not asserted.
The reading comes from a discrete hidden Markov model (three states) over the sector observables. Two disciplines matter most:
The model is unsupervised — it never sees the mechanical ruler. That one of its states independently lines up with the ruler is the evidence that the state is real rather than an artifact of fitting.
Rotations are rare, so a single train/test split cannot confirm anything. The evidence is built in two stages:
Every result is reported against honest benchmarks — the unconditional base rate (14.1%), the mechanical rule alone, and a simple dispersion threshold — so the latent-state machinery has to earn its complexity. The model learned from 104 rotation episodes, spanning every regime a reader would name.
Detection is strong; forecasting is deliberately modest. Identifying whether we are in a rotation today is confirmed out-of-sample and well-calibrated. Predicting a rotation before it is visible is much harder — the forward skill is real but small and decays within weeks, and we publish that plainly rather than dress it up. A weak forecast reported honestly is worth more than a strong one that isn't true.
Research and educational content only. Not investment advice, not an offer or solicitation, and not a recommendation to buy or sell any security.