どうも、月見(@Suzuka14144156)です。
今回は、2銘柄の相関係数の時系列データを求める方法を解説します。
- 二つの銘柄の連動性を調べたいけどやり方がわからない
この記事のゴール
- こんなチャートをPythonで表示できるようにします!
- 例えば、ナスダックとビットコインの連動性がどうか調べたいときに使います。
相関係数とは?
- 相関係数とは、2 種類のデータの関係を示す指標
なので、二つのデータが連動しているのかしていないのか?を調べるのに使います。
正の相関
二つのデータが右肩上がりのグラフを正の相関と呼ぶ。
負の相関
二つのデータが右肩下がりのグラフを負の相関と呼ぶ。
環境の構築
今回は、Jupyte Labを用います。
Juptrer Labのインストール
インストール方法は以下2種類ある。
- どちらでもOKです
ただ、Anacondaをインストールする方が時間がかかるのでお急ぎの方は、「JupyterLabを直接インストール」がオススメ。
Anacondaをインストール
以下の記事を参考にしてください。
Python Anacondaとは?|インストール〜Jupyter Notebookの立ち上げ
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' )
なので、取得したいデータの日付より一日進めた日付を入力開始日に設定しましょう。
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()
実行すると以下のようなグラフが得られます。
以下を実行して両者のグラフを確認します。
このコードでは、規格化して見やすくしています。
- ここでは、0~1の値に変換することとします
crypto_data['Adj Close'].apply(lambda x: (x-x.min())/(x.max() - x.min())).plot()
- 両データが0~1の値に変換されています
両者のデータを比較すると、負の相関の部分では、オレンジが下がっているのに対し、ブルーの線は、平行だったりと相関が崩れていることがわかりますね。
Pythonでファイナンスのデータ分析の勉強方法
本
私は、以下の本で勉強しました。
かなり詳しく書かれており、とてもオススメの本です。
Udemy
Udemyはオンライン口座です。
一度購入すれば、ずっと閲覧できるのでオススメです。
私の記事
私のブログでも解説していますので参考にしてみてください。
【Python x 仮想通貨】分析方法のまとめ(テクニカル分析など)
まとめ
今回は、2銘柄の相関係数の時系列データを求める方法を解説しました。
私のブログではほかにも、仮想通貨の自動トレードの方法などを解説しているのでぜひ参考にしてみてください。
無料で閲覧可能で、コードをコピペして動かすことができます。
【Python|cctx】ビットコイン自動取引ツールの作成方法まとめ
コメント