ボラティリティ クラスタリング(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コードあり)
デコピコミンが全国(47都道府県)で、どの施設に出てくるか地図(Google Maps)で確認!!【ピクミン ブルーム(Pikmin Bloom)】
【コピペで動く!】レイ・ダリオ推奨「オール・ウェザー戦略」をETFで構築するには? ETFの手軽さとそのパフォーマンスの高さとは!【違いをみつけろ!】
Windows10で機械学習環境チェック CPU/GPUでTensorflowの作業時間はどのくらい違うのか、Google Colabとも比較してみた。(CUDA Toolkit,cuDNN)
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
【コピペで動く!】Google ColabでPython を用いての 効率的フロンティア と ポートフォリオの最適化 Efficient Frontier & Portfolio Optimization with Python [Part 2/2]
【コピペで動く!】20行で資産運用モデル作成 Google ColabのPythonで 米国株の株価を取得し、グラフ・チャートを表示
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
米国債のゼロクーポン債STRIPSについてのメモ
ConoHa WINGレンタルサーバーでPython! Webアプリcgiを動かす手順を紹介!3つの例あり【コピペで動く!】
株価時系列データを分析する上で正規化を行う事の重要性について紹介する【違いをみつけろ!】
Google Analytics にPython APIで接続してみた話【コピペで動く!】
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
Google Data Portalを使ってWeb上のオープンデータを使って簡単に情報を可視化しようという話

コメント

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