python初心者がVIX指数(恐怖指数)を用いて適切なS&P500の投資タイミングを探してみた件

VIX指数をご存じでしょうか

VIX指数とは恐怖指数とも言い、投資家の心理状態を数値で表したものです。

本記事ではVIX指数がS&P500の投資タイミングの指標となるか検討を行います。

インデックス投資家にとって銘柄選定後重要となるのはいつ投資をするかのタイミングです。

まず過去のデータからVIX指数とS&P500 の関係を調査し、VIX指数が高い時に投資すればよいリターンが得られると考え、下記の検証を行います。

  • 仮説 ・・・ VIX指数が高い時に投資すればよいリターンが得られるのではないか。
  • 検証 ・・・ pythonを用いて過去のVIX指数とS&P500の値動きの関係を調査
    VIX指数とS&P500の投資リターンの関係を調査
  • 結論 ・・・ VIX指数が30以上の際に投資するとリターンが+になる確率がかなり高い

検討の結果、投資タイミングの基準にVIX指数はなりえると私は結論を出しました。

(投資は自己責任でお願いいたします)

本記事をおすすめする方
  • インデックス投資を始め一括投資のタイミングが分からない方
  • VIX指数とは何か知りたい方
  • VIX指数とS&P500の関係を知りたい方

VIX指数とは

VIX指数とはVolatility Index(ボラティリティ・インデックス)の略でS&P500市場に対する投資家の心理状態を数値で表したものです。

別名「恐怖指数」とも言います。

一般的に、数値が高いほど、投資家が先行きに対して不安を感じているとされます。

例えばVIXは次のように変動します。

  • S&P500の値動きが激しくなると予想する投資家が増える ⇒ VIX指数が高くなる
  • S&P500の値動きが安定すると予想する投資家が増える  ⇒ VIX指数が下がる

通常VIX指数は10~20の間で値動きしていますが、世界的なニュースが駆け巡り、市場が警戒状態になるとVIX指数は30を超えます。

例えば、世界的な危機の際には下記の値を示しました。

  • 2008年リーマンショック  VIX指数 89.53(過去最高) 
  • 2011年ギリシャ通貨危機 VIX指数 46.88
  • 2020年コロナショック   VIX指数 85.47

たけ
たけ

VIX指数が30を超えると市場が警戒状態にあることを示しています。

本記事ではpythonを用いて市場の心理状態を表しているVIX指数とS&P500の値動きを比較し、VIX指数を用いた投資タイミングの検討を行います。

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

本記事ではAnaconda環境でJupyter Notebookを用いて検証を行いました。

python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas_datareader.data as web
import datetime
%matplotlib inline

データのダウンロード

python
#取得するデータの開始日と最終日を指定
start = datetime.datetime(1990, 1, 1)
end = datetime.datetime(2022, 5, 1)

#S&P500のデータを取得
sp500 = web.DataReader('^GSPC', 'yahoo', start, end)['Adj Close']

#VIXのデータを取得
vix = web.DataReader('^VIX','yahoo', start, end)['Adj Close']

#取得したデータを1つのデータフレームにまとめる
df = pd.DataFrame()
df['S&P500'] = sp500
df['VIX'] = vix
df.dropna(inplace = True)
たけ
たけ

本検証で用いるVIX指数とS&P500のデータ期間は1980年1月~2022年5月としています。

VIX指数の分布

python
# VIXの分布
sns.set(rc = {'figure.figsize':(10,6)})
sns.histplot(df['VIX'], stat='probability',kde=False)

実行結果

たけ
たけ

VIX指数は10~25になる頻度が高いことがわかります。

VIX指数とS&P500の値動きの比較

python
plt.subplot(2,1,1)
plt.plot(df['S&P500'])
 
plt.subplot(2,1,2)
plt.plot(df['VIX'])

実行結果

たけ
たけ

VIX指数が高くなるタイミングでS&P500の株価も下がることが分かります。

VIX指数が高くなると投資家心理が悪くなり、株価が下落することが想像できます。

VIX指数が30を超えたときのS&P500の値動きを調査

さらにVIX指数とS&P500の値動きの関係が分かりやすいように、グラフを重ね、VIX指数が30を超えて高くなるタイミングを緑にして調査を行いました

python
# 確認したいVIXの値
vix_num=30

# グラフ領域設定
fig, ax1 = plt.subplots(figsize=(20, 6),facecolor="white")

# ax1とax2を関連させる
ax2 = ax1.twinx()
# 1つ目のデータをグラフ化
ax1.plot(df['S&P500'].dropna(),color="red", label=['S&P500'],linewidth=2,alpha=0.5)
# 2つ目のデータをグラフ化
ax2.plot(df['VIX'].dropna(),color="blue", label=['VIX'],linewidth=2,alpha=0.5)

