₿Bitcoin Cycle Lab
BITCOIN / USD—Loading saved prices…
SCORE—Position in Bitcoin’s price history
SCORE SCALE
050100

Loading update status…

Bitcoin price and Score

Drag to zoom · double-click to reset · arrow keys to inspect
Choose a date.

Bitcoin price, coloured by the Score that day

Other scores remain dimmed for context.

Price at each score

The full price table uses the unsmoothed position between the floor and ceiling. The charts show its five-day smoothed Score. Grey defaults show the selected day’s price and unsmoothed position; clearing an input restores them.

Five-point score bands and model-implied USD prices
ScorePrice (USD)Vs saved price

This date’s formula, not a forecast. The table shows boundary thresholds: score 0 also includes prices below the first threshold; score 100 includes prices above the last. Bitcoin can trade outside these thresholds.

About the Score and its data

Bitcoin Cycle Lab places Bitcoin’s daily price between an age-based floor and a ceiling built from preceding highs. Lower scores mean nearer the model’s floor; higher scores mean nearer its ceiling. Neither is a guaranteed market boundary.

Inspired by Crypto Super Hub’s Bitcoin score. This is an independently developed formula, not their proprietary score, and is not affiliated with or endorsed by Crypto Super Hub.

Prices come from the Coin Metrics Community API: BTC PriceUSD, daily UTC observations in USD. These are daily observations, not live quotes or a guaranteed exchange close. Provider dates are retained. Only completed UTC days are appended; publication can lag. Updates run while this local app’s server is open and catch up on the next launch.

Price data is supplied under CC BY-NC 4.0. Data gaps and conflicting revisions are rejected rather than interpolated.

Equations and parameters

Let A be days since 3 January 2009 plus one, T be years since the first price observation (18 July 2010), and x = ln(A / 3652.5). All logarithms are natural.

ln(F) = a + b × x

E = max over preceding days j of [ln(Pⱼ) − b × xⱼ + d × Tⱼ]

ln(C) = max[b × x + E − d × T + k, ln(F) + ln(1.05)]

Position = 100 × clip[(ln(P) − ln(F)) / (ln(C) − ln(F)), 0, 1]

Scoreₜ = Positionₜ / 3 + 2 × Scoreₜ₋₁ / 3

Parameters: a = 7.695935321127742; b = 5.701394920981048; d = 0.24852567726613145; k = 0.21073464250052515. Smoothing uses EMA span five (α = 1/3), initialized at zero and updated from the second price observation; scores are first displayed after 730 preceding daily observations. Today’s price enters the high envelope only after scoring.

For the calculator: P(s) = F × exp[(s / 100) × ln(C / F)]. It freezes the selected date’s preceding history and evaluates unsmoothed position. Keeping prior smoothed scores fixed would make many 0–100 scores unreachable by changing a single day’s price.

Parameters were calibrated retrospectively against published examples and are kept fixed during updates. Historical scores are reconstructions, not a record of a tool available at that time. Source revisions or future model changes can change results. The Score and price table have not established trading performance.