Every daily close from the first exchange quote on 18 July 2010 to the live price, spiralled outward on a logarithmic radius. One full turn is four calendar years from the genesis block. Cycle tops, cycle lows and the halving schedule are detected from the data on every load, not written down, so the picture stays correct as the market moves.
The vertical gap between the lines is the decay. At the same elapsed day, each cycle has traded at a smaller multiple of its own halving-day price than the one before. The current cycle is the first to sit below one, meaning Bitcoin is cheaper today than it was on halving day, two years into the epoch and after the cycle top has already passed.
The halving-day price stopped being a floor. Cycles 1 and 3 never once closed below it. Cycle 2 did, but only in its first hundred days, before the advance began. This cycle has spent time below it both early and late, which no earlier cycle did at all.
The halving is converging on exactly four calendar years. Read where each coloured tick on the baseline falls: 1,319 days, then 1,402, then 1,440, and the next one due at about 1,458 against a 1,461-day calendar. Blocks have been arriving closer to the ten-minute target as hashrate growth decelerates, so from the next epoch onward the halving is a four-year calendar event to within days.
The first year is where the cycle is decided. Switch to the indexed view and the divergence in year one is stark. That is also where the spot-ETF break shows up: the previous record high was taken out 30 days after the 2024 halving, against 90, 229 and 203 days in the three cycles before it.
Not a second exponential. The growth rate itself decays. Trend growth measured between cycle tops, with the change in overshoot stripped out, has run 132%, then 69%, then 47% a year. The forward path starts from the decay of that series and falls toward a floor. On a log axis that is a line that keeps bending down, not one that re-steepens. A genuine second exponential needs a discrete regime event, not more of the same adoption.
Cycles survive, but only on one side. Distance from trend at cycle tops has collapsed from about +4σ to roughly zero. At cycle lows it has not moved. Manias are being arbitraged away by ETFs, listed options and a professional supply of volatility; capitulations are not, because forced selling still happens. That lowers expected return without removing the drawdowns.
The assumption doing the heavy lifting. Price currently sits about a sigma below the fitted trend. The headline horizon value assumes that gap closes. The no-reversion figure, which assumes it never does, is published beside it, and the implied CAGR quoted in the tiles is the blend of the two. Read all three, not just the big number.
Nothing structural is hardcoded. Past halvings are read from the chain by block height and cached permanently, because they are immutable. The next halving is projected from the live tip height at ten minutes a block, so its date tightens as it approaches and the schedule rolls forward on its own once block 1,050,000 is mined. Cycle tops and lows are detected from the price series by rule: a top is an all-time high that then fell at least 50% and stayed unreclaimed for at least 250 days. Those two thresholds, calibrated against known history, accept every real cycle top and reject the April 2013 and April 2021 interim peaks, which fell far enough but were reclaimed in 210 and 189 days.
The data layers. A bundled seed series carries Mt. Gox daily prices for 2010-07-18 to 2011-12-31 and Bitstamp UTC daily closes from 2012-01-01. On each refresh, Bitstamp's public OHLC feed fills every day since the seed ends, and CoinMarketCap supplies the live quote for today's still-open bar. CoinMarketCap is not used for history: its historical endpoints return HTTP 403 on this plan, and its own record only begins 2013-04-28, so it could not reach inception on any plan. Every fetch is cached with a stale-on-error fallback, so an upstream outage degrades the page to its last good state rather than breaking it.
The modelled path is a scenario, not a forecast. Its method and its measured error are both in the table view. Read the band, not the line.