目的
今回は、Pythonによる株価分析ということで、
VIX指数(恐怖指数)のグラフを作成していきたいと思います。
『mplfinance』を使用することにより簡単にチャートを作成することができます。
また、恐怖指数をよりわかりやすくするために、下記の指標についても、グラフ化していきます。
- VVIX
- VVIX/VIX
VIX指数とは?
VIX指数 Volatility Index
S&P500を対象とするオプション取引の30日間のボラティリティ(値動きの度合い)をもとにした指数で、短期的なボラティリティに対する投資家心理を反映する数値です。
「恐怖指数 (investor fear gauge) 」とも呼ばれています。
- S&P500の値動きが激しくなると予測する投資家が増える→VIX指数は上昇
- S&P500が安定すると予測する投資家が増える→VIX指数は下落
ということになります。
VIX指数は、0〜100の数字(パーセント)で表されます。
- 相場が安定している時は、20前後で推移
- コロナショック時には、80以上に
下記のサイトに詳しく書かれていますので、参考にしてみて下さい。
VVIX指数とは?
VVIX指数とは、VIX指数の30日後の予想ボラティリティです。
これは、VIX指数のボラティリティの変動率を示すもので、
簡単に言えば、VIXのVIXという事になります。
VIX指数の30日後の予想ボラティリティで、
VIX指数の予想価格が上がると、VVIX指数が高くなります。
VVIX/VIXとは?
単純にVIXとVVIXを見ていても分かりづらいので、VVIX/VIXという合成指標が使用されます。
- アメリカ株(S&P500)と相関が高く、株に先行して動く
という特徴があります。
実行結果
ソースコード
下記のソースコードをコピーすることで、簡単にチャートを作成することができます。
準備&株価の取得
ライブラリインストール
インストールするライブラリは、下記の3つです。
pip install pandas
pip install pandas_datareader
pip install mplfinance
ライブラリインポート
各種ライブラリをインポートします。
#データ構造を作成するライブラリ
import pandas as pd
#日付を指定するライブラリ
import datetime as dt
#経済データや金融商品の価格データを取得できるライブラリ
import pandas_datareader.data as web
#グラフを作成するライブラリ
import mplfinance as mpf
株価の取得方法
関数の作成
下記の関数を使用することで、株価の取得を行います。
設定するのは下記の2つです。
・株式銘柄名
・取得期間(〜最新日)
def df_stock(stock_name,day):
end = dt.date.today()
start = end - dt.timedelta(days=day)
stock = web.DataReader(stock_name,'yahoo',start,end)
df_stock = stock.sort_index(ascending=True)
return df_stock
"""
最新の日付から設定日数までの株価を表示する関数
stock_name :株式銘柄 day:表示日数
"""
pandas_datareadeとは?
pandas_datareaderはPythonのライブラリで、
経済データや金融商品の価格データが取ることができます。
yahooファイナンス, fred, stooqの紹介
pandas_datareaderには、yahooファイナンスを使用します。
今回は、VIX指数とVVIX指数の取得が必要であり、他の「fred」や「stooq」からは取得不可能だったため、選択肢しました。
普段の銘柄であれば、Stooqやfredを使用することをオススメします。
上記のコードの’yahoo’の箇所を変更することで取得可能になります。
株式銘柄名の参考までに公式サイトを下記に添付します。
関数の作成_終値
下記、終値のみを取得する関数です。
def df_stock_close(stock_name,day):
end = dt.date.today()
start = end - dt.timedelta(days=day)
stock = web.DataReader(stock_name,'yahoo',start,end)
df_stock = stock.Close.sort_index(ascending=True)
return df_stock
"""
最新の日付から設定日数までの株価を表示する関数
stock_name :株式銘柄 day:表示日数
"""
具体的な株価の取得
S&P500とVIX取得します。
mplfinanceでキャンドルチャートを作成するときは、
Open, High, Low, Close, Volumeが取得できるpandas_datareadeと相性が良いです。
# S&P500取得
df_sp500 = df_stock('^GSPC',150)
# VIX取得
df_index_VIX = df_stock('^VIX',150)
下記は、終値(Close)を取得します。
# 取得リスト
ticker = ['^VIX','^VVIX']
# VIX, VVIX取得_終値
df_index_data = df_stock_close(ticker,150)
# VIX/VVIX算出
df_index_data['VVIX/VIX'] = df_index_data['^VVIX'] / df_index_data['^VIX']
グラフ作成
VIX・VVIX・VIX/VVIXの関係
def index(df1, df2, df3):
#グラフ設定
add_plot = [
mpf.make_addplot(df2, color='green', secondary_y=False),
mpf.make_addplot(df3, color='blue',panel=1)
]
#キャンドルチャートの作成
mpf.plot(df1, type='candle', style='yahoo', addplot=add_plot)
"""
グラフ表示
df1:キャンドルチャート
df2:折れ線グラフ
df3:折れ線グラフ_別枠
"""
index(df_index_VIX, df_index_data['^VVIX'], df_index_data['VVIX/VIX'])
下記のグラフを見ることで、
VIX・VVIX・VIX/VVIXの関係が、理解できると思います。
S&P500とVIX/VVIXの関係
def VVIX_VIX(df1, df2):
#グラフ設定
add_plot = [
mpf.make_addplot(df2, color='blue', secondary_y=True),
]
#キャンドルチャートの作成
mpf.plot(df1, type='candle', style='yahoo', addplot=add_plot)
"""
グラフ表示
df1:キャンドルチャート
df2:折れ線グラフ
"""
VVIX_VIX(df_sp500, df_index_data['VVIX/VIX'])
VVIX/VIXは、S&P500の先行指数になるということが、
下記のグラフを見ることで確認できると思います。
参考にした本
株価分析の方法だけでなく、
投資について、わかりやすく書かれているので、大変参考になると思います。
電子書籍の方が半額で購入できるので、そちらをオススメします。