OPEN-SOURCE SCRIPT
Updated Glassnode BTC SOPR Toolkit

SOPR stand for Spent Output Profit Ratio. It’s a Bitcoin on-chain metric that shows whether Bitcoin spent outputs (UTXO’s) are being realized in profit or loss. It’s calculated by dividing realized value by the value at creation (price sold / price paid).
The SOPR metric traditionally uses a baseline of 1 instead of 0. For the purposes of the script, I've changed the baseline to 0.
SOPR signals > 0 show the overall market is transaction at a profit.
SOPR signals < 0 show the overall market is transacting at a loss.
SOPR servers as a great short/mid-term indicator.
SOPR Toolkit Features
- Smoothed SOPR
- SOPR Spikes
Smoothed SOPR
By default, ‘Smoothed SOPR’ is shown which applies a smoothing function to SOPR. This helps to visualize the broader SOPR trend.
Smoothed SOPR is calculated by taking the difference between positive and negative SOPR values.
SOPR is split into separate arrays based on if it's above or below the baseline A moving average is then applied to each array, then subtracted to get the difference.
You can also change whether or not a SMA, EMA, or Volume Weighted Simple/Exponential moving average is used. The VWMA is calculated using Glassnode’s BTC Total Transfer Volume metric.
SOPR Spikes
Shows relevant SOPR spikes.
SOPR spikes is calculated by applying a Bollinger Band to SOPR. Only values spike outside the bands are shown.
Adjust the StdDev to show more/less relevant spikes.
Enjoy :)
The SOPR metric traditionally uses a baseline of 1 instead of 0. For the purposes of the script, I've changed the baseline to 0.
SOPR signals > 0 show the overall market is transaction at a profit.
SOPR signals < 0 show the overall market is transacting at a loss.
SOPR servers as a great short/mid-term indicator.
SOPR Toolkit Features
- Smoothed SOPR
- SOPR Spikes
Smoothed SOPR
By default, ‘Smoothed SOPR’ is shown which applies a smoothing function to SOPR. This helps to visualize the broader SOPR trend.
Smoothed SOPR is calculated by taking the difference between positive and negative SOPR values.
SOPR is split into separate arrays based on if it's above or below the baseline A moving average is then applied to each array, then subtracted to get the difference.
You can also change whether or not a SMA, EMA, or Volume Weighted Simple/Exponential moving average is used. The VWMA is calculated using Glassnode’s BTC Total Transfer Volume metric.
SOPR Spikes
Shows relevant SOPR spikes.
SOPR spikes is calculated by applying a Bollinger Band to SOPR. Only values spike outside the bands are shown.
Adjust the StdDev to show more/less relevant spikes.
Enjoy :)
Release Notes
*Minor fixesOpen-source script
In true TradingView spirit, the creator of this script has made it open-source, so that traders can review and verify its functionality. Kudos to the author! While you can use it for free, remember that republishing the code is subject to our House Rules.
For quick access on a chart, add this script to your favorites — learn more here.
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.
Open-source script
In true TradingView spirit, the creator of this script has made it open-source, so that traders can review and verify its functionality. Kudos to the author! While you can use it for free, remember that republishing the code is subject to our House Rules.
For quick access on a chart, add this script to your favorites — learn more here.
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.