Bitcoin HODL Waves: Calculated From Our Own Node, Not a Vendor
HODL waves split all circulating Bitcoin by how long each coin has gone without moving. Most explainers stop at the definition. This one starts with where the number actually comes from: our own Bitcoin node, walking the full UTXO set once a week -- not a feed we license from a data vendor.
HODL waves are a breakdown of all circulating Bitcoin by how long each coin has gone without moving addresses -- an X-ray of market conviction, sitting alongside MVRV and NUPL as one of the classic on-chain cycle indicators. If you've read a Glassnode or Unchained chart before, you already know the shape. What's worth your time here is the part most coverage skips: this is one of the hardest on-chain data points to produce, and one of the very few we compute ourselves rather than pull from a third party.
📊 Live data: the own-node component of the NodeWitness Cycle Score -- which combines HODL waves with holder distribution by wallet size -- appears every day among the key indicators on the front page, along with the direction it's currently pushing the Score.
What HODL Waves Show
Every Bitcoin coin has an "age": the time since it last moved on-chain. Coins that sit untouched for years signal long-term conviction ("hodling," from a famous typo of "holding"); coins that change hands often point to trading or short-term speculation. Stacked by age, the bands read like geological strata -- the deepest layers are the market's solid base, the top layers are this week's churn.
Why We Calculate This From Our Own Node, Not License It
No free API -- Coin Metrics, CoinGecko, Blockchain.com -- publishes a supply breakdown by coin age. That data sits behind paid plans at Glassnode and CryptoQuant, because producing it requires walking the entire UTXO set, not querying a database someone else already built. We compare what else we give away for free against Glassnode here.
Our process: the node generates a full UTXO set snapshot (dumptxoutset, a binary dump
of every unspent output at a given block), and our own parser walks that file -- tens of
millions of entries -- calculating each one's age against the snapshot height, then
aggregating into the bands below. It's heavy work, several minutes over a file several
gigabytes in size, and it runs automated once a week against our own Bitcoin node --
never an on-demand query, never a number licensed from someone else's index.
The Age Bands We Track
Every UTXO (unspent transaction output) is grouped by blocks elapsed since creation, into ten bands: less than 1 day, 1 day - 1 week, 1 week - 1 month, 1 - 3 months, 3 - 6 months, 6 months - 1 year, 1 - 2 years, 2 - 3 years, 3 - 5 years, and more than 5 years. Internally we also draw a single long/short-term line at 155 days -- the same convention much of the on-chain analysis industry uses -- which falls inside the 3-to-6 month band rather than on one of its edges. It's the same threshold our own long-term holder Supply-in-Loss module uses, so the age-related indicators across the project stay consistent with each other.
How It Feeds the Score
From the same UTXO snapshot we also compute holder distribution by wallet size -- from "shrimp" (under 0.01 BTC) to "whales" (over 10,000 BTC) -- a different question about the same data: how long since a coin last moved, versus how much BTC an address controls. Both feed the own-node component of the Score, shown with comparative history in our Supply and holders section. We're also building a mechanism to roll the UTXO snapshot back to past block heights instead of only capturing the present -- the piece needed for a real historical time series. It's built but not yet run against production, so there's no published history or launch date yet; we'd rather say that plainly than imply a capability we don't have.
What This Data Can't Tell You
Lost coins inflate the oldest bands permanently -- inaccessible BTC reads exactly like patient conviction. Institutional cold storage looks like an individual holder even when thousands of users are trading behind it. A coin moving doesn't always mean a sale -- wallet consolidation resets age with no trade involved. And it's a periodic snapshot, not a live feed: it reflects the last dump, not yesterday, though our node has now finished syncing so that snapshot reflects the chain's real height rather than a partial sync state. The most common mistake is reading one snapshot as a verdict -- the signal is in the trend across snapshots, combined with other indicators, never alone.
Want to see HODL waves calculated from our own node, with comparative history? Visit our Supply and holders section -- free, no sign-up required.
Last updated: 2026-07-29