What it predicted, and what happened
Stored daily after the close, never edited. Bold is the model's pick. Green exactly right · amber right change, wrong regime · red missed or false alarm.
Loading recent predictions…
02 · Paper P&L
Buying and selling SPY on the forecast
+157.0%
versus +72.1% for buying and holding SPY
2022–2026, after costs. SPY and cash. Nothing else is ever bought.
Green: buying and selling SPY on the forecast. Grey: holding SPY. Both start at 1.00 in January 2022.
| 2022–2026 | Trading SPY | Holding SPY |
|---|---|---|
| Total return | +157.0% | +72.1% |
| Return per year | 22.9% | 12.6% |
| Return per unit of risk | 1.26 | 0.76 |
| Worst drop | −18.7% | −24.5% |
| Days holding SPY | 96.3% | 100% |
How it works
Hold SPY. On about one day in twenty five, sell it at the close and sit in cash for the next day, then buy back. It is never short and it never holds anything but SPY.
On the days it is in, it holds less when SPY has been jumpy lately and more when SPY has been calm, so the amount of risk stays about the same from week to week instead of swinging with the market. Averaged over the period that works out to 1.17 times a normal position.
The forecast picks the days to sit out. It reads the fourteen numbers this site publishes, the chance of a bear market and the chance of a volatile one for each of the four forecasts, plus the two regimes showing right now, and skips the day when those numbers look their worst. Costs are charged at 2 basis points every time the position changes.
Sitting out 4% of days is enough to turn +72.1% into +157.0% because the skipped days are concentrated in the falling weeks. It is the same SPY, held slightly less often.
What this is not
The day filter was fitted using the whole 2010–2026 history, so the green line above knows things it could not have known at the time. Refit each year on past days only, it returns +71.7%, which merely matches doing nothing. Read +157.0% as what a good day filter is worth, not as a live track record.
The honest ceiling is close by. If you knew the true regime every day with no error and no delay, and knew in advance exactly how much to bet in each one, SPY would have returned +180% over these years. Perfect knowledge of tomorrow's direction is worth far more, but that is not what a regime model predicts.
03 · Five States
Five states, with meaningful changes only
A market's regime is not one universal fact. It is defined by which two moving averages you compare.
This site uses two views: 50-day (25 vs 50-day average) and 21-day (10 vs 21-day average). So SPY has a 50-day regime and a separate 21-day regime, four scoreboards in total.
Within a view, every day is classified by two mechanical tests, direction and volatility:
- Direction. Compare a short and a long moving average of price (25-day vs 50-day). If the short one is more than 1.0% above the long one, the market is rising. More than 1.0% below: falling. In between: neutral.
- Volatility. Measure how much price moved over the last 21 trading days. If that reading is in the top 20% of everything seen over the past three years for this market, moves are unusually large. Otherwise, normal.
Direction and volatility together give one of the five states:
| Regime | Direction | Daily moves |
|---|---|---|
| Bull quiet | Rising | Normal |
| Bull volatile | Rising | Unusually large |
| Neutral | No clear trend | Either |
| Bear quiet | Falling | Normal |
| Bear volatile | Falling | Unusually large |
When does a change become official?
One day over the line does not count. The market has to stay in the new state for three days running, and clear the line by a real margin instead of just touching it. Without that rule, one jumpy day would count as a whole new market.
What “now” tells you
Which of the five states the market is in today.
If we already know today's state, why isn't it 100%?
Because a change only counts once the market stays in the new state for three days running. Now tells you a change is happening before those three days are up, so it gets caught out when the market flips back before day three. That is the 0.6% it gets wrong. The other 99.4% it is right.
Why two views can disagree
After a three-week selloff that followed a two-month rally, the 21-day regime can already read bear while the 50-day regime still reads bull. Neither is wrong: one answers “the trend this month,” the other “the trend this quarter.” The fast view usually turns first; the views are never combined into one answer.
| View | Trend test | Forecasts |
|---|---|---|
| 50-day | 25-day versus 50-day average, 1.0% clear gap | 5 and 10 days ahead |
| 21-day | 10-day versus 21-day average, 0.7% clear gap | 2 and 5 days ahead |
04 · Backtesting Results
How well did it work?
+11.59 pts
average edge over the baseline, all 8 locked tests
Model 93.2% correct vs 81.6% for the baseline, averaged across every market, trend speed and horizon, 2022–2026.
Every prediction is simulated as if it were live. The years 2010–2021 select features and settings; those choices are frozen before testing once on 2022–2026, and no test-year information ever feeds back into a choice.
Context
1999–2009
Validation
2010–2021
Locked test
2022–2026
The bar to beat is the baseline: guess that today's regime is still here a few days from now. Regimes are sticky, so that guess is already right most of the time, which makes it a genuinely hard bar to clear.
Accuracy: how often the forecast matched what happened; the green segment is what the model adds over the baseline. Changes caught: on the days the regime truly changed, how often the model called the new one.
Right now
The regime today, before any forecasting.
| Market | Accuracy | Changes caught |
|---|---|---|
| SPY50-day view | 100.0%+4.5 pts above baseline baseline 95.5% | 100% |
| SPY21-day view | 99.0%+8.3 pts above baseline baseline 90.6% | 100% |
| SOXX50-day view | 99.8%+4.7 pts above baseline baseline 95.1% | 100% |
| SOXX21-day view | 98.9%+11.0 pts above baseline baseline 87.9% | 100% |
1,153 predictions per row, 2022–2026.
50-day trend
A regime is defined by the 25-day average against the 50-day average.
| Market | Accuracy | Changes caught |
|---|---|---|
| SPY5 days ahead | 97.1%+9.1 pts above baseline baseline 88.0% | 84% |
| SPY10 days ahead | 90.7%+14.5 pts above baseline baseline 76.2% | 73% |
| SOXX5 days ahead | 96.2%+8.3 pts above baseline baseline 87.9% | 83% |
| SOXX10 days ahead | 86.8%+8.8 pts above baseline baseline 78.0% | 63% |
993–1,150 predictions per row, 2022–2026.
21-day trend
A regime is defined by the 10-day average against the 21-day average.
| Market | Accuracy | Changes caught |
|---|---|---|
| SPY2 days ahead | 99.0%+9.4 pts above baseline baseline 89.6% | 100% |
| SPY5 days ahead | 89.7%+15.4 pts above baseline baseline 74.2% | 70% |
| SOXX2 days ahead | 99.2%+11.4 pts above baseline baseline 87.8% | 100% |
| SOXX5 days ahead | 86.7%+15.9 pts above baseline baseline 70.9% | 65% |
993–1,150 predictions per row, 2022–2026.
Why isn't it 100%?
Every one of the 8,576 test forecasts ended up in one of three situations. Two of them are easy and one is not.
The regime stayed the same. 81.6% of days.
We were right 97.2% of the time.
It changed, and today's prices already showed it coming. 13.0% of days.
We were right 98.6% of the time.
It changed because of moves that had not happened yet. 5.5% of days.
We were right 19.4% of the time.
Nearly every miss is that last row. It is only 0.5% of days two days out, but 10% of days ten days out, which is why the short forecasts score higher than the long ones. When the answer is already sitting in the data, the model finds it 98.6% of the time.
Statistical check: daily forecasts overlap, so edges are tested with a moving-block bootstrap. All 8 rows beat the baseline at 95% confidence. The engine is also stress-tested against alternatives: 40 controlled experiments across ten further data families failed to beat it under this same protocol. Every negative result is recorded.
05 · Why It Works
Pipeline
- 01
Download a massive amount of raw data as base features
365 vendor endpoints, untouched.
- 02
Build derived features from those base features
One transform bank applied to every series.
- 03
Run a GPU feature-selection sweep across many AI models
Thousands of H100 trials pick the features, not us.
- 04
Freeze the winning AI models and their predictions
TabFM, Toto 2, Chronos 2. Computed once, written to disk.
- 05
Pass base, derived and AI features into deterministic models
Classical models with nothing to memorize.
- 06
Run an orchestrator that combines them into one output
Frozen weights per horizon.
- 07
Sweep the chosen deterministic models again for more alpha
Selected on 2010–2021, locked years read once.
06 · API
Getting it yourself
One endpoint. Pick the market with symbol and the trend definition with variant. Horizons are chosen for you to match the trend speed, so you never have to reason about them. Use variant=now for both current trend views in one response.
| What you want | Request |
|---|---|
| SPY · 50-day trend | /v1/regime?symbol=SPY&variant=50d |
| SPY · 21-day trend | /v1/regime?symbol=SPY&variant=21d |
| SOXX · 50-day trend | /v1/regime?symbol=SOXX&variant=50d |
| SOXX · 21-day trend | /v1/regime?symbol=SOXX&variant=21d |
| SPY · now | /v1/regime?symbol=SPY&variant=now |
| SOXX · now | /v1/regime?symbol=SOXX&variant=now |
import requests
data = requests.get(
"https://api.regime-api.com/v1/regime",
params={"symbol": "SOXX", "variant": "21d"},
).json()
print(data["current_regime"])
for f in data["forecasts"]:
print(f["days_ahead"], f["regime"], f["change_probability"]){
"symbol": "SOXX",
"variant": "21d",
"as_of": "2026-08-07",
"current_regime": "bear_volatile",
"forecasts": [
{
"days_ahead": 2,
"regime": "bear_volatile",
"change_probability": 0.004,
"probabilities": {
"bull_quiet": 0.001,
"bull_volatile": 0.001,
"neutral": 0.001,
"bear_quiet": 0.001,
"bear_volatile": 0.995995
}
},
{ "days_ahead": 5, "regime": "bear_volatile", "...": "..." }
]
}Fresh predictions are computed once per trading day at 21:30 UTC, about 90 minutes after the 4:00 PM New York close.
Returns today's regime plus a probability for each of the five regimes at both horizons. A fresh calculation takes a few minutes; repeat calls the same day are instant. No key required.