What the Bitcoin and Ethereum correlation means if you hold both

By Caio Marchesani · 6 February 2025

This follows on from the post where I worked through the Pearson correlation between Bitcoin and Ethereum in Python. That one was about getting the number. This one is about what to do with it, because a correlation coefficient on its own is not much use to anyone, and the question people actually ask is simpler than the statistics: if I hold both of these, am I diversified or not?

Line chart of the rolling 26-week correlation between Bitcoin and Ethereum weekly returns from November 2021 to November 2026, ranging between about 0.55 and 0.97

The short answer is less than you think, and it depends when you ask.

What the number is telling you

Correlation measures how two assets move relative to each other on a scale from -1 to 1. At +1 they move together in lockstep, at 0 their moves have nothing to do with each other, and at -1 one goes up when the other goes down. Diversification only reduces risk when the things you hold sit well below 1, because the whole idea is that when one position is losing, another one isn’t.

Bitcoin and Ethereum are the two largest coins, they trade on the same venues, to the same people, driven by the same headlines. It would be surprising if their daily returns were not closely related, and in practice they usually are. The correlation is not fixed, though. It drifts between periods where the two go their own way and periods where they are effectively one position, and the swings between those two states are what matter for a portfolio.

Where it bites

The clearest illustration is the 2022 bear market. Bitcoin and Ethereum moved almost identically on the way down and both ended up more than 70 per cent below their all-time highs. If you held both thinking you had spread your risk, you hadn’t. You had one bet with two tickers on it.

This is the awkward property of correlation in crypto, and in most risk assets really: it rises when markets fall. The moment you most want your holdings to behave differently is the moment they are most likely to behave the same. So any diversification you measured during a calm period is an overestimate of what you will get when you need it.

The other side of it

High correlation is not purely a cost. In a rising market both assets go up together, which is why a two-coin portfolio can look so good in a bull run. The price is volatility: the swings in the two positions stack on top of each other rather than cancelling out. Whether that is acceptable is a personal question about how large a drawdown you can sit through without doing something rash, and I would suggest answering it honestly before the drawdown rather than during it.

What I would actually do about it

Keep an eye on the rolling correlation rather than a single number, because it changes. When it climbs towards 0.9 and above, treat the two holdings as one and size them accordingly, or trim one of them. If you want real diversification it has to come from something outside crypto: equities, gold, bonds, or simply cash. Cash is underrated here, since a reserve lets you buy after the kind of synchronised fall described above instead of being forced to sell into it. And if you understand the instruments, futures and options can hedge a period where you expect both to fall together, though that is a separate topic and not something to do casually.

Plotting the rolling correlation in Python

The code below pulls daily prices from Yahoo Finance, works out daily returns, and plots the correlation over a rolling 30-day window. Thirty days is short enough to show the regime changes and long enough not to be pure noise. Sixty or ninety days gives a smoother line if you prefer.

import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt

# daily closes for both coins
btc = yf.download("BTC-USD", start="2022-01-01", end="2025-01-01")["Close"]
eth = yf.download("ETH-USD", start="2022-01-01", end="2025-01-01")["Close"]

df = pd.concat([btc, eth], axis=1)
df.columns = ["BTC", "ETH"]

# daily returns, then the correlation over a rolling 30-day window
returns = df.pct_change().dropna()
rolling_corr = returns["BTC"].rolling(window=30).corr(returns["ETH"])

plt.figure(figsize=(12, 6))
plt.plot(rolling_corr, label="BTC-ETH 30-day rolling correlation")
plt.axhline(y=0, color="grey", linestyle="--", linewidth=1)
plt.axhline(y=1, color="red", linestyle="--", linewidth=1, label="perfect correlation")
plt.title("Bitcoin and Ethereum: 30-day rolling correlation of daily returns")
plt.xlabel("Date")
plt.ylabel("Correlation")
plt.legend()
plt.grid(True)
plt.show()

Run it and you will probably see the line spend most of its time somewhere between 0.6 and 0.9, with dips when one coin has a story of its own for a few weeks, and spikes towards 1 during sell-offs. That picture is worth more than any single coefficient, and it is the thing I would look at before deciding how much of each to hold.

Related articles

About the author

Caio Marchesani is a hedge fund manager, trader and engineer, with an MEng in Mechanical Engineering from University College London and more than fifteen years applying quantitative models to energy and macro markets, including as founder of a London quantitative macro energy fund. He also invests in and builds businesses outside finance, and founded Acai Berry Foods, the açaí café brand that began on Brick Lane and now has shops in London, the UAE and New York.

Read the full biography

Scroll to Top