pandasを使ってビットコイン価格と日経平均株価の移動相関を求めた
ynakayamaさんのキータ記事を読む
とても分かりやすくて勉強になります。記事内で日経平均株価とある銘柄の移動相関を求める方法が書かれており、ビットコイン価格と日経平均株価の移動相関を見てみたい! と思いやってみました。
まずは日経平均とシャープ株の相関を見てみる
株価データ取得
ynakayamaさんが作られた株価データ取得スクリプトです。以下は2015年9月1日を開始日として、日経平均、トヨタ、シャープの株価データを取得しています。
$python jpstock.py 1330 2015-09-01 $python jpstock.py 7203 2015-09-01 $python jpstock.py 6753 2015-09-01
html5libが無いと怒られたらpipインストールしてください。
ImportError: html5lib not found, please install it $pip install html5lib
取得したデータは以下です。(stock_1330.csv)
Date,Open,High,Low,Close,Volume,Adj Close 2015-09-01,19150.0,19180.0,18580.0,18580.0,177440.0,18580.0 2015-09-02,18270.0,18880.0,18240.0,18500.0,176950.0,18500.0 2015-09-03,18790.0,18890.0,18560.0,18590.0,127990.0,18590.0
移動相関取得処理
ynakayamaさんのキータ記事からです..
import pandas as pd def rolling_corr_with_N225(stock, window=5): d1 = pd.read_csv("".join(["stock_", stock, ".csv"]), index_col=0, parse_dates=True) d2 = pd.read_csv("stock_1330.csv", index_col=0, parse_dates=True) s1 = d1.asfreq('B')['Adj Close'].pct_change().dropna() s2 = d2.asfreq('B')['Adj Close'].pct_change().dropna() rolling_corr = pd.rolling_corr(s1, s2, window).dropna() return rolling_corr
実行結果
トヨタと日経平均株価の移動相関
import matplotlib.pyplot as plt roll_cor = rolling_corr_with_N225('7203', 5) plt.plot(roll_cor) plt.show()
シャープと日経平均株価の移動相関
import matplotlib.pyplot as plt roll_cor = rolling_corr_with_N225('6753', 5) plt.plot(roll_cor) plt.show()
トヨタに比べてシャープは相関が低いのが分かります。
ビットコイン価格と日経平均株価の相関を見てみる
ビットコイン価格データ取得
Bitcoin Market Price USDから取得したデータをクリーニングして、stock_btc.csvという名前で保存しました。
stock_btc.csv
Date,Adj Close 2015-09-01,228.32 2015-09-02,230.68 2015-09-03,227.42
実行結果
import matplotlib.pyplot as plt roll_cor = rolling_corr_with_N225('btc', 5) plt.plot(roll_cor) plt.show()
シャープよりも相関が低いですね。相関無しの状態ということでしょうか..
まとめ
簡単に移動相関がグラフ化できるので他のペアでも試してみたくなりました(例えばUSDとBTCの相関などいろいろ)。またynakayamaさんの記事にあるような価格予測も今後やってみます。