twitterで下記チャートを紹介しました。
このチャートは、
横軸はVIX(恐怖指数)、縦軸はその後100日(約半年)騰落率。VIXの水準とその後の騰落率には正の相関がありランダムウォークではない。今のVIXが40程度なので、過去ケースから見ると半年後のリターンがマイナスになることはなさそう(投資は自己責任!)
ということを意味しています。
このチャートは、Pythonのpandas_datareader
を使ってセントルイス連銀ウェブサイトからVIX(恐怖指数)とS&P500株価指数を取得して作りました。
ここにそのコードを保存しておきます。
まずライブラリの読み込み。
importpandasaspdimportnumpyasnpimportpandas_datareader.dataaswebimportdatetimeimportmatplotlib.pyplotaspltimportseabornassnssns.set()frompandas.plottingimportregister_matplotlib_convertersregister_matplotlib_converters()
1.DataReaderでデータを取得
#取得するデータの開始日と最終日を指定
start=datetime.datetime(2010,1,1)end=datetime.datetime(2020,5,1)#S&P500のデータを取得
# 'SP500'がS&P500のティッカーシンボル。
# 'fred'が、データソースとしてセントルイス連銀を指定する。
#あとは開始日と最終日。
eq=web.DataReader('SP500','fred',start,end)#VIXのデータを取得
# 'VIXCLS'がVIXのティッカーシンボル。
vix=web.DataReader('VIXCLS','fred',start,end)#取得したデータを1つのデータフレームにまとめる
df=pd.DataFrame(index=eq.index)df['Equity']=eqdf['VIX']=vixdf.dropna(inplace=True)
セントルイス連銀からは様々な経済・金融データを取得できます。
セントルイス連銀ウェブサイト各データのURLの、一番最後がシンボルティッカーです。
例:VIXの場合は下記アドレスの最後、VIXCLS
となります。
https://fred.stlouisfed.org/series/VIXCLS
2. グラフを作成
#グラフを作る関数
defchart(days):dfd=df.copy()dfd['Return']=(dfd['Equity'].shift(-days)/dfd['Equity']-1)dfd.dropna(inplace=True)plt.figure(figsize=(8,4))plt.scatter(x=dfd['VIX'],y=dfd['Return'],alpha=0.6,c=dfd['VIX'])plt.xlabel('VIX')plt.ylabel(str(days)+' days Return')plt.title('VIX and S&P500 '+str(days)+' days Returns (USD base)')plt.savefig('VIX_SP500rtn',bbox_inches="tight")#何日間のリターンを計算するかを指定して関数実行
chart(100)
↓このグラフが作られます。
plt.scatter(x = dfd['VIX'], y = dfd['Return'], alpha = 0.6, c = dfd['VIX'])
↑このコードのc = dfd['VIX']
によって、VIXの値に応じてグラフ内の点の色を変えて、グラデーション効果を出しています。
おまけ1:VIXチャート
df['VIX'].plot(title='VIX',figsize=(8,4))
おまけ2:SP500チャート
df['Equity'].plot(title='S&P500',figsize=(8,4))
おわりに
DataReaderでは、セントルイス連銀の経済データだけでなく、株価や為替など、様々なデータを取得することができます。詳しくはDataReaderのドキュメントをご参照ください。