ボラティリティ クラスタリング(Volatility Clustering)について:Google ColabのPythonでの相場環境分析

スポンサーリンク
投資

マーケットの値動きは不安定(ボラタイル)な時期と、安定(ボラティリティが低い)時期が比較的固まって現れます。これをクボラティリティ クラスタリングといいます。もう少し簡単な表現をすれば、動くときは”大きく動く時期”が固まってあらわれ、動かない時期は”あまり動かな時期”が固まって出現します。ボラティリティの出現は均等でなく、塊として可視化されます。これは地震が起こったのちに余震がしばらく発生するようなものと考えていただければイメージしやすいと思います。

現状(下記グラフの右端)を考えると今はボラティリティが上昇している時期と見てよいようです。

株価の変化率や収益率自体には自己相関は観測されませんが、一般的に言って、株価の収益率の2乗には自己相関が見られるといわれています。

そういった物を現状の株価で確認したり、Pythonを用いて検証してみたいと思います。

目標とすること

S&P500のボラティリティと変化率と、その出現傾向を調べる

使用するツール

使用するツールはGoogle Colaboratoryのpythonを使いますので、無料で、簡単に行うことができます。Google Colaboratoryについては以前書いた記事をご参照いただければと思います。

実際のコードとやっていること

実際のコードは以下の通りです。

!pip install yfinance --upgrade --no-cache-dir

import yfinance as yf
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import datetime

start_D="2000-1-1"
end_D=datetime.date.today()
codelist1 = ["^GSPC"]

data2 = yf.download(codelist1, start=start_D, end=end_D)

display(data2.dropna().head(1).append(data2.dropna().tail(1)))
data2["Adj Close"].plot()
plt.show()

今回はデータは2000年以降の物を利用することにしました。また始値:高値:安値:終値:分割など調整後の終値:出来高などが取得できているようです。

ボラティリティとして高値と安値の差を前日終値との比較で行います。

収益率、変化率は調整後の終値(Adj Close)を利用します。

df=data2["2000/1/1":].copy()
df["HL"]=(df["High"]-df["Low"])/df["Adj Close"].shift()
df["pct"]=df["Adj Close"].pct_change()

plt.rcParams["font.size"] = 18
import matplotlib.dates as mdates
yyyymm=mdates.DateFormatter('%y/%m')
fig, (ax1,ax2,ax3)= plt.subplots(3,1,figsize=(10,9), 
                                      gridspec_kw = {'height_ratios':[1,1,1]},sharex=True)
ax1.plot(df.index,df["HL"],label="HL")
ax1.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=18)  
ax1.grid(True)
ax2.plot(df.index,df["pct"],label="pct")
ax2.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=18)  
ax2.grid(True)
ax3.plot(df.index,df["pct"].cumsum(),label="cumsum")
ax3.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=18)  
ax3.grid(True)

Zone1_start = datetime.datetime(2007,10,1)
Zone1_end = datetime.datetime(2009,3,1)
ax1.axvspan(Zone1_start,Zone1_end, color = "gray", alpha=0.3)
ax2.axvspan(Zone1_start,Zone1_end, color = "gray", alpha=0.3)
ax3.axvspan(Zone1_start,Zone1_end, color = "gray", alpha=0.3)

いわゆるリーマンショックと言われる期間を色付けしてありますが、当日高値安値の変化率が大きくなっていることが分かると思います。また、その時期は前日比での変化率も大きくなっていることも見て取れます。さらに言えば、その時期は最下段のS&P500は大きな下落の時期であったことも見て取れます。

逆に2012年から2016年間などは比較的穏やかな値幅で推移した時は、最下段のS&P500も比較的安定的な上昇を示しているように思えます。

今後指数が上昇するのか下落するのは予想するのは難しいですが、しばらくはボラティリティが大きな時期は続くような可能性は感じています。

日々の値幅が落ち着くような状況になるようであれば、買い出動、というようなことになるのかと思います。

有名な現象ではありますが、最近取り上げられることが少ないように感じましたので、まとめてみました。

ディスクレーマー

投資に関する免責事項情報の提供・作業代行を目的としており、投資勧誘を目的とするものではありません。

投資に関する記事をご紹介します。

Python高速化! for文は遅いので、”これ”を使うと30倍早いですよ!【Google ColabのPython:コピペで動く!】
【コピペで動く!】Pythonで1.5GBのcsvファイル読み込み高速化:1分5秒⇒4秒程度 DASK , pickle (Pythonコードあり)
【コピペで動く!】日本株、米国株で個別銘柄ベータ値(β値)を簡単に調べる方法 Python 米国株 Webサービス&コード 【Google Colabで違いをみつけろ!】
【コピペで動く!】20行で資産運用モデル作成 Google ColabのPythonで 米国株の株価を取得し、グラフ・チャートを表示
【コピペで動く!】Google ColabでPython を用いての 効率的フロンティア と ポートフォリオの最適化 Efficient Frontier & Portfolio Optimization with Python [Part 2/2]
過去50年間のS&P500の季節性の値動きから負けにくいポジション構築はできるのか考える・大統領選挙のアノマリー対応!【コピペで動く!】Google ColabのPythonで自分で調べてみよう!
【コピペで動く!】レイ・ダリオ推奨「オール・ウェザー戦略」をETFで構築するには? ETFの手軽さとそのパフォーマンスの高さとは!【違いをみつけろ!】
曜日による米国株指数(S&P500)のパフォーマンスに違いはあるのか?有利なポジション取りはできるのか?【Google ColabのPython:コピペで動く!】Twitterで出てくる知見は本当か自分で調べてみよう。
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
自動化・効率化でなにができるのか!Google FinanceやYahoo Financeからデータ取得して年初来パフォーマンスや週次騰落率のファクターチェック
TradingViewを使ってポートフォリオ運用(複数銘柄運用) 米国株 2019/10/01に10万ドル(約1000万円)投資していたらどうなった?TradingViewのミニチャートウィジェットで簡単確認!
米国債のゼロクーポン債STRIPSについてのメモ
米国株のティッカー(Symbol)のスクレイピングによる取得、APIによるヒストリカルデータやファンダメンタルズデータ取得について【コピペで動く!】Python,Quandl,無料枠あり

コメント

タイトルとURLをコピーしました