The untold story about bitcoin peaks

Vahid Zarifpayam
Published in
5 min readDec 30, 2020


Are you worried you might miss the opportunity of the peak? Do you wish you had sold some bitcoin in Dec 2017 when it hit 19000 USD? Well … , don’t be hard on yourself because a lot of us missed that opportunity. Many of us pictured BTC in the 50000s back then. In the hind sight, we were too optimistic. I mean who could predict a shift of sentiment in bitcoin that would take the price from 19k and dump it to 7k in just two months? Bitcoin is still a nascent asset class and it has an effervescent nature. So, like it or not, you are on a rollercoaster ride.

Today, bitcoin price has reached another all time high and bullish narratives are taking bearish ones to the corner of the ring. But don’t feel shy if you have doubts and you think otherwise.

Our goal in this writing is to help you to better understand the investor/trader behaviour during these times of hyperbole by drawing comparison to previous similar situations were bitcoin has experienced a sudden change of sentiment from hyper bullishness to hyper bearishness. The metrics used for this study are so-called on-chain; meaning that you can have them by looking into a bitcoin node. For simplicity, we are using the services of Glassnode for the on-chain data.

In the methodology section that follows, we are going to reveal the details of our approach to zero in on the days with change of sentiment. In total we identified the 13 days that come below:

Here are the key findings:

1- The peak in price is usually a turning point in the number of transactions on-chain

There is more demand for bitcoin transaction during the days leading up to the peak than the days coming after it.
Its visible from the chart that at equal price, below and after the peak, the level of transactions per day is higher before the peak than after the peak.

The transaction data is entity-adjusted, meaning that it excludes transactions done between the addresses of the same entity on the blockchain. So, the number is a close proxy to a real transaction; one that transfers the value from one owner to another on the ledger.

The scope of our analysis is ten days before and ten days after each of the above 13 points. The zero on the x-axis represents 13 peaks. Each point on any of the charts represents a simple average of 13 points.

We chose to present the %change in the price relative to the peak, rather than the price in terms of dollars. That’s because the dollar amounts vary a lot from one peak to another, and this would have skewed our results toward 1, or 2 events out of 13.

2- Old timers sell before the peak, late comers sell after it

As evidenced by this chart, the profit ratios for the spent outputs (Bitcoin accounting units) sold on days prior to a peak are generally higher than the profit ratio for those sold on days after a peak, at an equal price. This means that those who bought at lower prices tend to get rid of their bitcoins before the change of sentiments take place. But be careful, while the old timers have been right most of the times so far, it won’t mean that it will always be the same in future peaks.

3- More users interact with bitcoin before the peak than after it

This one is the most obvious chart. It is easily backed by the common sense. Before the peak, more individuals create addresses and use them than after it. This could me a matter of behavioural science. Entities are groups of addresses belonging to the same owner.

We have taken 13 peak days during the life of bitcoin, from 2010 till November 2020, for this analysis.
The peaks have been identified by a combination of the following criteria over the 5 day moving average of bitcoin price data.
The data points for the 13 peaks have been averaged using a simple average to be represented as a single data point on the chart.

The following code has been used to prepare the data and Identify the peaks:

import pandas as pd
import datetime as dt
data = pd.read_csv('price.csv')
data.timestamp = data.timestamp.apply(lambda x: \dt.datetime.strptime(x, "%Y-%m-%dT%H:%M:%SZ").date())
data = data.groupby(['timestamp']).mean().reset_index()
data = data.fillna(method='bfill')
crash_days_1 = []
for i in range(0, len(data.index) - 3, 1):
for m in range(i, i +3, 1):
if data['price-ma'].iloc[m + 1] <= data['price-ma'].iloc[m]:

crash_days_2 = []
for i in range(0, len(data.index) - 3, 1):
for m in range(i, i + 3, 1):
if data['price-ma'].iloc[m + 1]>= data['price-ma'].iloc[m] :

crash_days_3 = []
for k in range(0, len(data.index) - 30, 1):
if data['price-ma'].iloc[k+30] < 0.85* data['price-ma'].iloc[k]:

crash_days_4 = []
for k in range(0, len(data.index) - 10, 1):
if data['price-ma'].iloc[k+8] > 1.1*data['price-ma'].iloc[k]:

Communlist =list(set(crash_days_1)& set(crash_days_2)&set(crash_days_3)& set(crash_days_4))

Credit goes to Bitprobe.

Also, Read

Get Best Software Deals Directly In Your Inbox



Vahid Zarifpayam

Data analyst, Tableau developer , Bitcoin, Ethereum and L2's