CryptocurrencyPython

【Python】2銘柄の相関係数の時系列データを求める方法

Cryptocurrency

どうも、月見(@Suzuka14144156)です。

今回は、2銘柄の相関係数の時系列データを求める方法を解説します。

解決するお悩み
  • 二つの銘柄の連動性を調べたいけどやり方がわからない

この記事のゴール

  • こんなチャートをPythonで表示できるようにします!
月見
月見
  • 例えば、ナスダックとビットコインの連動性がどうか調べたいときに使います。

相関係数とは?

  • 相関係数とは、2 種類のデータの関係を示す指標

なので、二つのデータが連動しているのかしていないのか?を調べるのに使います。

  • 相関係数高い(1に近い):正の相関
  • 相関係数が0:相関なし
  • 相関係数が低い(-1に近い):負の相関

正の相関

二つのデータが右肩上がりのグラフを正の相関と呼ぶ。

負の相関

二つのデータが右肩下がりのグラフを負の相関と呼ぶ。

環境の構築

今回は、Jupyte Labを用います。

Juptrer Labのインストール

インストール方法は以下2種類ある。

  1. Anacondaをインストール
  2. JupyterLabを直接インストール
月見
月見
  • どちらでもOKです

ただ、Anacondaをインストールする方が時間がかかるのでお急ぎの方は、「JupyterLabを直接インストール」がオススメ。

Anacondaをインストール

以下の記事を参考にしてください。

JupyterLabを直接インストール

コマンドプロンプトから、以下のコードを入力ください。

pip install jupyterlab

JupyterLabの起動

コマンドプロンプトから、以下のコードを入力ください。

jupyterlab

以下赤枠のアイコンをクリック。

これで起動します。

ライブラリのインストール

使用するライブラリ
  • pandas:データ処理
  • pandas_data:仮想通貨のデータ取得
  • yfinance:Yahoo Financeからデータを取得
  • matplotlib:グラフ描画

pandasのインストール

コマンドプロンプトから、以下のコードを入力ください。

pip install pandas

pandas_dataのインストール

コマンドプロンプトから、以下のコードを入力ください。

pip install pandas_datareader

yfinanceのインストール

コマンドプロンプトから、以下のコードを入力ください。

pip install yfinance

matplotlibのインストール

コマンドプロンプトから、以下のコードを入力ください。

pip install matplotlib

仮想通貨のチャートを取得

以下の二つを例にしてみる。

  • BTC-USD
  • ^IXIC(ナスダック総合指数)

この両者には、正の相関があることが知られています

月見
月見
  • その相関がときどき崩れることがある
  • それを検知して、市場で何が起きているのか?を分析したりするのに用います

2022年の1月1日~現在までのデータを取得することとします。

早速コードを共有します。

import pandas as pd  
from pandas_datareader import data as pdr 
import datetime
import yfinance as yf
import matplotlib.pyplot as plt

#BTCのチャートを取得
tickers = ['BTC-USD','^IXIC'] #GSPC

#取得開始日を入力
start = "2022-01-02"

#取得終了日を入力
end = datetime.date.today()

#Yahoofinanceから取得するように設定
yf.pdr_override()

crypto_data = pdr.get_data_yahoo(tickers, start, end).dropna(how = 'any' )

なぜか、入力した取得開始日より、1日前からデータ取得される

なので、取得したいデータの日付より一日進めた日付を入力開始日に設定しましょう。

crypto_data

BTC-USDと^IXIC(ナスダック総合指数)のデータが取得できていることがわかります。

相関係数のデータを求める

ここでは、Adj Closeのデータを用います。

以下に示すように10日分の両者のデータから一つの相関係数を求めます。

次の相関係数は、1日分ずらし、10日分のデータから一つの相関係数を求めます。

これを繰り返し、相関係数の時系列データを算出する

コードにすると以下です。

#グラフのサイズ
plt.rcParams['figure.figsize'] = (16.0, 6.0)

#相関係数の算出
label_1 = crypto_data['Adj Close'].columns[0]
label_2 = crypto_data['Adj Close'].columns[1]
df = crypto_data['Adj Close'][label_1].rolling(window = 10).corr(crypto_data['Adj Close'][label_2])
df.plot()
  • window = 10 が10日分のデータで相関係数を求めるという処理を表す
  • この数字を任意の数字にすることで、任意の区間の相関係数を求めることができる

実行すると以下のようなグラフが得られます。

以下を実行して両者のグラフを確認します。

このコードでは、規格化して見やすくしています。

規格化とは?
  • ここでは、0~1の値に変換することとします
crypto_data['Adj Close'].apply(lambda x: (x-x.min())/(x.max() - x.min())).plot()
月見
月見
  • 両データが0~1の値に変換されています

両者のデータを比較すると、負の相関の部分では、オレンジが下がっているのに対し、ブルーの線は、平行だったりと相関が崩れていることがわかりますね。

Pythonでファイナンスのデータ分析の勉強方法

私は、以下の本で勉強しました。

かなり詳しく書かれており、とてもオススメの本です。

Udemy

Udemyはオンライン口座です。

一度購入すれば、ずっと閲覧できるのでオススメです。

【世界で8万人が受講:Python for Finance】Pythonを使って学ぶ現代ファイナンス理論と実践
ポートフォリオ理論、コーポレートファイナンス、資本資産評価モデル(CAPM)、デリバティブの値決め、モンテカルロシミュレーションといった内容を中心に、Pwcなどで活躍した講師が理論と実践に基づき解説します。

私の記事

私のブログでも解説していますので参考にしてみてください。

まとめ

今回は、2銘柄の相関係数の時系列データを求める方法を解説しました。

私のブログではほかにも、仮想通貨の自動トレードの方法などを解説しているのでぜひ参考にしてみてください。

無料で閲覧可能で、コードをコピペして動かすことができます。

コメント

タイトルとURLをコピーしました