The Adaptation Rate Theorem — the plain-English companion
the paper (DOI) · code & data repository
Companion to the research paper of the same title. This is education, not investment advice. Nothing here tells you what to buy, sell, or predict. It explains what the paper found, how the checking worked, and what the results do and do not mean.
The claim in one sentence
The fast of two moving averages reacts to change first — by a head start you can compute in advance from the window lengths alone — and the gap between them tells you where the slow one is headed next.
The idea, with a bathtub
A moving average is like the temperature of a bathtub: pour in hot water and the tub warms up, but slowly, because all the old cool water is still in there. A 63-day average is a big tub; a 30-day average is a small one. Same hot water, same moment — the small tub warms first. Nothing about the water makes this true. It’s the size of the tubs.
The theorem makes that exact. For simple moving averages and a sudden change, the small tub reaches the halfway point of its warm-up (w_slow − w_fast)/2 periods before the big one. With a 30-day and a 63-day window, that’s about 16–17 days of head start — purchased by arithmetic, not by insight. And the halfway point isn’t special: at any alarm threshold, the head start is that same window difference scaled by how far along the transition the threshold sits. So the lead is dialable — and computable — before you ever see the data.
And here is the useful part: while the fast average has already warmed up and the slow one hasn’t, the fast-minus-slow gap is positive. That gap is a preview of the slow average’s future. A positive gap today means the slow average will be rising tomorrow, because the slow average must still absorb the change the fast one already did.
What we actually measured
One honest detail before the results, because it matters for reading them: in the empirical tests, the thing being averaged is not the price or the raw data itself. It is the surprise.
Here’s the pipeline, in plain terms. First, a nimble model tracks each series’ current level — a fast-adapting average whose whole job is to stay close to where the data is now. Second, every new observation gets scored by how badly that model missed it; the size of the miss (squared, so big misses count extra) is that day’s surprise. Calm stretches produce small surprises; turbulent stretches produce big ones — which is why this surprise series behaves like a running gauge of volatility. Third, the fast and slow moving averages are taken of the surprise series, at pre-registered window pairs — 30 and 63 days for daily data, with matching pairs for weekly and monthly. The gap between them is the signal.
So when the results below say the gap gave warning before “volatility events,” the machinery is: turbulence rises → surprises grow → the fast average of surprise inflates first → the gap opens. All of it happens before the slow average — the one many institutions actually watch — has caught up. The theorem is about any pair of trailing averages; the tests apply it where an early warning is worth the most.
What we tested, and what happened
We pre-registered the whole test before running it: which 24 data series, which window sizes, which pass/fail rules. The series span three worlds. Thirteen financial markets (the S&P 500 back to 1871, gold, oil, currencies, bonds, several stock indexes); seven economic indicators (industrial production, unemployment, inflation, and more); and four natural systems (sunspots since 1818, daily temperatures in Texas, a New England river’s flow since 1904, and 29 years of flu surveillance).
The directional prediction — gap positive now, slow average rises next — held on all 24 of 24 pre-registered tests. A few markets are close cousins — the same index traded two ways, one interest-rate spread tested twice — so call it 21 genuinely distinct bets. Markets, economies, the sun, a river, the flu: every one. The odds of that happening by coin-flip luck are about 1.2 × 10⁻⁷ — roughly one in eight million, and still about one in a million (9.5 × 10⁻⁷) counting the cousins once.
On the headline test we asked something harder: before big volatility events (defined purely by what happened afterward, so the test can’t cheat), how much warning does each signal give? Across 332 such events, the gap signal gave a median of 90.0 days of warning — and that’s an undercount, because more than half the time the warning was already on when our measurement window opened. The slow measure’s own alarm gave a median of 57.0 days. The gap beat the slow alarm on 13 of 13 instruments.
The twist that proves the point
Here’s the part we find most convincing. We took five of the price series and shuffled them — scrambled the days into random order, destroying every trend, every pattern, everything a market analyst could possibly read. Then we ran the identical test.
The early-warning behavior didn’t go away. On shuffled data the gap fired before the alarm essentially every time (99.98% of onsets) — at least as often as on real data.
Read that again: the signal works on meaningless data. That’s not a bug; it’s the entire thesis. The head start doesn’t come from patterns in markets or rivers or flu seasons. It comes from subtraction — a short window simply turns over its contents faster than a long one. Which is also why the same trick worked across two dozen wildly different tests: arithmetic doesn’t care what the numbers mean.
What this is good for
Anyone already running fast and slow averages of the same thing — a central bank watching inflation, a health agency watching case counts, a risk desk watching volatility — is one subtraction away from an earlier alarm, with a head start they can size in advance by choosing the windows. Want more warning? Spread the windows further apart.
And the theory’s arithmetic is not approximate hand-waving. On clean simulated steps, the fast measure’s observed head start is exactly 17 bars against the theory’s 16.5 — the difference being nothing more than the fact that data arrives once a day, so half-days round up. The predictions also survived a deliberate stress battery — heavy noise, varied step shapes and sizes, and window pairs squeezed so close together that the theory itself predicts the signal must fade.
What the checking caught in this paper
The general machinery every paper in this series runs through — the hash-pinned inputs, the machine-checked ledger of numbers, the verification program, the adversarial review — is described once in the series’ shared verification note, which follows every companion on LaggingTruth.com. What belongs here is what the process caught and changed in this paper specifically.
The most important catch happened mid-analysis. The first committed implementation quietly departed from the pre-registered design in two linked ways. It computed the gap on a transformed version of the series — each value replaced by its 0-to-100 rank — instead of the raw one, and it scored the financial test against the wrong target, using the wrong measure of agreement. The drift was caught by re-reading the frozen design document, and corrected before anyone knew which way the correction would move the results. Every affected experiment was re-run; every pass/fail rule passed both before and after. The deviant variant stays in the repository’s history as a robustness check, and the whole episode is disclosed in the paper (Section 5.4) rather than silently absorbed.
The adversarial review — a fresh, memory-isolated AI session given only the paper and its ledger, running six hostile passes — landed two load-bearing hits. First, a value the paper labeled as the “exact” lag of a popular fast average (the Hull) had actually been computed under an idealized convention the implementation doesn’t use. The word “exact” was a false promise, and the fix rippled through a definition, the abstract, two sections, one analysis script, and the ledger. Second, the reviewer surfaced prior work (Zakamulin, 2017) that had already worked out pencil-and-paper formulas for the lag of the same family of averages — so a novelty claim was cut down to what the paper genuinely adds, with the predecessor credited. A later audit under an upgraded version of the research standard caught two more. A data-dictionary note described the flu data’s calendar wrongly (the loader was right; the documentation wasn’t), and the PDF was missing a page-geometry gate — both fixed at the source.
None of this weakened the result — the theorems, the 24-of-24 sweep, and the shuffle test stand untouched. The catches, the fixes, and the dispositions are in the repository’s public record.
What this cannot do
- It can’t see fast wiggles. Changes that play out quicker than the slow window get blurred away or even read backwards (the “Aliasing Condition” — same reason a movie can make wagon wheels spin the wrong way). Pick windows shorter than the changes you care about.
- The comparison has built-in asymmetries. Our gap signal and the standard alarm are measured by different kinds of checks, and part of the gap’s edge comes from that definition; meanwhile the measurement window understates the gap’s true head start. Both effects are spelled out in the paper, pulling in opposite directions, and neither was adjusted away.
- Earlier ≠ best. Fancier statistical detectors can beat it when you know a lot about your data. The gap’s virtues are that it’s two averages and a minus sign, it needs no assumptions, and its head start can be computed on a napkin.
- One series wears an asterisk. The S&P data is monthly before 1928 despite its label, which inflates one kind of average for that series; we report medians and excluded nothing.
And the claim is falsifiable on three fronts, all spelled out in the paper. If the gap’s directional prediction stops beating a coin flip on new pre-registered series; if measured lead times drift away from the window-difference arithmetic beyond the stated tolerances on clean steps; or if the early-warning behavior ever disappears on shuffled data — any of these breaks the result. Anyone with the public repository can run the attacks today.
The takeaway
Two moving averages of the same thing are two clocks running at different speeds, and their disagreement is not noise — it is a preview, with a head start you can compute before you ever look at the data. It held on markets, economies, the sun, a river, and the flu, and it held on scrambled nonsense too, which is precisely the point: the signal works because subtraction works.
This companion is licensed CC BY-NC 4.0. The research paper it accompanies is licensed CC BY-NC-ND 4.0, and the analysis and verification code is MIT-licensed. Education, not advice: nothing in this document is financial advice, an investment recommendation, or a forecast.