Czy BTC to odpowiednik złota? Korelacja Bitcoin do Złota.

Korelacja bitcoin do złota jest powtarzana w świecie kryptowalut jak mantra. Niemalże każda początkująca osoba w świecie krypto trafiła na porównanie Bitcoina do złota. Faktycznie można dopatrywać się pewnych podobieństw. Jednym z nich jest ograniczona podaż. Zarówno dostępnych Bitcoinów  jak i złota z czasem jest coraz mniej, co może prowadzić do wzrostu wartości w długim terminie. Dzięki temu oba aktywa są bezpieczną przystanią do przechowywania oszczędności. Co więcej oba aktywa można przechowywać fizycznie co również podkreśla ich bezpieczny charakter.

Czy faktycznie BTC jest podobne do złota?

Do oceny tego stwierdzenia posłużę się analizą danych historycznych z trzech ostatnich lat cen zamknięcia Bitcoin (BTC) i złota (GC=F). Na tej podstawie zrobiłem korelację za pomocą biblioteki Seaborn której kod znajdziesz poniżej:

import yfinance as yf
import seaborn as sns
import matplotlib.pyplot as plt

# Definiowanie symboli dla Bitcoin, Ethereum, Dow Jones Industrial Average, S&P 500 oraz Gold Futures
tickers = ['BTC-USD', 'GC=F']

# Pobranie danych historycznych z ostatnich 3 lat z dzienną częstotliwością
data = yf.download(tickers, period='3y', interval='1d')

# Wybierz tylko ceny zamknięcia
close_prices = data['Close']

# Zastąpienie symboli indeksów pełnymi nazwami
close_prices.columns = ['Bitcoin', 'Gold Futures']

# Obliczenie macierzy korelacji dziennych zmian procentowych
corr_data = close_prices.pct_change().corr(method="pearson")

# Rysowanie wykresu heatmapy
ax = sns.heatmap(corr_data, annot=True, cmap="YlGn")

# Ustawienie etykiet osi Y równolegle do osi X
ax.set_yticklabels(ax.get_yticklabels(), rotation=0)
plt.show()

# Wydrukuj macierz korelacji
print(corr_data)
Python

Na podstawie tej korelacji dostajemy dość prosty wynik widoczny poniżej:

Korelacja-BTC-vs-ETH

Interpretacja korelacji BTC vs GOLD

Wynik na poziomie 1 oznacza bardzo mocną zależność natomiast im bliżej 0 tym zależność jest słabsza. Patrząc na wynik 0.36  śmiało możemy stwierdzić praktycznie brak korelacji. W takim układzie BTC nie jest cenowo powiązane ze złotem więc porównywanie tych dwóch aktywów do siebie z punktu widzenia analizy fundamentalnej nie ma żadnego znaczenia.  

Z czym koreluje BTC? Jak wygląda korelacja Bitcoin do Złota?

Celem poszukania odpowiedzi na to pytanie do zestawu danych dorzucę takie indeksy jak: Ethereum, Dow Jones Industrial Average, S&P 500.

Korelacja bitcoin a złoto w porównaniu z ETH, Dow Jones, S&P

Po pobraniu danych i obliczeniu macierzy korelacji, otrzymałem następujące wyniki korelacji między tymi aktywami:

  • Bitcoin a złoto: 0.36 – niewielka korelacja cen
  • Ethereum a złoto: 0.37 – niewielka korelacja cen
  • Dow Jones a złoto: 0.069 – praktycznie brak korelacji cen
  • S&P 500 a złoto: 0.93 – bardzo mocna korelacja cen

Bazując na ostatnich trzech latach i cenach zamknięcia otrzymujemy odpowiedź. BTC koreluje bardzo mocno z ETH a niekoniecznie ze złotem. Dla wielu osób zapewne nie jest to zaskoczeniem.

Jako ciekawostkę warto spojrzeć na inne aktywa. Korelacja indeksów giełdowych, takich jak Dow Jones Industrial Average i S&P 500, z cenami złota jest negatywna, co sugeruje tendencję w pewnych okolicznościach do odwrotnego ruchu cen między tymi aktywami.

Reakcja ceny BTC na ETH lub odwrotnie?

Na tym etapie teoretycznych rozważań warto posunąć się o krok dalej. Skoro oba aktywa są bardzo mocno skorelowane to czy istnieje przesunięcie w czasie pomiędzy reakcją ceny ETH na BTC lub odwrotnie? Celem znalezienia odpowiedzi na to pytanie przygotowałem skrypt który wykorzystując korelację wzajemną pomoże poszukać odpowiedzi.

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

# Definiowanie symboli dla Bitcoin i Ethereum
tickers = ['BTC-USD', 'ETH-USD']

# Pobranie danych historycznych z ostatnich 7 dni z minutową częstotliwością
data = yf.download(tickers, period='7d', interval='1m')

# Wybierz tylko ceny zamknięcia
close_prices = data['Close']

# Zastąpienie symboli pełnymi nazwami
close_prices.columns = ['Bitcoin', 'Ethereum']

# Obliczenie minutowych zmian procentowych
returns = close_prices.pct_change().dropna()

# Obliczenie cross-correlation dla różnych przesunięć czasowych
max_lag = 60  # 60 minut
cross_corr = [returns['Bitcoin'].corr(returns['Ethereum'].shift(lag)) for lag in range(-max_lag, max_lag + 1)]

# Tworzenie wykresu cross-correlation
lags = range(-max_lag, max_lag + 1)
plt.figure(figsize=(10, 5))
plt.plot(lags, cross_corr)
plt.xlabel('Opóźnienie (minuty)')
plt.ylabel('Korelacja krzyżowa')
plt.title('Korelacja krzyżowa BTC i ETH wyrażona w minutach')
plt.axhline(0, color='black', linewidth=0.5, linestyle='--')
plt.axvline(0, color='black', linewidth=0.5, linestyle='--')
plt.show()

# Znalezienie przesunięcia o najwyższej korelacji
max_corr_lag = lags[cross_corr.index(max(cross_corr))]
print(f'Opóźnienie z najwyższą korelacją: {max_corr_lag} minuty')
Python

Wynik jaki otrzymujemy jest przedstawiony na wykresie poniżej.

Na pierwszy rzut oka praktycznie żadna zwłoka nie występuje. Oba aktywa niemal w tym samym momencie reagują na rynek. Jednakże cały pik rozpoczyna wzrost na wartości X = -2. W przypadku opóźnienia = -2 oznacza to, że zmiany w cenie BTC wystąpiły dwie minuty wcześniej niż zmiany w cenie ETH, mimo że korelacja jest najwyższa w tym samym momencie. Ogólnie mówiąc, jest to oczywiście obserwacja na podstawie danych i może stanowić ciekawą podstawę do dalszych rozważań.

Przede wszystkim ważne jest, aby pamiętać, że korelacja nie zawsze oznacza przyczynowość, a obserwacje na wykresie mogą być wynikiem różnych czynników wpływających na rynek w danym momencie. Dodatkowo zawsze swoją analizę warto wzbogacić o narysowanie wykresów cenowych i nałożenie cen różnych aktywów na siebie. Tutaj znajdziesz informacje jak to zrobić?: tutaj.

Na zakończenie warto zapamiętać, że analiza powinna być holistyczna, a jedno zjawisko nie zawsze musi bezpośrednio wynikać z innego, nawet jeśli istnieje wysoka korelacja między nimi.