Stock-to-flow is a clock in disguise
It is the best known Bitcoin model and the one people search for by name. We tested whether adding it improved anything in our engine, wrote the verdict down before looking away, and it was no. Here is every number, including the test it won.
Measured on 19 August 2026. Frozen figures, not a live reading: this page reports one dated experiment, not a number that moves.
What it says, and why it sounds so convincing
Stock-to-flow divides what already exists by what is produced each year. Bitcoin halves its issuance roughly every four years, so the ratio climbs in steps and never falls. Plot it against price on a log chart over a decade and the two lines rise together beautifully. That picture is the whole reason the model is famous.
We had no excuse not to test it. Stock-to-flow needs no data provider: it comes straight out of the halving calendar, which is arithmetic. The question was narrow and honest, does adding it improve the line, the candles, the bets, the cone or the volatility?
The test it won, and why that test is worthless
Fitting the log of price against the log of stock-to-flow gives an R² of 0.828. The power law our engine actually uses, fitted against the log of time, gives 0.787. Stock-to-flow wins. We are publishing that because it happened.
And it decides nothing. That is a regression on the levels of two series that both trend upwards for nine years, which is the textbook definition of a spurious regression. Any two things that rise together for long enough will correlate, related or not. A test that a bad model passes is not a test.
Against what actually matters, there is nothing there
A model earns its place by saying something about what comes next. So we correlated stock-to-flow against future returns: −0.032 over the following 30 days, −0.078 over 90. With roughly 84 and 27 effective observations, the standard error of those correlations is about 0.11 and 0.19.
That puts both numbers three or four tenths of a standard error away from zero. In plain words: indistinguishable from noise. Stock-to-flow does not tell you where the price goes next.
Where it almost passed, and how it gave itself away
Against future volatility the signal looked real and large: −0.470 at 30 days and −0.566 at 90, with the sign you would hope for. More scarcity, less volatility. Added to past volatility it lifted the fit by 8.6 points at 30 days and 19.2 at 90. This is the point where a less careful test would have said yes.
But stock-to-flow rises monotonically with time, and Bitcoin volatility has been falling for years as the asset matures. So we made them compete. A plain day counter since the genesis block does the job better, and once you have it, stock-to-flow adds five hundredths of a point out of a hundred.
No. And it is not coming back
Stock-to-flow does not enter the projection. What looked like scarcity driving price was the calendar driving both, and a day counter models the calendar better because that is all it is.
We are not re-litigating this without new data, and there is no new data to be had: the issuance schedule is deterministic to the last block, so stock-to-flow cannot stop being a function of time. The experiment did leave something valuable behind, though. That time term is real and our engine did not have it, because its variance comes from a GARCH that reverts to a constant long-run mean and carries no trend by construction. That became the next experiment.
The difference is not the model, it is the scoring
Stock-to-flow made dated public predictions that missed, and there was never a scoreboard: the model was defended, then quietly dropped. We took the opposite bet. Every range is committed before the period it judges, stored, and compared against the real close afterwards, hits and misses alike.
And the range is not a target price. It is the interquartile band of thousands of simulated scenarios, so a well calibrated model contains the close about half the time, not always. A band that is right every time is simply a band that is too wide to mean anything.