Generated from the run of 2026-10-25. Decision month Oct 2026: Expansion, inflation momentum rising.
The engine answers one question: where is the US business cycle right now, judged only from data that had been published by the end of each month? It sorts every month since the early 1970s into one of four phases, adds an inflation overlay, records what each asset class went on to earn in each phase, and tests a regime-tilted 60/40 against a static one. Like the GMAAF it is meant to summarize the weight of the evidence for a human decision, not to run money on its own.
Ten monthly indicators from FRED, chosen for long history and an established record in cycle work: two surveys, four labor-market measures, two activity measures and two market-priced measures.
| Indicator | Series | Signal | Usable | Revised? |
|---|---|---|---|---|
| Philadelphia Fed manufacturing activity | GACDFSA066MSFRBPHI |
Diffusion index, 3-month average. Released the third Thursday of the reference month. | same month | no |
| Consumer sentiment (Michigan) | UMCSENT |
3-month average minus a year earlier. Final reading released at the end of the reference month; monthly from 1978. | same month | no |
| Initial jobless claims (inverted) | ICSA |
13-week average versus a year earlier, log change, sign flipped. Uses only weeks released by month-end. | same month | no |
| Unemployment rate vs. 12-month low (inverted) | UNRATE |
3-month average minus its low of the prior 12 months (the Sahm-rule gap), sign flipped. Revised only through seasonal factors. | next month | no |
| Nonfarm payrolls | PAYEMS |
6-month change, annualized, %. Released the first Friday of the next month; revised for two months and annually. | next month | yes |
| Manufacturing workweek | AWHMAN |
3-month average minus a year earlier, hours. A classic leading component. | next month | yes |
| Industrial production | INDPRO |
Year-over-year % change. Released mid-month for the prior month; revised. | next month | yes |
| Building permits | PERMIT |
3-month average versus a year earlier, log change. Released about the 18th of the next month; lightly revised. | next month | yes |
| Yield curve, 10-year minus 3-month | GS10 − TB3MS |
Monthly averages of GS10 minus TB3MS, 3-month average, percentage points. Never revised. | same month | no |
| Baa credit spread, 6-month change (inverted) | BAA − GS10 |
Moody's Baa yield minus the 10-year Treasury, 3-month average, change over 6 months, sign flipped. Never revised. | same month | no |
Revisions. FRED serves today's revised values. Payrolls, the workweek, industrial production and building permits are revised after release, so their history is somewhat cleaner than what was known at the time. As a check, the page also shows a composite built only from the six indicators that are not revised (surveys, claims, the unemployment rate, the yield curve and the credit spread). A full real-time rebuild from ALFRED vintages is a possible next step. Because of this, regime.json carries both phases, and the frameworks that read it (GMAAF, the Crypto Cycle Framework) run their historical tests on the unrevised phase.
Inflation is the average z-score (trailing 10 years) of six inputs, each used once published: CPI 3-month annualized less 12-month, the 6-month change in CPI inflation, raw commodities over 6 months, the 6-month change in import-price inflation (from 1983), the 6-month change in wage growth, and the 6-month change in Michigan 1-year expectations (from 1978); at least three must report. Rising when the average is above zero. CPI momentum (headline and core) is still computed and shown. The overlay only changes the mix by moving up to 10 points from Treasuries to commodities and gold.
Which inflation definition. GMAAF builds inflation from six inputs (CPI acceleration, CPI trend, commodities, import prices, wages, expectations) plus a surprise index. Those inputs were rebuilt here where long history exists (the surprise index starts in 2014 and is left out) and compared with CPI momentum on a rule fixed before the comparison was run: the composite replaces CPI momentum only if it separates what assets earned after rising and falling months better in both periods (the average absolute gap in annualized excess return across equities, Treasuries, credit, commodities and gold) and its states last at least 75% as long.
| Definition | Separation, 1975–1999 | Separation, 2000 on | Average run |
|---|---|---|---|
| CPI momentum | 4.3% | 4.7% | 7.0 months |
| GMAAF-style composite | 5.2% | 8.0% | 7.2 months |
Both are scored on the same months (from Jan 1970), with z-scores warmed up on data from 1960. Result: the composite drives the overlay, a decision taken once on 2026-10-24 and frozen so the inflation history cannot flip on its own as data accumulates. The test is rerun daily for information (today it favors the composite); the two definitions agree in 78% of months. A first run of this comparison, before an independent review, kept CPI momentum: it cut the z-score warm-up at 1970 and scored the two definitions on different months. Both errors were fixed before the decision was frozen.
GMAAF's third axis, rebuilt from long public series so it can be tested since 1975. Positive means easier:
| Input | Series |
|---|---|
| Baa credit spread, 6-month change (reversed) | BAA − GS10 |
| VIX (reversed) | VIXCLS |
| Trade-weighted dollar, 6 months (reversed) | TWEXBMTH / DTWEXBGS |
| S&P 500 against its 10-month average | Shiller S&P 500 |
| 30-year mortgage rate, 6-month change (reversed) | MORTGAGE30US |
| 10-year Treasury yield, 6-month change (reversed) | GS10 |
Each input is a market price (usable at month-end, never revised), z-scored on its trailing 10 years; the axis is their average (at least 3), easing at or above zero. The Baa spread stands in for GMAAF's high yield against Treasuries (ICE high-yield data on FRED now covers only three years) and the Fed's broad dollar index for the dollar index. Since 1975 conditions read tightening in 46% of months, 77% of recession months and 75% of the six months before a recession. The axis is reported and tested beside the phase; it does not change the regime mix, whose weights were fixed before it was added.
NBER recession dates are set with hindsight and are never an input; they are used only to check the engine. Since 1975, 74% of recession months read as contraction at the time, and 40% of contraction months fell inside a recession or the six months before one. Contraction is therefore best read as a below-trend, decelerating growth signal that includes mid-cycle soft patches, not as a recession forecast. Phases last 4.8 months on average.
| Recession | Slowdown or contraction from | Contraction from | Share of recession months in contraction |
|---|---|---|---|
| Jan 1975 – Mar 1975 | Jan 1975 | Jan 1975 (0 mo before) | 100% |
| Feb 1980 – Jul 1980 | Aug 1978 | May 1979 (9 mo before) | 100% |
| Aug 1981 – Nov 1982 | – | Oct 1981 (2 mo after) | 44% |
| Aug 1990 – Mar 1991 | Jul 1990 | Jul 1990 (1 mo before) | 88% |
| Apr 2001 – Nov 2001 | Mar 2000 | Jun 2000 (10 mo before) | 62% |
| Jan 2008 – Jun 2009 | Sep 2007 | Sep 2007 (4 mo before) | 83% |
| Mar 2020 – Apr 2020 | Mar 2020 | Mar 2020 (0 mo before) | 100% |
Long history, 1975 on. Public proxy series, consistent across the whole period:
The S&P 500, gold and the yields are monthly averages, so a month's value is complete only at month-end. A decision at the end of month t is therefore treated as filled at the average of month t+1 and earns the move to the average of month t+2: a one-month implementation lag, which is conservative. Bond returns price a par bond bought at last month's yield at this month's yield (10-year for Treasuries, 20-year for Baa credit). The commodity proxy is spot raw-material prices plus T-bill collateral, so it omits futures roll yield; it ran about two points a year above DBC where they overlap. The long-history equity sleeve is the US S&P 500; the ETF test uses ACWI.
Investable ETF era, May 2008 on. Financial Modeling Prep dividend-adjusted month-end closes: Equities = ACWI, Treasuries = IEF, Credit = LQD, Commodities = DBC, Gold = GLD, Cash = BIL. The benchmark is 60% ACWI / 40% AGG. A month-end decision earns the next month.
Weights by phase, set from the standard textbook cycle playbook before any test was run and not changed since. The static benchmark is 60% equities / 40% Treasuries.
| Phase | Equities | Treasuries | Credit | Commodities | Gold | Cash |
|---|---|---|---|---|---|---|
| Recovery | 70% | 10% | 20% | – | – | – |
| Expansion | 65% | 15% | 10% | 10% | – | – |
| Slowdown | 50% | 30% | 5% | 5% | 10% | – |
| Contraction | 35% | 45% | – | – | 10% | 10% |
When inflation momentum is rising, up to 10 points move from Treasuries to commodities and gold, half each. The mix is rebalanced monthly; costs are 10 bp per unit of one-way turnover.
| Period | Mix return | 60/40 return | Excess | Mix volatility | 60/40 volatility | Mix max drawdown | 60/40 max drawdown |
|---|---|---|---|---|---|---|---|
| 1975 on (proxies) | 10.1% | 10.2% | −0.13% | 7.8% | 8.0% | −20.1% | −27.0% |
| 1975–1999 (proxies) | 13.1% | 14.1% | −0.86% | 7.8% | 8.5% | −17.1% | −15.6% |
| 2000 on (proxies) | 7.4% | 6.8% | +0.54% | 7.7% | 7.5% | −20.1% | −27.0% |
| May 2008 on (ETFs, vs 60% ACWI / 40% AGG) | 6.6% | 6.1% | +0.36% | 10.2% | 10.6% | −19.9% | −33.9% |
Reading the results. Over the full history the tilt earned about the same as a 60/40 (−0.13% a year) with a shallower worst drawdown (−20.1% versus −27.0%). The benefit is mostly in risk, not return, and it is not uniform: the two periods share no months and should be read separately.
From 2026-10-24 each daily run appends its reading and mix to data/live/regime_live.csv; rows are never rewritten. Each completed month is scored with the mix logged on the last run of the month before, using the ETF month-end closes.
Every run writes data/regime.json, the file GMAAF and the Crypto Cycle Framework read instead of computing their own cycle state: schema version, decision month (and whether it is still provisional), phase, level, direction, the unrevised-only phase, inflation state and definition, financial-conditions state and value, the regime mix, the agreement panel, and the full monthly history. Fields are only ever added, never renamed or removed; a breaking change would raise schema.
The engine's reads are set beside GMAAF's own axes and the ISM manufacturing index (the crypto framework's Tom Lee input), reduced to four questions: growth above trend, growth improving, inflation rising, conditions easing. A question is flagged split when the reads that answer it disagree. GMAAF's growth axis is built from 12-month and 6-month changes z-scored on their history, so it measures whether growth is strong, not whether it is improving; it answers only the first question. Agreement so far: level all 66% over 163 months; level bcre gmaaf 84% over 305 months; direction bcre ism 71% over 160 months; inflation 81% over 305 months; financial 84% over 305 months.
A GitHub Action runs every day: refresh/fetch.py pulls FRED, the Shiller and gold series and FMP data; refresh/model.py rebuilds the model, playbook and backtests and appends the live row; tools/build.py inlines everything into index.html, which is published to GitHub Pages. If a source fails, its last committed file is used.