Bitcoin Regime Score: Stop Calling the Top, Start Naming the State
Most on-chain indicators are built to answer one question: is bitcoin expensive or cheap? MVRV, NUPL, Reserve Risk, Puell — all of them place price somewhere on a valuation axis, and all of them are useful. But that axis has a blind spot that anyone who lived through 2017 will recognise: expensive and still climbing and expensive and rolling over look identical on a valuation chart, and they are the two most different states a market can be in.
The Bitcoin Regime Score, now available in the BGeometrics API, is an attempt to close that
gap. It is a 0-100 composite, but the number is only half the output. The other half is a label:
EXPANSION, DISTRIBUTION, CAPITULATION, RECOVERY or TRANSITION.
How it is built
Six dimensions, each weighted, each normalised the same way:
| Dimension | Weight | Inputs |
|---|---|---|
| On-chain | 30 | MVRV Z-Score, NUPL, aSOPR (30d), Reserve Risk, LTH net position change |
| Trend | 20 | Mayer Multiple, price / 200-week MA, 90-day return, RSI |
| Volatility | 10 | 30-day realised volatility, 30d/90d volatility ratio |
| Funding | 15 | Perpetual funding rate (7d mean), open interest / market cap |
| Exchange flows | 15 | 30d exchange netflow, 30d reserve change, 30d miner netflow |
| ETF flows | 10 | 30d net flow of the US spot ETFs, in BTC |
Every input is converted to its expanding historical percentile: each day is scored only against days that came before it. There is no look-ahead bias — the value the API returns for 14 December 2017 is computed from data available on 14 December 2017, not from what we know now.
Because funding data begins in 2023 and spot ETFs did not exist before January 2024, the
composite is a weighted mean over whatever components exist that day, and the API returns an
active_weight field so you always know what went into a given value. It sits at 75 for most
of the series and reaches 100 from 2025 onward.
Level plus direction
The regime label comes from combining the score with its own 30-day slope (measured on a 7-day smoothed score, to stop it flickering):
score ≥ 60
|
DISTRIBUTION | EXPANSION
(falling) | (rising)
--------------------+-------------------- 30-day direction
CAPITULATION | RECOVERY
(falling) | (rising)
|
score ≤ 40
40 < score < 60 → TRANSITION
That single addition is what separates a market that is merely expensive from one that is actively topping out, and a market that is merely cheap from one that is still breaking down.
The part we got wrong first
When we specified the metric, two of the six dimensions were given what seemed like the obvious orientation: a calm market is a healthy, risk-on market, and coins leaving exchanges is bullish accumulation. Both are widely repeated. Both turned out to be backwards.
We tested it rather than assuming it, by correlating every component against a neutral cycle-temperature reference — where price sits within its own trailing four-year distribution. Five components came back negatively correlated. Realised volatility is high at cycle extremes, not low. Exchange inflows and miner distribution are what accompany tops, not outflows.
Correcting those orientations lifted the composite’s correlation with the cycle reference from
0.744 to 0.782, moved December 2017 from TRANSITION to DISTRIBUTION, and moved June 2022
from RECOVERY to CAPITULATION. It is a small reminder that on-chain folk wisdom is worth
measuring before it is worth trusting.
What 15 years of history says
The series runs from November 2011 to today — 5,380 days. Grouping every day by its regime and measuring what price did afterwards:
| Regime | Days | Share | Median 90d | Median 180d | Median 365d |
|---|---|---|---|---|---|
| CAPITULATION | 1,437 | 26.7% | +8.0% | +31.2% | +93.3% |
| RECOVERY | 654 | 12.2% | +0.9% | +38.3% | +88.0% |
| TRANSITION | 2,230 | 41.4% | +14.2% | +36.1% | +104.6% |
| EXPANSION | 710 | 13.2% | +33.6% | +43.6% | +74.9% |
| DISTRIBUTION | 349 | 6.5% | −15.9% | +3.6% | −1.4% |
Against a whole-sample median of +91% at one year, one result stands out: DISTRIBUTION is
the only state that has historically not paid. It is negative at 90 days, roughly flat at a
year, and it is rare — 6.5% of all days. EXPANSION, at the other corner, has by far the
strongest 90-day median.
The two cold states behave the way you would hope: weak over three months, strong over a year. Being right about a bottom and being early about a bottom are the same thing.
The DISTRIBUTION episodes themselves land where you would want them to:
| Episode | Days | Avg score | BTC at start |
|---|---|---|---|
| Apr–Jun 2013 | 53 | 69 | $104 |
| Dec 2013 – Feb 2014 | 52 | 71 | $688 |
| Jun–Aug 2017 | 34 | 69 | $2,558 |
| Sep–Oct 2017 | 36 | 68 | $4,615 |
| Dec 2017 – Mar 2018 | 41 | 69 | $13,942 |
| Jan–May 2021 | 78 | 73 | $34,366 |
Where it fails
An honest launch has to include the failure modes, and this one has three worth knowing before you build anything on it.
It is not a sell signal. Look again at the 2017 rows. The June and September 2017
DISTRIBUTION episodes were followed by 90-day returns of +96% and +267%. The aggregate
median of −15.9% conceals enormous dispersion: the state flags elevated risk, and in a parabolic
advance elevated risk can persist for months while price triples. Treating a DISTRIBUTION
print as an instruction to exit would have cost you the best quarter of that cycle.
The sample of top calls is small. There are 13 DISTRIBUTION episodes in fifteen years and
only six lasting more than a month. Every statistic in the table above is computed on overlapping
windows, so the effective number of independent observations is far smaller than the day counts
suggest. Bitcoin’s secular uptrend also inflates every one-year figure — which is precisely what
makes DISTRIBUTION interesting, since it is the one state that escapes it.
It has not flagged the last two cycle highs. This is the big one. The score peaked at 73 in
the April 2021 DISTRIBUTION episode, but November 2021 topped out at 65 and read TRANSITION.
The October 2025 all-time high of $124,891 scored 55.3 — also TRANSITION. The cause is
structural: the amplitude of Bitcoin’s cycles is compressing. Peak MVRV Z-Score was 9.6 in 2013,
10.1 in 2017 and 3.5 by late 2021. An expanding percentile scores each new top against every
prior one, so each cycle reads cooler than the last.
We tested a four-year rolling window as the fix. It correlates slightly worse (0.774) and does not rescue November 2021 either, so the expanding percentile stayed. If cycle amplitude keeps decaying, the 60/40 thresholds will need revisiting — and that is a known open question, not a solved one.
Where we are now
As of 5 August 2026, with bitcoin near $64,674:
- Regime Score: 35.5 —
RECOVERY(30-day direction +6.7) - On-chain 28.0 · Trend 23.3 · Volatility 23.3 · Funding 55.6 · Flows 54.8
active_weight90 (the ETF component lags by two days)
A cold market that has stopped getting colder. On-chain valuation and trend are both deep in the bottom quartile of their own history, while positioning and flows sit near the middle. On the table above, that is the state with a +88% median one-year return and a roughly flat next quarter — historically a zone for patience rather than urgency.
Using it
The metric is a daily series available from November 2011, recomputed in full every day so that late-arriving upstream data is folded back into the history.
Regime Score is a subscriber endpoint: it requires an API token, and requests without one
return 403. You can get a token here — then append
it to any of these:
GET https://bitcoin-data.com/v1/regime-score/last?token=YOUR_TOKEN
GET https://bitcoin-data.com/v1/regime-score?token=YOUR_TOKEN
GET https://bitcoin-data.com/v1/regime-score?token=YOUR_TOKEN&startday=2021-01-01&endday=2021-12-31
A single row looks like this:
{
"d": "2026-08-05",
"unixTs": 1785888000,
"regimeScore": 35.5,
"regime": "RECOVERY",
"regimeDelta30d": 6.7,
"activeWeight": 90.0,
"onchainScore": 27.99,
"trendScore": 23.31,
"volatilityScore": 23.32,
"fundingScore": 55.61,
"flowScore": 54.76,
"etfScore": null
}
Every subscore ships alongside the composite, so you can rebuild it with your own weights if you
disagree with ours. (etfScore is null here because the ETF flow data runs about two days
behind — which is exactly why activeWeight reads 90 rather than 100.) Full schema in the
API documentation.
It is also available as a chartable metric in the BGeometrics dashboard under Indexes.
Disclaimer: This article is informational analysis and does not constitute financial advice. Do your own research (DYOR). Investing in Bitcoin carries the risk of total loss.