Understanding URPD
UTXO Realized Price Distribution (URPD)
Shows the distribution of Bitcoin's supply by the price at which each UTXO was last moved on-chain: its realised price, or cost basis. Each bar is the supply whose cost basis falls in that price range. One snapshot per day since 2009-01-03, from Bitcoin Research Kit via bitview.space.
URPD (USD-weighted) — USD Value at Last Move
Weights each UTXO by its dollar value at its last on-chain move. Shows where that value is concentrated.
USD Value at Last Move(P) = P · S(P)
URPD (BTC-weighted) — Supply Distribution
Shows raw BTC supply at each cost-basis price, unweighted by dollar value.
S(P) = Σ utxo.value where utxo.price ∈ [P, P + ΔP)
Realized Cap
The total value of all UTXOs priced at their last-moved price. Unlike market cap, it reflects the aggregate cost basis of the entire supply.
RC = Σᵢ Pᵢ · Sᵢ for all price bins i
Supply in Profit / Loss
At the spot price line: the share of the day's USD value at last move (USD view) or BTC supply (BTC view) whose cost basis is at or below spot is "in profit"; above spot is "in loss". Computed from the displayed bins.
Profit % = Σ W(P) for P ≤ Spot / Σ W(P) × 100
Bottom Signal
Fires when the share of USD value held in loss, computed from the exact realised prices, reaches the threshold set in the toolbar (default 80%). Historically, extreme readings have coincided with cycle bottoms.
Signal when: Loss% ≥ Threshold (default 80%)
UTXO Age Bands (AGE)
Splits the distribution into 23 cohorts by how long each UTXO has sat unmoved, from under one hour to over fifteen years. Colour is a spectrogram of age and needs no words: a band's colour position is the logarithm of its mid-age (as a spectrogram maps decibels), from 30 minutes to 16 years, so colour distance is age distance on a log scale and no band boundary is treated specially. Lightness falls strictly from young to old, so age can be read from brightness alone, even in greyscale; hue runs hot to cold (yellow → orange → red → magenta → violet → blue) as a second cue that never passes through green, so it also reads with red–green colour blindness. Cohorts come directly from Bitcoin Research Kit.
Age(utxo) = now − t(last moved)
Histogram Bins
Equal-width price bins from $0 to the day's highest cost basis (Bins in the toolbar, default 625, so about $200 when the high is $125K); the width in dollars and the on-screen width of each bar in pixels are shown next to the field and change with the date and window. Bars sit on whole screen pixels with a one-pixel gap between neighbours so every bar can be told apart; if the bars would be thinner than 2 px (too many bins for the window) they are drawn solid. Bitcoin Research Kit prices coins at block-level prices in $1 buckets below $100K and $10 buckets above, and one large transfer can land a huge mass on a single price, and each price point's mass goes into the bin that contains it: with Smoothing at 0 (the default) the bars are the raw binned data. Setting Smoothing to S spreads each point with a Gaussian of σ = S% of its price (0.1–0.3 is a light touch; the field accepts up to 1); mass and USD value are preserved exactly.
ΔP = max cost basis / bins; σ = S% × price (0 = raw); bar(P) = Σ mass · N(P, σ) over the bin
Percent of Total
The line on the right axis is the cumulative share of the day's supply (BTC view) or USD value at last move (USD view) with a cost basis at or below each price.
Cum %(P) = Σ W(p ≤ P) / Σ W × 100
Adjustable Y-max
Caps the left axis at the Nth percentile of the non-zero bar heights so one tall spike does not flatten the rest (default 100 = the tallest bar; lower it to zoom in on the rest). Bars above the cap are clipped.
y-max = percentileₙ(bar heights)
BTC Price Overlay
The white line is the daily close for the year leading up to the selected date, on a log scale, with the orange marker on that day's close and cycle tops and bottoms marked. Click the BTC/USD legend entry to hide or show it.
Video Export (▶)
Records the chart moving through a date range, one frame per step of the current interval (1D/1W/1M/1Y) in the current view, at the chosen frames per second, and saves a WebM.