日本株や米国株の個別銘柄ベータ値(β値)をWebサービスや、Pythonによる計算で求めることができます。ベータ値(β値) とは株の個別銘柄が市場全体の動きに対してどの程度敏感に反応して変動するかを示す数値で、現代ポートフォリオ理論では非常に重要にされている指標の一つです。
例えば、ある銘柄が指数と全く同じ動きをする場合はベータ値(β値) が1という事になります。
ベータ値(β値) が2の銘柄は市場全体が1%上昇・下落するとその銘柄は2%上昇・下落し、逆にベータ値(β値) が0.5だと、市場全体が1% 上昇・下落 するとその銘柄は0.5% 上昇・下落 するというよう事になります。
実際のPythonの計算では5年の月次の時系列データの60点を利用するローリングモデルでベータ値(β値) を計算します。
本記事は2020年2月11日にnoteに記載したものを再度追記、コードの修正を行ったものになります。
本記事の目的
最近いろんな方面で、ベータを簡単に知りたいのですが、、という質問や、疑問を目にしたので、簡単に調べる方法を備忘録的に載せておきます
Webベースで調べる方法、Pythonのようなプログラムを用いて調べる方法などいくつかありますので一つずつご紹介していきます。
Webサービスで調査:日本株
一番簡便なのは以下の日本経済新聞社のランキングだと思います。
https://www.nikkei.com/markets/ranking/page/?bd=betahigh&Gcode=00&hm=1
細かいことにはなりますが、3年間で計算しているとありますが、日足なのか月足なのかの記載はありません。また、当然だと思いますが、日経平均株価へのベータだけであり、対TOPIXなどは無いようです。
また、残念ながらYahoo Japan! Financeにはベータランキングそのものが無いようです。
楽天証券のスーパースクリーナー
私が良く使っている方法は 楽天証券 の スーパースクリーナ です。
楽天証券に総合口座に口座のお持ちの方はログインしていただき、
国内株式>国内株式トップ内にあるスーパースクリーナを選択します。
すると上記のような画面が出てきます。下の方を見ていただくとわかるのですが、このデータはトムソンロイターが提供しています。
データ端末のロールスロイス:ブルームバーグではないですが、ロイターのデフォルトのデータなら大抵の場合、品質的に問題はないのではないでしょうか。
追記:現在は名前が変わってREFINITIVです。
実際の表示方法
実際にこの表にベータを表示する方法ですが、詳細検索項目の枠をクリックします。
すると新規に選択ウィンドウが開きますので、その中で ベータ(対日経平均)を今回は選択します。
パラメータ的な話をすると、過去2年間での相関ということのようです。マウスを3秒ぐらい置いておくとホバーウィンドウで確認できます。
過去2年の値動きとありますが、日足か月足かは記載がありません。ただ、ベータ自体は3種類、対日経平均、対TOPIX、対東証業種指数を選べます。
ちなみに 1570 日経レバ連動型ETF は1.98となり、約2倍という事で商品コンセプトと一致しているのが見て取れます。
あとはクリックすることで降順、昇順、好きなように並べ替えたり、特定の銘柄の値を参照できます。
米国株
米国株も同じようなサイトで確認できるものがありますが、上記のように一覧で出せたり、ETFでも出せるのはなかなか無いように感じています。
実際US Yahoo! Financeも個別株を個別に出すことはできるますが、
ETFの場合、出ないようです。
また、リサーチ情報サービスの https://www.zacks.com/ でも
個別株の場合は個別銘柄ベータ値(β値)は出るようですが、
ETFの場合は無いようです。
ほかにもWebサービスを探すとあるのかもしれませんが、なかなか難しいようなので、ここはPythonで自分で計算してみることにしましょう。
Pythonでのベータの計算
基本的には以下のコードを利用しながら行います。
簡単シンプル、写すだけ! 20行で資産運用モデル作成 [Pythonで 米国株の株価を取得し、グラフ・チャートを表示]
今回の検証ではデータ取得期間は2010/01/01から2021/09/02までとします。
市場平均としてSPY : SPDR S&P 500 ETF を利用します。
今回ベータを求める銘柄は
AAPL : アップル
MSFT : マイクロソフト
TSLA : テスラ
SPYD : SPDR Portfolio S&P 500 High Dividend ETF
ベータ値(β値)はUS Yahoo! Financeにそろえ、5年間の月次での相関
とします。
データの取得
データを取得するコードは以下の通りです。
!pip install yfinance --upgrade --no-cache-dir
import datetime
import yfinance as yf
import pandas as pd
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
start_D = datetime.date(2010,1,1)
end_D = datetime.date.today()
codelist = ["SPY","AAPL","MSFT","SPYD","TSLA"]
data2 = yf.download(codelist, start=start_D, end=end_D)["Adj Close"]
display(data2.head(2).append(data2.tail(2)))
df_pct=data2.resample("M").last().pct_change()
display(df_pct.head(2).append(df_pct.tail(2)))
まず、株価自体を求めます。
.resample(“M”).last() を使って、月末時点の終値に変換し、それを%変化率へ変換しています。
対数正規分布でのモデルを必要とする方はご自身で計算してみてください。
ここでは簡便のために単純にパーセントでの変化率で検証します。
ベータ値(β値)の計算
ベータ値(β値)の計算方法は以下になります。
β = 共分散(マーケット・個別)/分散(マーケット)
今回は時系列データで5年の月次で計算しますので、移動平均的な考え方で60個のデータの相関で評価することとします。数式をコードに置きなおすと以下の通りです。
df_beta=pd.DataFrame()
df_beta["AAPL_b"]=df_pct.rolling(60).cov().unstack()["SPY"]["AAPL"]/df_pct.rolling(60).var().unstack()["SPY"]
df_beta["MSFT_b"]=df_pct.rolling(60).cov().unstack()["SPY"]["MSFT"]/df_pct.rolling(60).var().unstack()["SPY"]
df_beta["SPYD_b"]=df_pct.rolling(60).cov().unstack()["SPY"]["SPYD"]/df_pct.rolling(60).var().unstack()["SPY"]
df_beta["TSLA_b"]=df_pct.rolling(60).cov().unstack()["SPY"]["TSLA"]/df_pct.rolling(60).var().unstack()["SPY"]
display(df_beta.tail(2))
データの確認
実際に間違っていないかUS Yahoo! Financeで確認します。
アップルは1.2と計算されていました。
問題ないようです。
マイクロソフトはどうでしょうか。計算では0.78なっています。
これも問題ないようです。
SPYDはどうでしょうか。計算では1.13となっています。
残念ながら出てきません。自分で計算しないといけないようです。
最後のテスラはどうでしょうか。計算では1.94とほぼ2倍程度動くようです。
これもほぼ同じでいいですかね、、
正しく計算できたようです。
また、以下のような書き込みのTwitterにあったりしました。
実際に一期ずらしたデータで確認すると以下のようになります。
ベータとマーケットリスクといった観点から面白事が分かるかもしれません。
いろいろ皆さん調べてみてください。
---
以前はこのような記事でしたが、pyfolioのバージョンアップが行われなくなったためにpandasのバージョンアップに対応できなくなり、エラーが起きるようになってしまったようです。
今は一部の機能を除き、動かくなってしまっているようですが、その当時のまま、残しておきます。
以前記事に書いた米国株のパフォーマンス・成績をPythonで早く、綺麗に調べる [Python 米国株 pyfolio コードあり]を利用します。
今回もGoogle ColaboratoryのPythonコードをご紹介したいと思います。
最初は以前の記事で扱ったのと同じような記述になります。
20行で資産運用モデル作成 [Python 米国株 個別銘柄 ETF]
という記事で紹介していますので、初めての方は読んでみてください。
コード自体は以下のようになります。
!pip install fix_yahoo_finance
!pip install pyfolio
import datetime
import fix_yahoo_finance as yf
import matplotlib.pyplot as plt
import pyfolio
start_D="2015-12-31"
end_D = datetime.date.today()
codelist = ["^GSPC","SPYD"]
data2 = yf.download(codelist, start=start_D, end=end_D)["Adj Close"]
df_pct=100*data2.pct_change()
pdPF_out=df_pct
pyfolio.create_returns_tear_sheet(0.01*pdPF_out.iloc[:,0], benchmark_rets=0.01*pdPF_out.iloc[:,1])
注意:2021/09/03 このままでは動きません。
今回の例では2015年末からS&P500とSPYDのデータで相関を調べています。
結果は
とななりベータは0.76となりました。それ以外にも比較であったり、月ごとの騰落、年・月でのリターンの分布など確認することができます。
ーーー
Python関係の記事をご紹介します。
コメント