If you filtered a backtest by macro regime this week, some days now carry a different classification than before. The market didn't change retroactively. We found a bug in the engine that computes that history, and we fixed it. The bug has a name: look-ahead bias — scoring the past with information that wasn't available at the time. It's the exact error our whole method is built to avoid, so we're telling the full story instead of quietly shifting the number.
What the macro regime does
The macro layer answers one question: what economic environment was the market in on a given day? We sort that into four fields spanning growth, money supply, and financial conditions. The ingredients come from the Federal Reserve's FRED database: industrial production, financial conditions, the labour market.
The bug was in the ingredients, not the maths
To classify the regime for a day in 2019, we used FRED's values as they look today — not as they were actually available back then. Sounds harmless. It isn't.
Why FRED data is a special case
You might assume agencies only revise the last few weeks and the rest is fixed. With FRED, that's not true. The Chicago Fed recomputes its financial-conditions index, the NFCI, every week — across the entire history, not just the recent edge.
An example you can look up yourself: the reading for 1 December 2023 stood at −0.446 in real time. That same day reads −0.332 today. Industrial production gets rebased on top of that: a level around 102.7 later became 100.6, roughly two percent lower, reaching back years.
So scoring the past with today's values doesn't show what the market saw at the time. It smuggles knowledge from the future into the calculation.
How large the effect was
We measured it instead of guessing. On the portion of the history that can be verified cleanly point-in-time, about a third of the classifications flipped once we computed it correctly: 30.6 percent across the whole history, 33.4 percent on the cleanly verifiable slice (as of July 2026, model recompute).
That's not a rounding error. It's a third of the past that classified differently from how it would have felt in the moment — and any backtest built on that past inherits the error silently.
What we built
The fix is point-in-time: we keep every FRED value as it looked on the day it was observed. We record each later revision instead of overwriting the old value — nearly half a million readings back to 2010. When we recompute the history, we replay the days in strict order, early to late.
The crucial part: the moment the calculation would reach forward to a later value, it stops with an error. Reaching into the future isn't allowed — it's made impossible.
Proof, not a hit rate
Here's the difference that matters. Some cycle tools advertise a hit rate: "our score caught this many past highs and lows," measured against a handful of hand-picked turning points.
That kind of test isn't worthless — it's a reasonable first check. But it isn't a proof. It only tests the cases you selected yourself and stays silent on all the others. And by our own rule: under 30 cases is an anecdote, not evidence.
We take the other route. Our test checks the construction, not the outcome: it requires the calculation to return the same result on every prefix of the data as on the whole. If the result for 1 March 2020 changes once later data arrives, the calculation quietly looked ahead — and the test fires. Across the entire real history, not against twelve samples. That's the mechanical proof that no glimpse of the future is baked in. No hand-counting required.
The boundary we don't hide
The history is fully point-in-time only from 4 February 2019 onward. That's as far back as the public archive of old readings reaches, no further. Before that, we fall back to the revised values — and label every affected row as exactly that. No silent fallback: where a value isn't cleanly point-in-time, it says so, and you can drop it from your analysis.
Not an edge nobody else could have
One line we could skip but won't: this isn't secret knowledge. The old FRED readings are public; anyone could pull them. We didn't buy exclusivity, only correctness. The one difference is that we did it.
What it means for you
Every backtest that filters by macro regime, or breaks results down by regime, now reads the corrected, point-in-time history. For individual strategies, regime dependence shifted as a result — in the right direction. And you don't have to take our word for it — every row carries a flag for whether the value is cleanly point-in-time.
You don't have to trust us — you can recompute it.
FAQ
What is look-ahead bias? Scoring the past with data that didn't exist yet at the time. In a backtest it produces results that were never reachable in real time — the most common flaw in self-built tests.
Why does FRED data change retroactively? Many series are revised or recomputed after the fact. The Chicago Fed's NFCI is re-estimated weekly across its full history; series like industrial production get rebased.
What does point-in-time mean? Computing only with the values actually available on a given date — not the ones corrected since. The model then sees what an observer saw at the time.