Rotation

Cyclical vs Defensive Sectors Explained

Pedro E. Founder, Valeron Macro Engine
2026-09-30 Updated · published 2026-09-30

The Macro Engine's sector rotation read splits the market into cyclical and defensive buckets, six sectors against three, and measures which side is actually leading. On 2026-09-30 the 21-day spread read barely positive, 0.009053, a NEUTRAL state even though both baskets were falling that day.

Sector rotation bar field, bars above and below a common baseline with one leader highlighted

01

How the Cyclical vs Defensive Split Actually Works

Sector rotation is one of the Macro Engine's modules: eleven sector ETFs sorted into four buckets, and the spread between the cyclical basket and the defensive basket is the read. Six sectors sit in the cyclical bucket: Consumer Discretionary, Technology, Financials, Industrials, Materials and Energy. Three sit in the defensive bucket: Utilities, Consumer Staples and Health Care. The remaining two, Real Estate and Communication Services, sit in their own yield and hybrid buckets and do not feed the cyclical-versus-defensive spread at all.

The calculation is a weighted cyclical basket return minus a weighted defensive basket return, measured over three separate windows: 1-day, 5-day and 21-day. That spread is then z-scored against its own trailing history, a minimum of 30 observations, so the same raw spread reads differently depending on how unusual it is relative to where it has recently sat. Position is that z-score clipped to a range of -1 to 1, and the state label, RISK_ON, RISK_OFF or NEUTRAL, comes from where the z-score sits against a neutral band. A window can also read UNAVAILABLE if its underlying price input is frozen or its trailing history is not yet long enough.

Reading as of 2026-09-30

On 2026-09-30, the 21-day window read a spread of 0.009053, cyclical basket return minus defensive basket return, a z-score of 0.0913 and a position of 0.0457, both reading NEUTRAL. The weighted cyclical return itself was -0.034924 and the weighted defensive return was -0.043977: both baskets fell, the defensive basket by more, which produced a barely positive spread even on a down day for both sides.

01 01 Read

On 2026-09-30 the 21-day window read a spread of 0.009053, a z-score of 0.0913 and a position of 0.0457, all reading NEUTRAL. The weighted cyclical return was -0.034924 against a weighted defensive return of -0.043977.

02 02 Means

A positive spread with both baskets in negative territory means cyclical sectors were losing less than defensive sectors that day, not that either side was actually gaining. The Overheat phase read by the Cycle Clock that same day favors Energy and Materials, both in the cyclical bucket, a separate, phase-driven overlay rather than something this rotation read computes on its own.

03 03 Playbook

The rotation read does not size a position by itself; it says which basket, cyclical or defensive, is relatively stronger over a given window. It measures baskets, not individual names: sizing an actual position once a side is favored is a separate question the Stop Risk Score answers, and how long a lookback window to trust is its own question this piece does not answer either.

02

What makes this state flip

This read has no single fixed number to cross the way a bounded score does. The state comes from where the z-score sits against a neutral band around zero, not a fixed threshold. A z-score close to that band, the 21-day reading's 0.0913 among them, is closer to flipping between NEUTRAL and RISK_ON or RISK_OFF than one sitting far from it.

The three windows can also disagree with each other, and did on 2026-09-30: the 1-day window read RISK_OFF while the 5-day and 21-day both read NEUTRAL on the same date. Which window to trust for a given decision is a separate question this piece does not resolve.

Source Sector rotation comes from backend/sector_rotation.py, reading sector_rotation.json. The spread is a weighted cyclical basket return minus a weighted defensive basket return over 1-day, 5-day and 21-day windows, z-scored against its own trailing history, a minimum of 30 observations, with position the z-score clipped to a range of -1 to 1 and state read as RISK_ON, RISK_OFF or NEUTRAL against a neutral band.
03

What this does not tell you

This read describes the cyclical-versus-defensive basket spread, not any single stock or sector's actual price level. A positive spread does not mean the cyclical basket is rising, only that it is doing relatively better than the defensive basket over that window, exactly what happened on 2026-09-30 when both fell.

Real Estate and Communication Services sit outside both baskets entirely, in their own yield and hybrid buckets, so this read says nothing about either of them. A favorable rotation read also does not by itself rank which of the six cyclical sectors, or which stock inside one, is actually leading.

04

Frequently asked questions

What sectors count as cyclical versus defensive?

Cyclical: Consumer Discretionary, Technology, Financials, Industrials, Materials and Energy, six sectors. Defensive: Utilities, Consumer Staples and Health Care, three sectors. Real Estate and Communication Services sit in their own yield and hybrid buckets and are not counted on either side.

How is the sector rotation z-score calculated?

A weighted cyclical basket return minus a weighted defensive basket return, over 1-day, 5-day and 21-day windows, is z-scored against its own trailing history, a minimum of 30 observations. Position is that z-score clipped to a range of -1 to 1.

What does a NEUTRAL rotation state mean?

The z-score is sitting inside a neutral band around zero, not clearly favoring either the cyclical or defensive basket. On 2026-09-30 both the 5-day and 21-day windows read NEUTRAL, while the 1-day window read RISK_OFF on the same date.

Can the cyclical basket fall and the rotation spread still read positive?

Yes. On 2026-09-30 the 21-day weighted cyclical return was -0.034924 and the weighted defensive return was -0.043977: both baskets fell, but the defensive basket fell by more, which produced a barely positive spread, 0.009053, even on a losing day for both sides.

What happens to Real Estate and Communication Services in this read?

Neither is counted in the cyclical or defensive basket. Real Estate sits in its own yield bucket and Communication Services in its own hybrid bucket, so this spread says nothing about either sector's own performance.

05

This spread measures relative basket performance, not the direction of the market as a whole. A positive read can happen while every sector in both baskets is losing money, exactly what the 21-day window showed on 2026-09-30.