Most SOPR Charts Average the Ratios. Here's Why That's the Wrong Math.
SOPR compares, for every coin spent today, the price it was created at against the price it's being spent at now. The number that matters is the value-weighted sum across the day, not the average of each output's individual ratio, and most explainers skip that distinction entirely.
Spent Output Profit Ratio is one of the more widely cited on-chain metrics, and one of the more commonly miscalculated. The standard shortcut, averaging each spent output's profit ratio as if every output carried equal weight, quietly changes what the number means. A single 50 BTC output moving at a loss and 500 separate 0.1 BTC outputs moving at a profit are not equally important to the day's real economics, even though a naive average would treat them that way.
The math, precisely
For every coin spent in a block, SOPR compares two prices: what it was worth when created (the earlier transaction that produced it) and what it's worth at the moment it's spent now. The formula sums the dollar value at spend time across every output in the day, then divides by the sum of dollar value at creation time. That's value-weighted by construction: a 50 BTC output carries 500 times the weight of a 0.1 BTC one, matching how it actually weighs in real economic terms, not how it weighs as one line among many in an average.
Above 1: coins moved that day realized a net profit. Below 1: a net loss. Near 1: a wash, commonly a signal of indecision rather than conviction in either direction.
Where the number comes from, with no third party in between
We compute this by walking every block with our own node. Each transaction's inputs carry a pointer back to the original output that created them, including its block height and value. There's no need to maintain a full transaction index across Bitcoin's entire history: Bitcoin Core already retains that data to support undoing blocks, and a single detailed block request is enough to read it.
With the creation height, the spend height, and BTC's historical price at both points, computing each output's real profit or loss is direct. Sum every output for the day and that's SOPR.
What it doesn't cover yet, stated plainly
Walking the full history of Bitcoin block by block, transaction by transaction, isn't instantaneous. As of this piece, our walk covers block 100,490 (January 2011) through roughly mid-2015, and keeps advancing. The live chart shows exactly where that boundary sits; we don't backfill the gap with anything else, it simply isn't there yet.
This isn't a hidden limitation. It's the same discipline we apply to every other own-node indicator on this site: state exactly how far the real data reaches, never imply more coverage than exists.
What it measures, and what it doesn't
SOPR doesn't forecast price direction. It tells you whether recent on-chain activity is realizing gains or losses, a read on behavior, not a prediction. A SOPR held below 1 through a price decline is commonly read as capitulation (holders selling at a loss until weak hands are exhausted); a SOPR well above 1 during a rally often reads as profit-taking.
It's also not MVRV, despite sharing the same "realized" family of metrics. MVRV looks at the entire supply's cost basis at one instant; SOPR only looks at coins that actually changed hands on a specific day. One is a snapshot of the full stock, the other is a pulse of daily flow.
See the live series yourself, with full range and date filtering, on our SOPR chart. The rest of our own-node indicators live together at On-Chain Charts.
Last updated: September 1, 2026