thetrading.tools
Cycle · 3 – 12 monthsDaily data through 2026-08-28 · updated after every close

Cycle Tracker: Is This a Broad Advance or a Narrowing Cycle?

Broad advance — the Cycle Score reads 71/100, where 100 is a broadly owned advance and 0 is a contraction. This measures the medium-term structure, not this week's tape: six equal-weight dimensions of 3–12 month evidence — trend, participation, breadth velocity, credit, growth cycle, recession risk — each mapped between documented bounds by one pure function. The identical function replays the 2010+ history, so the live gauge and the band base rates below cannot drift. Methodology revised 2026-07-18 (v2): v1's duplicate breadth votes were retired, credit widened to two channels, and the OECD leading indicator added. v3 (2026-07-19) added the Recession risk dimension (yield curve 10Y−2Y, Sahm Rule, NFCI). The full history and base rates below are computed under v3.

What drives today's read

Strongest dimension

Growth cycle at 100/100.

Weakest dimension

Breadth velocity at 51/100.

Held

Broad advance for 26 sessions.

Sources, methodology & freshnessLast updated 2026-08-28 · Open ↓
Source
Own daily price history: SPY, RSP, HYG/LQD and eligible common-stock breadth (roughly 4,750 in a typical session); daily 10Y−2Y, weekly NFCI, and release-aligned monthly Baa−10Y, OECD CLI and Sahm Rule
Methodology
Thirteen inputs across six equal-weight dimensions (v2, 2026-07-18 — v1's duplicate breadth votes retired, credit widened to two channels, growth cycle added; v3, 2026-07-19 — recession-risk dimension added: yield curve 10Y−2Y, Sahm Rule, NFCI), each mapped linearly between documented fixed bounds set at the series' practical tails; the CLI quadrant is categorical. Monthly/weekly inputs enter on release dates. One pure function (scoreCycleInputs) drives both the live gauge and the full 2010+ replay; band edges fixed at 70/58/42/30; forward SPY base rates per band at 63/126/252 sessions, published either way.
Updates
Daily after the US closeLast: 2026-08-28
Maintained & reviewed by Yuriy Matso — methodology shown on the page.
Cycle score2026-08-28 · close
Broad advance

broad advance for 26 sessions · trend 71 · participation 56 · breadth velocity 51 · credit 68 · growth cycle 100 · recession risk 79

contractiondeterioratingmixedconstructivebroad advance30425870
01

The score through time — every session since 2010

3,991 sessions of the same fixed-bound function — no re-fitting, so a 40 in 2015 means what a 40 means today. SPY rides the top pane for context; the line wears the band colors — deep green broad advance, medium green constructive, gray mixed, amber deteriorating, red contraction. The dips into contraction are the study's sample: 2011, 2015–16, 2018, 2020 and 2022 all register.

Window:
SPY (top pane, log) broad advance (70+) constructive 58–70 mixed 42–58 deteriorating 30–42 contraction (<30)

Cycle Score, daily since 2010-10-15 (3,991 sessions). Band edges are fixed at 70/58/42/30. Endpoint: 71/100 (broad advance).

02

Which dimension turned first — the last 60 sessions

The composite hides sequence: breadth velocity usually rolls over before the primary trend cracks, and credit often confirms last. Each row is one dimension's daily score on the same five-band scale as the gauge above — read left to right to see who is leading the current state.

TrendTrend · 2026-06-04 — 77/100Trend · 2026-06-05 — 70/100Trend · 2026-06-08 — 70/100Trend · 2026-06-09 — 69/100Trend · 2026-06-10 — 65/100Trend · 2026-06-11 — 69/100Trend · 2026-06-12 — 70/100Trend · 2026-06-15 — 75/100Trend · 2026-06-16 — 73/100Trend · 2026-06-17 — 70/100Trend · 2026-06-18 — 72/100Trend · 2026-06-22 — 71/100Trend · 2026-06-23 — 67/100Trend · 2026-06-24 — 66/100Trend · 2026-06-25 — 67/100Trend · 2026-06-26 — 65/100Trend · 2026-06-29 — 69/100Trend · 2026-06-30 — 71/100Trend · 2026-07-01 — 71/100Trend · 2026-07-02 — 70/100Trend · 2026-07-06 — 73/100Trend · 2026-07-07 — 71/100Trend · 2026-07-08 — 70/100Trend · 2026-07-09 — 72/100Trend · 2026-07-10 — 73/100Trend · 2026-07-13 — 71/100Trend · 2026-07-14 — 72/100Trend · 2026-07-15 — 73/100Trend · 2026-07-16 — 71/100Trend · 2026-07-17 — 68/100Trend · 2026-07-20 — 68/100Trend · 2026-07-21 — 70/100Trend · 2026-07-22 — 69/100Trend · 2026-07-23 — 66/100Trend · 2026-07-24 — 66/100Trend · 2026-07-27 — 66/100Trend · 2026-07-28 — 66/100Trend · 2026-07-29 — 62/100Trend · 2026-07-30 — 66/100Trend · 2026-07-31 — 68/100Trend · 2026-08-03 — 71/100Trend · 2026-08-04 — 76/100Trend · 2026-08-05 — 75/100Trend · 2026-08-06 — 75/100Trend · 2026-08-07 — 76/100Trend · 2026-08-10 — 76/100Trend · 2026-08-11 — 75/100Trend · 2026-08-12 — 75/100Trend · 2026-08-13 — 77/100Trend · 2026-08-14 — 76/100Trend · 2026-08-17 — 75/100Trend · 2026-08-18 — 72/100Trend · 2026-08-19 — 73/100Trend · 2026-08-20 — 70/100Trend · 2026-08-21 — 71/100Trend · 2026-08-24 — 70/100Trend · 2026-08-25 — 71/100Trend · 2026-08-26 — 70/100Trend · 2026-08-27 — 72/100Trend · 2026-08-28 — 71/100ParticipationParticipation · 2026-06-04 — 55/100Participation · 2026-06-05 — 57/100Participation · 2026-06-08 — 54/100Participation · 2026-06-09 — 60/100Participation · 2026-06-10 — 60/100Participation · 2026-06-11 — 63/100Participation · 2026-06-12 — 64/100Participation · 2026-06-15 — 57/100Participation · 2026-06-16 — 59/100Participation · 2026-06-17 — 56/100Participation · 2026-06-18 — 55/100Participation · 2026-06-22 — 56/100Participation · 2026-06-23 — 61/100Participation · 2026-06-24 — 64/100Participation · 2026-06-25 — 67/100Participation · 2026-06-26 — 69/100Participation · 2026-06-29 — 70/100Participation · 2026-06-30 — 67/100Participation · 2026-07-01 — 69/100Participation · 2026-07-02 — 70/100Participation · 2026-07-06 — 66/100Participation · 2026-07-07 — 67/100Participation · 2026-07-08 — 61/100Participation · 2026-07-09 — 60/100Participation · 2026-07-10 — 61/100Participation · 2026-07-13 — 63/100Participation · 2026-07-14 — 59/100Participation · 2026-07-15 — 57/100Participation · 2026-07-16 — 64/100Participation · 2026-07-17 — 63/100Participation · 2026-07-20 — 60/100Participation · 2026-07-21 — 57/100Participation · 2026-07-22 — 56/100Participation · 2026-07-23 — 58/100Participation · 2026-07-24 — 60/100Participation · 2026-07-27 — 64/100Participation · 2026-07-28 — 65/100Participation · 2026-07-29 — 66/100Participation · 2026-07-30 — 58/100Participation · 2026-07-31 — 54/100Participation · 2026-08-03 — 55/100Participation · 2026-08-04 — 61/100Participation · 2026-08-05 — 62/100Participation · 2026-08-06 — 60/100Participation · 2026-08-07 — 64/100Participation · 2026-08-10 — 64/100Participation · 2026-08-11 — 65/100Participation · 2026-08-12 — 64/100Participation · 2026-08-13 — 65/100Participation · 2026-08-14 — 66/100Participation · 2026-08-17 — 62/100Participation · 2026-08-18 — 61/100Participation · 2026-08-19 — 65/100Participation · 2026-08-20 — 62/100Participation · 2026-08-21 — 65/100Participation · 2026-08-24 — 65/100Participation · 2026-08-25 — 64/100Participation · 2026-08-26 — 64/100Participation · 2026-08-27 — 59/100Participation · 2026-08-28 — 56/100Breadth velocityBreadth velocity · 2026-06-04 — 48/100Breadth velocity · 2026-06-05 — 49/100Breadth velocity · 2026-06-08 — 48/100Breadth velocity · 2026-06-09 — 52/100Breadth velocity · 2026-06-10 — 52/100Breadth velocity · 2026-06-11 — 61/100Breadth velocity · 2026-06-12 — 64/100Breadth velocity · 2026-06-15 — 62/100Breadth velocity · 2026-06-16 — 61/100Breadth velocity · 2026-06-17 — 63/100Breadth velocity · 2026-06-18 — 66/100Breadth velocity · 2026-06-22 — 70/100Breadth velocity · 2026-06-23 — 65/100Breadth velocity · 2026-06-24 — 67/100Breadth velocity · 2026-06-25 — 65/100Breadth velocity · 2026-06-26 — 72/100Breadth velocity · 2026-06-29 — 78/100Breadth velocity · 2026-06-30 — 78/100Breadth velocity · 2026-07-01 — 72/100Breadth velocity · 2026-07-02 — 71/100Breadth velocity · 2026-07-06 — 71/100Breadth velocity · 2026-07-07 — 68/100Breadth velocity · 2026-07-08 — 66/100Breadth velocity · 2026-07-09 — 59/100Breadth velocity · 2026-07-10 — 57/100Breadth velocity · 2026-07-13 — 58/100Breadth velocity · 2026-07-14 — 55/100Breadth velocity · 2026-07-15 — 54/100Breadth velocity · 2026-07-16 — 55/100Breadth velocity · 2026-07-17 — 52/100Breadth velocity · 2026-07-20 — 45/100Breadth velocity · 2026-07-21 — 45/100Breadth velocity · 2026-07-22 — 48/100Breadth velocity · 2026-07-23 — 44/100Breadth velocity · 2026-07-24 — 47/100Breadth velocity · 2026-07-27 — 49/100Breadth velocity · 2026-07-28 — 50/100Breadth velocity · 2026-07-29 — 47/100Breadth velocity · 2026-07-30 — 53/100Breadth velocity · 2026-07-31 — 48/100Breadth velocity · 2026-08-03 — 51/100Breadth velocity · 2026-08-04 — 58/100Breadth velocity · 2026-08-05 — 54/100Breadth velocity · 2026-08-06 — 50/100Breadth velocity · 2026-08-07 — 55/100Breadth velocity · 2026-08-10 — 54/100Breadth velocity · 2026-08-11 — 56/100Breadth velocity · 2026-08-12 — 58/100Breadth velocity · 2026-08-13 — 62/100Breadth velocity · 2026-08-14 — 60/100Breadth velocity · 2026-08-17 — 64/100Breadth velocity · 2026-08-18 — 61/100Breadth velocity · 2026-08-19 — 67/100Breadth velocity · 2026-08-20 — 59/100Breadth velocity · 2026-08-21 — 60/100Breadth velocity · 2026-08-24 — 58/100Breadth velocity · 2026-08-25 — 57/100Breadth velocity · 2026-08-26 — 55/100Breadth velocity · 2026-08-27 — 53/100Breadth velocity · 2026-08-28 — 51/100CreditCredit · 2026-06-04 — 60/100Credit · 2026-06-05 — 60/100Credit · 2026-06-08 — 61/100Credit · 2026-06-09 — 60/100Credit · 2026-06-10 — 60/100Credit · 2026-06-11 — 59/100Credit · 2026-06-12 — 60/100Credit · 2026-06-15 — 60/100Credit · 2026-06-16 — 60/100Credit · 2026-06-17 — 59/100Credit · 2026-06-18 — 60/100Credit · 2026-06-22 — 61/100Credit · 2026-06-23 — 60/100Credit · 2026-06-24 — 57/100Credit · 2026-06-25 — 57/100Credit · 2026-06-26 — 57/100Credit · 2026-06-29 — 57/100Credit · 2026-06-30 — 59/100Credit · 2026-07-01 — 63/100Credit · 2026-07-02 — 63/100Credit · 2026-07-06 — 64/100Credit · 2026-07-07 — 67/100Credit · 2026-07-08 — 67/100Credit · 2026-07-09 — 67/100Credit · 2026-07-10 — 68/100Credit · 2026-07-13 — 69/100Credit · 2026-07-14 — 69/100Credit · 2026-07-15 — 68/100Credit · 2026-07-16 — 68/100Credit · 2026-07-17 — 67/100Credit · 2026-07-20 — 69/100Credit · 2026-07-21 — 70/100Credit · 2026-07-22 — 70/100Credit · 2026-07-23 — 70/100Credit · 2026-07-24 — 70/100Credit · 2026-07-27 — 69/100Credit · 2026-07-28 — 69/100Credit · 2026-07-29 — 70/100Credit · 2026-07-30 — 71/100Credit · 2026-07-31 — 71/100Credit · 2026-08-03 — 68/100Credit · 2026-08-04 — 66/100Credit · 2026-08-05 — 66/100Credit · 2026-08-06 — 67/100Credit · 2026-08-07 — 67/100Credit · 2026-08-10 — 69/100Credit · 2026-08-11 — 69/100Credit · 2026-08-12 — 69/100Credit · 2026-08-13 — 68/100Credit · 2026-08-14 — 69/100Credit · 2026-08-17 — 71/100Credit · 2026-08-18 — 69/100Credit · 2026-08-19 — 67/100Credit · 2026-08-20 — 68/100Credit · 2026-08-21 — 69/100Credit · 2026-08-24 — 68/100Credit · 2026-08-25 — 66/100Credit · 2026-08-26 — 67/100Credit · 2026-08-27 — 67/100Credit · 2026-08-28 — 68/100Growth cycleGrowth cycle · 2026-06-04 — 100/100Growth cycle · 2026-06-05 — 100/100Growth cycle · 2026-06-08 — 100/100Growth cycle · 2026-06-09 — 100/100Growth cycle · 2026-06-10 — 100/100Growth cycle · 2026-06-11 — 100/100Growth cycle · 2026-06-12 — 100/100Growth cycle · 2026-06-15 — 100/100Growth cycle · 2026-06-16 — 100/100Growth cycle · 2026-06-17 — 100/100Growth cycle · 2026-06-18 — 100/100Growth cycle · 2026-06-22 — 100/100Growth cycle · 2026-06-23 — 100/100Growth cycle · 2026-06-24 — 100/100Growth cycle · 2026-06-25 — 100/100Growth cycle · 2026-06-26 — 100/100Growth cycle · 2026-06-29 — 100/100Growth cycle · 2026-06-30 — 100/100Growth cycle · 2026-07-01 — 100/100Growth cycle · 2026-07-02 — 100/100Growth cycle · 2026-07-06 — 100/100Growth cycle · 2026-07-07 — 100/100Growth cycle · 2026-07-08 — 100/100Growth cycle · 2026-07-09 — 100/100Growth cycle · 2026-07-10 — 100/100Growth cycle · 2026-07-13 — 100/100Growth cycle · 2026-07-14 — 100/100Growth cycle · 2026-07-15 — 100/100Growth cycle · 2026-07-16 — 100/100Growth cycle · 2026-07-17 — 100/100Growth cycle · 2026-07-20 — 100/100Growth cycle · 2026-07-21 — 100/100Growth cycle · 2026-07-22 — 100/100Growth cycle · 2026-07-23 — 100/100Growth cycle · 2026-07-24 — 100/100Growth cycle · 2026-07-27 — 100/100Growth cycle · 2026-07-28 — 100/100Growth cycle · 2026-07-29 — 100/100Growth cycle · 2026-07-30 — 100/100Growth cycle · 2026-07-31 — 100/100Growth cycle · 2026-08-03 — 100/100Growth cycle · 2026-08-04 — 100/100Growth cycle · 2026-08-05 — 100/100Growth cycle · 2026-08-06 — 100/100Growth cycle · 2026-08-07 — 100/100Growth cycle · 2026-08-10 — 100/100Growth cycle · 2026-08-11 — 100/100Growth cycle · 2026-08-12 — 100/100Growth cycle · 2026-08-13 — 100/100Growth cycle · 2026-08-14 — 100/100Growth cycle · 2026-08-17 — 100/100Growth cycle · 2026-08-18 — 100/100Growth cycle · 2026-08-19 — 100/100Growth cycle · 2026-08-20 — 100/100Growth cycle · 2026-08-21 — 100/100Growth cycle · 2026-08-24 — 100/100Growth cycle · 2026-08-25 — 100/100Growth cycle · 2026-08-26 — 100/100Growth cycle · 2026-08-27 — 100/100Growth cycle · 2026-08-28 — 100/100Recession riskRecession risk · 2026-06-04 — 73/100Recession risk · 2026-06-05 — 74/100Recession risk · 2026-06-08 — 74/100Recession risk · 2026-06-09 — 74/100Recession risk · 2026-06-10 — 75/100Recession risk · 2026-06-11 — 74/100Recession risk · 2026-06-12 — 74/100Recession risk · 2026-06-15 — 74/100Recession risk · 2026-06-16 — 74/100Recession risk · 2026-06-17 — 72/100Recession risk · 2026-06-18 — 71/100Recession risk · 2026-06-22 — 71/100Recession risk · 2026-06-23 — 73/100Recession risk · 2026-06-24 — 72/100Recession risk · 2026-06-25 — 72/100Recession risk · 2026-06-26 — 72/100Recession risk · 2026-06-29 — 72/100Recession risk · 2026-06-30 — 72/100Recession risk · 2026-07-01 — 72/100Recession risk · 2026-07-02 — 74/100Recession risk · 2026-07-06 — 74/100Recession risk · 2026-07-07 — 75/100Recession risk · 2026-07-08 — 74/100Recession risk · 2026-07-09 — 75/100Recession risk · 2026-07-10 — 74/100Recession risk · 2026-07-13 — 75/100Recession risk · 2026-07-14 — 75/100Recession risk · 2026-07-15 — 76/100Recession risk · 2026-07-16 — 76/100Recession risk · 2026-07-17 — 75/100Recession risk · 2026-07-20 — 75/100Recession risk · 2026-07-21 — 75/100Recession risk · 2026-07-22 — 75/100Recession risk · 2026-07-23 — 74/100Recession risk · 2026-07-24 — 75/100Recession risk · 2026-07-27 — 74/100Recession risk · 2026-07-28 — 74/100Recession risk · 2026-07-29 — 77/100Recession risk · 2026-07-30 — 77/100Recession risk · 2026-07-31 — 77/100Recession risk · 2026-08-03 — 77/100Recession risk · 2026-08-04 — 76/100Recession risk · 2026-08-05 — 77/100Recession risk · 2026-08-06 — 76/100Recession risk · 2026-08-07 — 81/100Recession risk · 2026-08-10 — 81/100Recession risk · 2026-08-11 — 81/100Recession risk · 2026-08-12 — 81/100Recession risk · 2026-08-13 — 81/100Recession risk · 2026-08-14 — 82/100Recession risk · 2026-08-17 — 82/100Recession risk · 2026-08-18 — 82/100Recession risk · 2026-08-19 — 81/100Recession risk · 2026-08-20 — 82/100Recession risk · 2026-08-21 — 82/100Recession risk · 2026-08-24 — 81/100Recession risk · 2026-08-25 — 81/100Recession risk · 2026-08-26 — 81/100Recession risk · 2026-08-27 — 81/100Recession risk · 2026-08-28 — 79/100Cycle ScoreCycle Score · 2026-06-04 — 69/100Cycle Score · 2026-06-05 — 68/100Cycle Score · 2026-06-08 — 68/100Cycle Score · 2026-06-09 — 69/100Cycle Score · 2026-06-10 — 69/100Cycle Score · 2026-06-11 — 71/100Cycle Score · 2026-06-12 — 72/100Cycle Score · 2026-06-15 — 71/100Cycle Score · 2026-06-16 — 71/100Cycle Score · 2026-06-17 — 70/100Cycle Score · 2026-06-18 — 71/100Cycle Score · 2026-06-22 — 72/100Cycle Score · 2026-06-23 — 71/100Cycle Score · 2026-06-24 — 71/100Cycle Score · 2026-06-25 — 71/100Cycle Score · 2026-06-26 — 73/100Cycle Score · 2026-06-29 — 74/100Cycle Score · 2026-06-30 — 75/100Cycle Score · 2026-07-01 — 75/100Cycle Score · 2026-07-02 — 75/100Cycle Score · 2026-07-06 — 75/100Cycle Score · 2026-07-07 — 75/100Cycle Score · 2026-07-08 — 73/100Cycle Score · 2026-07-09 — 72/100Cycle Score · 2026-07-10 — 72/100Cycle Score · 2026-07-13 — 73/100Cycle Score · 2026-07-14 — 72/100Cycle Score · 2026-07-15 — 71/100Cycle Score · 2026-07-16 — 72/100Cycle Score · 2026-07-17 — 71/100Cycle Score · 2026-07-20 — 70/100Cycle Score · 2026-07-21 — 70/100Cycle Score · 2026-07-22 — 70/100Cycle Score · 2026-07-23 — 69/100Cycle Score · 2026-07-24 — 70/100Cycle Score · 2026-07-27 — 70/100Cycle Score · 2026-07-28 — 71/100Cycle Score · 2026-07-29 — 70/100Cycle Score · 2026-07-30 — 71/100Cycle Score · 2026-07-31 — 70/100Cycle Score · 2026-08-03 — 70/100Cycle Score · 2026-08-04 — 73/100Cycle Score · 2026-08-05 — 72/100Cycle Score · 2026-08-06 — 71/100Cycle Score · 2026-08-07 — 74/100Cycle Score · 2026-08-10 — 74/100Cycle Score · 2026-08-11 — 74/100Cycle Score · 2026-08-12 — 75/100Cycle Score · 2026-08-13 — 76/100Cycle Score · 2026-08-14 — 76/100Cycle Score · 2026-08-17 — 76/100Cycle Score · 2026-08-18 — 74/100Cycle Score · 2026-08-19 — 76/100Cycle Score · 2026-08-20 — 74/100Cycle Score · 2026-08-21 — 75/100Cycle Score · 2026-08-24 — 74/100Cycle Score · 2026-08-25 — 73/100Cycle Score · 2026-08-26 — 73/100Cycle Score · 2026-08-27 — 72/100Cycle Score · 2026-08-28 — 71/10006-0407-0607-3108-28
weak (<30)30–4242–5858–70strong (70+)no data
03

The six dimensions — every input, with its past year

Each input maps linearly between documented bounds (and is clamped). Several bounds are deliberately asymmetric — SPY spends most of history above its 200-day average, so its neutral point is not zero; the bounds sit at each series' practical tails. The dashed lines mark them — green where the input earns full bull-cycle credit, red full bear-cycle credit (the credit-spread and recession-risk inputs are inverted: widening or tighter conditions are red). The OECD CLI is the one categorical input — its quadrant (above/below 100 × rising/falling) scores 100/65/35/0, and its chart shows the level against the 100 line. Monthly inputs (Baa spread, CLI, Sahm Rule) enter the score on their release dates, so the replay never sees a print before the market could. Every input links to its own tool with the full series. At least 4 of 6 dimensions must be live to publish a score.

Window:

Trend

71/100

Participation

56/100

Breadth velocity

51/100

Credit

68/100

Growth cycle

100/100

Recession risk

79/100
04

What happened next — SPY after each band

Average SPY return (and share of positive outcomes) after every prior session in each band, 2010+. The finding is the contrarian U this site keeps encountering: contraction states preceded the strongest forward returns — washouts mean-reverted — while the mid-strength bands ran nearest baseline. Color describes today's condition, not expected return.

Current band

Broad advance

1005 prior sessions · 25% of all days
Next 3 months
+3.24% · 81% win
Next 6 months
+5.82% · 87% win
Next 12 months
+10.58% · 87% win

Broad advance

Today
Days
1005
Next 3 months
+3.24% · 81% win
Next 6 months
+5.82% · 87% win
Next 12 months
+10.58% · 87% win

Constructive

Days
1196
Next 3 months
+2.69% · 77% win
Next 6 months
+5.92% · 80% win
Next 12 months
+12.00% · 86% win

Mixed

Days
1088
Next 3 months
+1.48% · 64% win
Next 6 months
+4.00% · 67% win
Next 12 months
+10.41% · 76% win

Deteriorating

Days
510
Next 3 months
+5.03% · 77% win
Next 6 months
+8.38% · 86% win
Next 12 months
+18.76% · 99% win

Contraction

Days
192
Next 3 months
+10.34% · 97% win
Next 6 months
+16.06% · 100% win
Next 12 months
+27.37% · 100% win

All days (baseline)

Days
3991
Next 3 months
+3.17% · 76% win
Next 6 months
+6.19% · 80% win
Next 12 months
+12.90% · 86% win

Overlapping forward windows — adjacent sessions share most of their forward path, so sample sizes are optimistic. SPY price return, dividends excluded.

05

What flips this read

Band edges are fixed at 70/58/42/30. Today's 71 is in the top band; a 2-point drop reaches constructive (below 70). Breadth trend and participation are the fastest-moving dimensions at this horizon; the primary trend and credit usually confirm rather than lead.
06

What this page cannot tell you

The Cycle Score does not forecast — its own base rates prove the point: the contraction band preceded the best forward returns in the study (washouts mean-revert), so reading red as “sell” has been exactly backwards historically. It is also slow by design — 200-day averages and 63-session windows lag a fast top or V-bottom by construction; the Tape Tracker and Swing Tracker cover the shorter clocks. Use it as shared context for position sizing and cycle placement, never as a stand-alone entry or exit signal.

How Cycle Tracker Works

  1. 1
    Six dimensions of mid-term evidence
    Trend asks whether the primary trend is up. Participation and breadth velocity read roughly 4,750 eligible common stocks in a typical session. Credit checks HYG/LQD and the Baa−10Y spread. Growth uses the OECD leading indicator, while recession risk adds the 10Y−2Y curve, Sahm Rule, and Chicago Fed NFCI.
  2. 2
    One pure function, documented bounds
    Each input maps linearly between fixed bounds set at its practical historical tails — several deliberately asymmetric, because SPY spends most of history above its 200-day average. The CLI is the one categorical input (its quadrant scores 100/65/35/0). Dimensions weigh equally; at least 4 of 6 must be live to publish a score. Monthly inputs only count from their release date — the score never sees a print before the market could. Nothing is ever re-fit.
  3. 3
    The same function replays all of history
    scoreCycleInputs() runs on today's values for the live gauge and over every session since 2010 for the history and backtest — so the latest history point always equals the live reading and the base rates cannot drift from the gauge.
  4. 4
    Base rates for every band, published either way
    Average SPY returns over the next 3, 6 and 12 months after every day in each band. The honest finding is the contrarian U this site keeps encountering: Contraction days preceded the strongest forward returns (washouts mean-revert), which is exactly why the page tells you the color describes condition, not expected return.

Who Uses Cycle Tracker

Position traders
The 3–12 month clock in one number, with the dimension split showing whether weakness is trend, breadth or credit — the difference between a narrowing advance and a genuine contraction.
Dip evaluators
Contraction-band days — everything down together — preceded the strongest 12-month returns in the study. The band table quantifies the mean-reversion instead of asserting it.
Divergence hunters
The dimension ribbon shows sequence: breadth trend usually turns before the primary trend cracks. A falling score under a rising index is the named, measurable version of "the market is thinning".
Narrative checkers
When a viral chart claims the cycle is over, ten inputs with fixed bounds and their year-charts show exactly which parts of the mid-term structure are actually deteriorating — and which are not.

Pro Tips

01
Watch breadth velocity before trend
The 200-day-based trend inputs are slow by construction; the 63-session breadth change moves first. A composite holding up purely on the Trend dimension is a late-cycle signature worth respecting.
02
The asymmetric bounds are the point
SPY above its 200-day MA is the historical default, so "neutral" for that input is around +6%, not zero. The bounds encode each series' real distribution — read the per-input charts against their dashed lines, not against zero.
03
Contraction is where the base rates live
Only ~8% of days since 2011 scored below 30 — 2011, 2015–16, 2018, 2020, 2022 — and they averaged the best forward returns in the study. Terrible conditions, historically good entries. That is context, not advice.
04
Read it with the faster clocks
Cycle answers "what kind of market is this?" — not "what happens this week?". The Tape and Swing trackers cover the shorter horizons; disagreement between the clocks is information, not error.

Common Issues & Solutions

Why equal-weight RSP instead of a custom average of all stocks?
Survivorship. Two earlier iterations failed exactly here: a cross-sectional median of individual drawdowns can never reach zero, and an in-house equal-weight of the full universe inflates as a level because delisted losers drop out of the history. RSP is investable, survivorship-free, and checkable against any chart provider.
Why is McClellan Summation not an input?
We evaluated it and rejected it honestly: our universe's raw net advances carry a persistent negative bias (small caps decline more days than they advance), so the cumulative Summation drifts indefinitely and cannot be bounded. The 63-session breadth change carries the breadth-velocity information without that flaw. The v1 NH−NL-direction and Repair Flow inputs were retired in v2 for a different reason: they duplicated votes the score already counts (0.87 correlation with the breadth level; Repair Flow is a Swing-horizon measure and stays in the Swing Score).
Why does the history start in late 2010?
The score needs at least four of five dimensions on identical footing, and the breadth universe is clean from 2010; the HYG/LQD series joins in 2011. Individual inputs extend much further on their own pages (the Baa spread to 1953, the CLI to 1993).
The score barely moves day to day
By design — 200-day averages and 63-session windows measure the cycle. They are too slow to register one week. A one-point daily change is normal; the information is in multi-week drift and in which dimension is driving it (the ribbon shows this directly).

Frequently Asked Questions

What is the Cycle Score?
A 0–100 daily read of the market's 3–12 month structure: 100 is a broadly owned advance (index in an uptrend, most stocks participating, breadth improving, credit, growth cycle and recession risk all confirming), 0 is a contraction. It averages six equal-weight dimensions — trend, participation, breadth velocity, credit, growth cycle and recession risk — each built from inputs with documented fixed bounds.
What are the six dimensions?
Trend: SPY vs its 200-day MA and the MA's slope. Participation: the share of stocks above their own 200-day MA, the Bullish Percent Index, and the equal-weight-vs-cap-weight (RSP−SPY) drawdown gap. Breadth velocity: the 63-session change in % above 200d. Credit: the HYG/LQD ratio versus its 200-day MA, plus the Baa−10Y spread versus its 12-month average. Growth cycle: the OECD Composite Leading Indicator quadrant. Recession risk: the 10Y−2Y Treasury spread, the Sahm Rule and the NFCI.
Is a low Cycle Score bearish?
Historically, no — that is the page's honest finding. Contraction-band days (score below 30: 2011, 2015–16, 2018, 2020, 2022) preceded the strongest 12-month SPY returns in the study, because washouts mean-reverted. The color marks the current condition. It is not a forecast.
What is a "hidden bear"?
The configuration where the cap-weighted index sits near its highs while the average stock (equal-weight RSP) is already well off its own high — a wide RSP−SPY drawdown gap. It is one input here and has its own dedicated tool with regime history.
How is the Cycle Tracker different from the Swing Tracker?
Swing reads internal condition for multi-week holds (1 week–3 months, daily internals). Cycle reads the slower structure (3–12 months): 200-day trend, participation, slow breadth velocity, credit, growth cycle and recession risk. Swing answers "can I hold this for weeks?"; Cycle answers "what kind of market is carrying the index?"
How often does it update?
Every US trading day after the close. Nine of the thirteen inputs are daily computations; the Baa spread, OECD CLI and Sahm Rule are monthly and enter the score on their release dates, carrying the latest known print between releases. The NFCI is weekly.

Explore Other Tools

Last updated: 2026-08-28