お金の健康

投資にプログラミングを使いたい!金とビットコインの関係

こんにちはー、ウチダです。

ぼくは経済や金融、投資が好きなので、投資とプログラミングの組み合わせを勉強しています。

今回はビットコインと金の関係を調べてみたので、結果をお話します。

投資にプログラミングを使いたい!

ぼくはプログラミング言語の中で、Pythonを独学しています。

Pythonはデータ分析、AI、機械学習、深層学習といった分野で主要言語となっており、コードがシンプルで読み書きしやすい特徴から初学者でも勉強しやすいプログラミング言語です。

Pythonには外部ライブラリが使えるという特徴があり、天才たちが作ってくれたライブラリをインストールすれば、自分のプログラムで自由に使えます。

最初にビットコインと金の価格の関係を調べるために、yahoo financeからビットコインと金の価格を取得し、チャートで表示します。

プログラミングでチャートを表示する

まずyahoo financeのサイトでビットコインと金を調べると、シンボルはそれぞれBTC-USDGC=Fになっています。

図1 yahoo! financeのサイト(ビットコイン)

(引用:Yahoo!finance、Bitcoin USD(BTC-USD):リンク

図2 yahoo! financeのサイト(金)

(引用:Yahoo!finance、Gold Dec20(GC=F):リンク

したがって、シンボルにはBTC-USD、GC=Fをそれぞれ使います。

期間は2014年9月16日〜2020年10月31日、価格は終値(Close)を使ってグラフを作成しました。

コードはこんな感じです。

#import libraries
from pandas_datareader import data
import pandas as pd
from pylab import mpl, plt
import numpy as np
plt.style.use('seaborn')
mpl.rcParams['font.family'] = 'serif'
%matplotlib inline

#date
start = '2014-09-16'
end = '2020-10-31'

#get a data of BTC
BTC_df = data.DataReader('BTC-USD', 'yahoo', start, end)
BTC_date = BTC_df.index
BTC_price = BTC_df['Close']

#get a date of gold
gold_df = data.DataReader('GC=F', 'yahoo', start, end)
gold_date = gold_df.index
gold_price = gold_df['Close']

#show a price chart
plt.figure(figsize=(10, 6))
plt.plot(BTC_date, BTC_price, label = 'Bitcoin', color='g')
plt.plot(gold_date, gold_price, label = 'Gold', color='b')
plt.legend(loc=2, fontsize=18)
plt.xlabel('year', fontsize=18)
plt.ylabel('price(USD)', fontsize=18)
plt.tick_params(labelsize=18)
plt.savefig("BTC_gold_1.png")

できあがったグラフがこちらです。

図3 ビットコインと金の価格チャート

ビットコインの価格が高すぎて、Y軸を共有すると金が直線にしか見えないです。

ビットコインの価格は第2軸で表示します。

#show a price chart
fig, ax1 = plt.subplots(figsize=(9, 6))
plt.plot(gold_date, gold_price, label = 'Gold', color='b')
plt.legend(loc=2, fontsize=18)
plt.xlabel('year', fontsize=18)
plt.ylabel('Gold price(USD)', fontsize=18)
plt.tick_params(labelsize=18)
ax2 = ax1.twinx()
plt.plot(BTC_date, BTC_price, label = 'Bitcoin', color='g')
plt.legend(loc=6, fontsize=18)
plt.ylabel('BTC price(USD)', fontsize=18)
plt.tick_params(labelsize=18)
plt.savefig("BTC_gold_2.png")

できあがったグラフはこちらです。

図4 ビットコインと金の価格チャート

2019年以前はあまり相関がなさそうですが、それ以降は値動きの傾向が似ているようにも見えます。

相関があるのでしょうか??

調べてみましょう。

プログラミングで相関を調べる

ビットコインと金の対数収益率を計算して、相関を調べます。

#calcurate
BTC_rets = np.log(BTC_price / BTC_price.shift(1))
gold_rets = np.log(gold_price / gold_price.shift(1))

#make a DataFrame
rets = pd.DataFrame()
rets['BTC'] = BTC_rets
rets['gold'] = gold_rets
rets.dropna(inplace=True)

#plot a scatter matrix
pd.plotting.scatter_matrix(rets,
                          alpha=0.2,
                          diagonal='hist',
                          hist_kwds={'bins':35},
                          figsize=(10,6));
plt.savefig("BTC_gold_3.png")

できあがったグラフがこちらです。

図5 散布図マトリックス

うーん、すごく微妙です。

最小二乗法による回帰分析も行います。

#OLS analysis
reg = np.polyfit(rets['BTC'], rets['gold'], deg=1)

#plot a scatter 
plt.figure(figsize=(10, 6))
plt.scatter(rets['BTC'], rets['gold'], c=rets.index, cmap='coolwarm', marker='o')
plt.plot(rets['BTC'], np.polyval(reg, rets['BTC']), 'r', lw=2)
plt.xlabel('BTC price(USD)')
plt.ylabel('gold price(USD)')
plt.savefig("BTC_gold_4.png")

できあがったグラフがこちらです。

図6 散布図

プロットした点は、青色から赤色の順に2014年から2020年のデータを示しています。

ご覧の通り、ビットコインと金は相関がなさそうです。

相関尺度もかなり低いです。

図7 相関尺度

ここから言えるのは、分散投資の観点で、ビットコインと金の組み合わせはおすすめです。

分散投資なのに、値動きが似た商品を持っていてもしょうがないでしょう。

また、別の記事で書いたように、ビットコインは株式とも相関が低いです。

分散投資の選択肢として、ビットコインはアリだと思います。

まとめ

今回はビットコインと金の相関を調べました。

分散投資の選択肢として、ビットコインはおすすめです。

ここまで読んでくださりありがとうございました。^^

-お金の健康