# 凡例
handler1, label1 = ax1.get_legend_handles_labels()
handler2, label2 = ax2.get_legend_handles_labels()
# 凡例をまとめて出力
ax1.legend(handler1 + handler2, label1 + label2, loc=2, borderaxespad=0.5)

# 軸を45度傾け、軸を対数、軸の最大・最小値
ax1.tick_params(axis='x', labelrotation=45)

ax1.set_ylim(df['S&P500'].min()*0.5,df['S&P500'].max()*1.0)
ax2.set_ylim(df['VIX'].min(),df['VIX'].max()*3.0)

# VIX がvix_num以上のライン
ax2.axhline(y=vix_num, color="gray")

# 対象期間の塗りつぶし
dfd=df[df['VIX'] >= vix_num]
for item in dfd.index:
  ax1.axvline(item,color='limegreen',linewidth=1 ,alpha=0.1)

plt.show()

実行結果

たけ
たけ

暴落のタイミングとVIX指数が高くなるタイミングがきれいに一致していることが分かります。

VIX指数から株式の暴落のタイミングの目安となり、一括購入の良いタイミングになりそうです。

VIX指数とS&P500の相関関係

参考にVIX指数とS&P500の値動きの相関関係を調査します。

python
df.corr() # 相関関係

実行結果

-0.038663

たけ
たけ

ほとんど相関関係はありません。

VIX指数とS&P500の100日後リターンの調査

VIX指数とS&P500の投資リターンを調査します。

python
#グラフを作る関数
def chart(days):
    dfd = df.copy()
    dfd['Return'] = (dfd['S&P500'].shift(-days) /  dfd['S&P500'] -1)   # days後と本日との利回りの計算
    dfd.dropna(inplace = True)   # 欠損値の削除

    dfd['VIX_c'] = pd.cut(dfd['VIX'], bins=[-1,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75], labels=['0','5','10','15','20','25','30','35','40','45','50','55','60','65','70'])
    
    
    # グラフの描写
    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")
    plt.grid(True)
    

    fig = plt.figure(figsize = (8,4))
    fig = sns.boxplot(x='VIX_c', y='Return', data=dfd, showfliers=False)
    fig.set_xlabel('VIX')
    fig.set_ylabel(str(days)+' days Return')


#何日間のリターンを計算するかを指定して関数実行
chart(100)

実行結果

横軸はVIX指数、縦軸は各VIX指数時に投資した場合の100営業日(約半年)後のS&P500のリターンです。

ばらつきはありますが、VIX指数が高くなるほど、100日後のリターンは高くなる傾向があります。

更にVIX指数を5間隔で区切り、箱ひげ図を示します。

たけ
たけ

VIX指数が高くなるほどリターンが高くなる傾向がありますが、VIX指数が50以上ではばらつきが大きいです。

VIX指数とS&P500の200日後リターンの調査

さらに投資期間を延ばし200営業日(約1年)後の投資リターンとVIX指数の関係を調査します。

python
chart(200) 

実行結果

たけ
たけ

200日になるとVIX指数が高くなるほどリターンが高くなる傾向がはっきりしてきます。

VIX指数とS&P500の300日後リターンの調査

さらに投資期間を延ばし300日後のリターンを調査します。

python
chart(300) 

実行結果

たけ
たけ

本結果から下記のことが分かります。

  • VIX指数が30以上・・・VIX指数が高いほど投資リターンが+になる確率が高い
  • VIX指数が20~30・・・リターンのばらつきが大きい。投資タイミングとして不適切
  • VIX指数が20未満・・・リターンが+になる確率が高い

まとめ

VIX指数とS&P500の値動きの関係について調査しました。

本記事の結論はこちらです。

  • VIX指数が高い時、S&P500は暴落する可能性が高い
  • VIX指数が30以上の場合20未満場合は一括投資するタイミングに良い。
  • VIX指数が20~30の間の場合は投資タイミングとして不向き。

結論、VIX指数を投資タイミングの指標として適している

(投資はあくまで自己責任)

一緒に勉強して豊かな人生を歩みましょう。

本ブログではインデックス投資による資産形成をお勧めしています。

インデックス投資については下記の記事を参考にしてください。

また、資産形成を始める際は下記の記事の5ステップを行うことをお勧めします。

一緒に豊かな生活を送りましょう。

最後に、私が投資を始める時に参考にした本を紹介します。
どれも良い本ですので、投資を始める際はぜひ一読してみてください。

毎月の私の資産額も公開しています。

毎月の資産額の推移も把握できますので、興味のある方はご覧ください。

■ 気に入ったらクリックしてね!

にほんブログ村 投資ブログへ
にほんブログ村

参考記事

本記事は下記の記事を参考に執筆しました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA