こんにちは。こゆき(@yukilog00)です。
7/16に発表されたトライオートETFのTQQQ自動売買制限のお知らせを受けて、TQQQ以外のETFを検討している人が多いはず。
前回の記事で為替レートの月間騰落率をヒートマップ化しましたが、トライオートETFで取り扱いのあるETFでやったほうがタイムリーでは?と思い、ETFでもやってみました。
<2021/11/7更新>
11/6にリリースされた新銘柄(VXX、ARKK、SLV)を追加しました。
- データソース
- 対象ETF
- ソースコード(python)
- 結果
- iシェアーズ MSCI ACWI ETF【MSCIワールド】:ACWI
- Direxion デイリー米国金融株ブル3倍 ETF【金融株トリプル】:FAS
- iシェアーズ 中国大型株 ETF【中国代表株50】:FXI
- SPDR® ゴールド・シェア【SPDRゴールド】:GLD
- ウィズダムツリー・欧州・ヘッジド・エクイティ・ファンド【EU大型株ヘッジ】:HEDJ
- iシェアーズ iBoxx 米ドル建てハイイールド社債ETF【高利回り社債】:HYG
- iシェアーズ ラッセル1000バリューETF【大型バリュー株】:IWD
- iシェアーズ ラッセル 2000 ETF【小型株】:IWM
- iシェアーズ iBoxx米ドル建て投資適格社債ETF【投資適格社債】:LQD
- パワーシェアーズ QQQ 信託シリーズ1【ナスダック100】:QQQ
- SPDR ®S&P 500® ETF【S&P500ETF】:SPY
- プロシェアーズ ウルトラS&P500®【S&P500ダブル】:SSO
- プロシェアーズ ウルトラプロQQQ【ナスダック100トリプル】:TQQQ
- WTI原油連動ETF【原油ETF】:USO
- バンガード®・FTSE・エマージング・マーケッツETF【バンガード新興国株】:VWO
- エネルギー・セレクト・セクター SPDR® ファンド【エネルギー株】:XLE
- 金融セレクト・セクター SPDR® ファンド【金融株】:XLF
- 資本財セレクト・セクター SPDR® ファンド【資本財株】:XLI
- テクノロジー・セレクト・セクター SPDR® ファンド【テクノロジー株】:XLK
- 生活必需品セレクト・セクター SPDR® ファンド【生活必需品株】:XLP
- 公益事業セレクト・セクターSPDR® ファンド【公共事業株】:XLU
- 一般消費財セレクト・セクター SPDR® ファンド【一般消費財株】:XLY
- S&P500恐怖指数連動ETN【恐怖指数ETN】:VXX
- ARKイノベーションETF【破壊的イノベーション】:ARKK
- iシェアーズ・シルバー・トラスト【シルバー】:SLV
- ヒートマップ一覧
データソース
前回同様、Alpha Vantageを使います。
対象ETF
対象ETFはトライオートETFで取り扱いのあるETFのうち、「TOPIX連動ETF」「日経225ETF」「日経Wインバ」「日経レバ」以外です。
この4つはAlpha Vantageからの取得方法がわからなかったため対象外としました。(そもそもデータがないのかもしれません)
ソースコード(python)
Jupyter Notebook(python)でやります。
前回とほぼ同じですが、為替のときとはデータソース(av-daily-adjusted、av-monthly-adjusted)が違ったり調整済終値(adjusted close)を使うところだけ変更しています。
チャート表示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
import pandas_datareader.data as pdd import pandas as pd import datetime import calendar import matplotlib.pyplot as plt import matplotlib.dates as mdates %matplotlib inline import numpy as np import os def get_firstday(year, month): return datetime.datetime(year, month, 1) def get_lastday(year, month): return datetime.datetime(year, month, calendar.monthrange(year, month)[1]) def get_data(s_year, e_year, symbol): start = get_firstday(s_year, 1) end = get_lastday(e_year, 12) # AlphaVantageからデータ取得、APIキーは環境変数から取得 df = pdd.DataReader(symbol, 'av-daily-adjusted', start, end, api_key=os.getenv('ALPHAVANTAGE_API_KEY')) df = df.dropna() return df def fig(s_year, e_year, symbol): # API利用回数に制限があるため、一回で全量取得 df_all = get_data(s_year, e_year, symbol) # Datetimeインデックスに変換 df_all = df_all.set_index(pd.to_datetime(df_all.index)) # グラフの数 n = e_year - s_year + 1 fig = plt.figure(figsize=(16, 40)) df = {} ax = {} for year in range(s_year, e_year+1): df[year] = pd.DataFrame() df[year] = df_all[get_firstday(year, 1):get_lastday(year, 12)] ax[year] = fig.add_subplot(n ,1 ,year - s_year + 1) ax[year].plot(df[year]['adjusted close'], label=str(year)) ax[year].xaxis.set_major_locator(mdates.MonthLocator(interval=1)) ax[year].xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) ax[year].xaxis.set_minor_locator(mdates.WeekdayLocator(interval=1)) ax[year].grid(which='major',axis='both',color='#999999',linestyle='--') ax[year].set_title(str(year)+'年', loc='left', fontsize='large') ax[year].legend fig.suptitle(symbol+'('+str(s_year)+'-'+str(e_year)+')', fontsize=16, y=0.98) fig.tight_layout(rect=[0,0,1,0.98]) #グラフ同士の重なりを防ぐ、タイトルと被らないよう上2%空ける # チャート表示 fig(2011, 2020, 'TQQQ') |
ヒートマップ表示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
import pandas_datareader.data as pdd import pandas as pd import datetime import calendar import matplotlib.pyplot as plt import matplotlib.dates as mdates %matplotlib inline import numpy as np import os def get_firstday(year, month): return datetime.datetime(year, month, 1) def get_lastday(year, month): return datetime.datetime(year, month, calendar.monthrange(year, month)[1]) # ここまではチャート表示と同じ def get_data_monthly(s_year, e_year, symbol): start = get_firstday(s_year, 1) + datetime.timedelta(weeks=-1) # 前月の調整済み終値を使用するため、-1週 end = get_lastday(e_year, 12) # AlphaVantageからデータ取得、APIキーは環境変数から取得 df = pdd.DataReader(symbol, 'av-monthly-adjusted', start, end, api_key=os.getenv('ALPHAVANTAGE_API_KEY')) df = df.dropna() return df import seaborn as sns def heatmap(s_year, e_year, symbol): n = e_year - s_year + 1 index = range(s_year, e_year+1) cols = ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'] df = get_data_monthly(s_year, e_year, symbol) df = df['adjusted close'].pct_change()*100 # 調整済み終値の上昇率(%) df = df.drop(df.index[0]) # 上昇率計算後は不要となった前月行削除 a = df.values # 行列変形のために一旦ndarrayに変換 b = np.reshape(a, (n, 12)) # n×12の2次元配列に変形 df2 = pd.DataFrame(b, index=index, columns=cols) # 行列変形後にpandas.DataFrameに戻す plt.figure(figsize = (15,10)) plt.title(symbol+'騰落率('+str(s_year)+'-'+str(e_year)+')', fontsize=20) cmap = sns.diverging_palette(10, 130, n=24, as_cmap=True) sns.heatmap(data=df2, annot=True, cmap=cmap, vmin=-15, vmax=15) # ヒートマップ表示 heatmap(2011, 2020, 'TQQQ') |
結果
チャートも載せていますが、縦軸の目盛りがバラバラなのでぱっと見でボラティリティの大きさは判断できないことに注意してください。
ヒートマップの色はすべて-15%を下限、15%を上限で統一していますので、色の濃さでボラティリティの大きさがわかるようになっています。(色が濃い=ボラが大きい)
しばらく画像が続くので、手っ取り早くヒートマップ一覧を見たい方はこちらからどうぞ。
iシェアーズ MSCI ACWI ETF【MSCIワールド】:ACWI


Direxion デイリー米国金融株ブル3倍 ETF【金融株トリプル】:FAS


TQQQと同じく3倍レバレッジだけあって、ボラが大きい(色が濃い)です。
TQQQに次いで人気なのも納得。
iシェアーズ 中国大型株 ETF【中国代表株50】:FXI


SPDR® ゴールド・シェア【SPDRゴールド】:GLD


ウィズダムツリー・欧州・ヘッジド・エクイティ・ファンド【EU大型株ヘッジ】:HEDJ


iシェアーズ iBoxx 米ドル建てハイイールド社債ETF【高利回り社債】:HYG


iシェアーズ ラッセル1000バリューETF【大型バリュー株】:IWD


iシェアーズ ラッセル 2000 ETF【小型株】:IWM


iシェアーズ iBoxx米ドル建て投資適格社債ETF【投資適格社債】:LQD


パワーシェアーズ QQQ 信託シリーズ1【ナスダック100】:QQQ


SPDR ®S&P 500® ETF【S&P500ETF】:SPY


プロシェアーズ ウルトラS&P500®【S&P500ダブル】:SSO


プロシェアーズ ウルトラプロQQQ【ナスダック100トリプル】:TQQQ


とにかく濃い!!
WTI原油連動ETF【原油ETF】:USO


バンガード®・FTSE・エマージング・マーケッツETF【バンガード新興国株】:VWO


エネルギー・セレクト・セクター SPDR® ファンド【エネルギー株】:XLE


金融セレクト・セクター SPDR® ファンド【金融株】:XLF


資本財セレクト・セクター SPDR® ファンド【資本財株】:XLI


テクノロジー・セレクト・セクター SPDR® ファンド【テクノロジー株】:XLK


生活必需品セレクト・セクター SPDR® ファンド【生活必需品株】:XLP


公益事業セレクト・セクターSPDR® ファンド【公共事業株】:XLU


一般消費財セレクト・セクター SPDR® ファンド【一般消費財株】:XLY


S&P500恐怖指数連動ETN【恐怖指数ETN】:VXX


ARKイノベーションETF【破壊的イノベーション】:ARKK


iシェアーズ・シルバー・トラスト【シルバー】:SLV


ヒートマップ一覧

予想通りの結果ですが、既に人気の3倍レバレッジETF(TQQQ、FAS)はボラが大きいという結果になりました。
次いで2倍レバレッジETF(SSO)と原油ETF(USO)がボラが大きいという結果。
「ボラが大きい=良い」ということでもないので、スプレッドが狭ければ敢えて値動きが小さいETFを狙うのもあり?
個人的には、今後もしレバレッジETFの自動売買が塞がれたらトライオートETF撤退でもいいかな、と思いました。(TQQQ自動売買継続を祈っています…!)
→新銘柄としてARKK採用など、トライオートETF、熱いですね。。!
コメント
[…] 各ETFのボラティリティについては、こゆきさんが詳しく調べてくれておりますので、そちらを参考にしていただければと思います。 […]