未分類

Pythonによる株価分析_VIX指数(恐怖指数)編

目的

今回は、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’の箇所を変更することで取得可能になります。

株式銘柄名の参考までに公式サイトを下記に添付します。

https://finance.yahoo.com/
https://fred.stlouisfed.org/
https://stooq.pl/

関数の作成_終値

下記、終値のみを取得する関数です。

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の先行指数になるということが、
下記のグラフを見ることで確認できると思います。

参考にした本

株価分析の方法だけでなく、
投資について、わかりやすく書かれているので、大変参考になると思います。
電子書籍の方が半額で購入できるので、そちらをオススメします。




おすすめのPython学習方法

ABOUT ME
チェルシー
【プロフィール】  年齢:30代前半  性別:オス 【主な職歴】  メーカー勤務  製品設計開発_メカ設計:7年  開発業務自動化:1年半 元々、メカ設計エンジニアとして、製品設計開発に携わっていました。新しいスキルを身につけたいと独学でPythonを勉強し始め、現在、本業でソフトエンジニアとして働いています。具体的には、Pythonを使った製品評価業務の自動化を推進しています。 また、製品市場データ分析業務など可視化なども実施しています。 【2023年度目標】 1. 副業収入:月5,000円 2. 塩漬けにしていたブログをChatGPTなどを活用して執筆の効率化し、1年半前に開設した本サイトを改善する 3. 定期的に株式投資おすすめ成長株の紹介記事を投稿 4. 自作中の米国成長株の分析ツールのコーディング紹介 5. 株式投資の本で学んだ情報をアウトプットする