05.1.6
ETFと利回りを比較
^SPX)と Nasdaq(^NDQ)、そして米国債 10 年(10USY.B)と 2 年(2USY.B)の利回りを 2021 年 8 月から 2022 年 1 月まで取得します。利回り 2 本を折れ線で並べて長短金利差(イールドカーブの傾き)を確認し、最後に mplfinance で S&P 500 のローソク足と 10 年債利回りを twinx() の 2 軸で重ねます。読み終えると、get_finance_data(source="stooq") の銘柄コードを替えるだけで任意の ETF と金利を同じ図で比べられるようになります。直感 #
金利が上がると、株式より安全な国債で得られる利回りが増えるので、株式に求められるリターンも上がり、株価(特に将来の利益に期待が集まる成長株)には下押し圧力が掛かります。2021 年末から 2022 年初はまさに 10 年債利回りが 1.3% から 1.8% へ上がり、S&P 500 が最高値から調整に入った時期です。この関係を見るには「ETF の価格」と「利回り」を同じ期間・同じ横軸に揃える必要があり、ここでは pandas-datareader 経由で stooq から両方を取ります。pandas-datareader の使い方は メディアプログラミング入門 WebスクレイピングとWebAPI の講義資料 45 ページで紹介されていたものです。
準備 #
株価と利回りの取得には mplfinance のページで作った get_finance_data() を utils.py から読み込みます。source="stooq" を受け付けるように拡張してあります。
| |
ETF と株価指数を取得する #
VOO と VTI は Vanguard の ETF で、それぞれ S&P 500 と全米株式に連動します。指数そのもの(^SPX、^NDQ)も取って、ETF の値動きが指数をなぞっていることを確かめます。
| |
VOO
| Open | High | Low | Close | Volume | |
|---|---|---|---|---|---|
| Date | |||||
| 2022-01-31 | 405.67 | 413.9700 | 404.3500 | 413.69 | 9200435 |
| 2022-01-28 | 397.82 | 406.3300 | 393.3000 | 406.26 | 12096807 |
| 2022-01-27 | 402.93 | 405.9700 | 394.8200 | 396.54 | 12455226 |
| 2022-01-26 | 405.66 | 408.1954 | 394.3400 | 398.56 | 14377346 |
| 2022-01-25 | 398.17 | 404.2600 | 392.7325 | 399.46 | 16836326 |
VTI
| Open | High | Low | Close | Volume | |
|---|---|---|---|---|---|
| Date | |||||
| 2022-01-31 | 222.09 | 226.950 | 221.22 | 226.81 | 5306436 |
| 2022-01-28 | 217.50 | 222.170 | 214.93 | 222.09 | 4961209 |
| 2022-01-27 | 220.81 | 222.400 | 215.90 | 216.75 | 5791524 |
| 2022-01-26 | 222.72 | 224.160 | 216.05 | 218.37 | 7096416 |
| 2022-01-25 | 219.10 | 222.015 | 215.64 | 219.22 | 6600378 |
S&P500
| Open | High | Low | Close | Volume | |
|---|---|---|---|---|---|
| Date | |||||
| 2022-01-31 | 4431.79 | 4516.89 | 4414.02 | 4515.55 | 2960132803 |
| 2022-01-28 | 4336.19 | 4432.72 | 4292.46 | 4431.85 | 2926083817 |
| 2022-01-27 | 4380.58 | 4428.74 | 4309.50 | 4326.51 | 3070684348 |
| 2022-01-26 | 4408.43 | 4453.23 | 4304.80 | 4349.93 | 3239353450 |
| 2022-01-25 | 4366.64 | 4411.01 | 4287.11 | 4356.45 | 3069079477 |
Nasdaq
| Open | High | Low | Close | Volume | |
|---|---|---|---|---|---|
| Date | |||||
| 2022-01-31 | 13812.20 | 14242.90 | 13767.71 | 14239.88 | 3268652504 |
| 2022-01-28 | 13436.71 | 13771.91 | 13236.55 | 13770.57 | 3092819850 |
| 2022-01-27 | 13710.99 | 13765.91 | 13322.66 | 13352.78 | 3373437394 |
| 2022-01-26 | 13871.77 | 14002.65 | 13392.19 | 13542.12 | 3664304374 |
| 2022-01-25 | 13610.87 | 13781.63 | 13414.14 | 13539.29 | 3265336637 |
債券利回りを取得する #
stooq では米国債の利回りも株と同じ形式で取れます。10USY.B が 10 年、2USY.B が 2 年で、Close 列が年利回り(%)です。
| |
10-Year U.S. Bond Yield
| Open | High | Low | Close | |
|---|---|---|---|---|
| Date | ||||
| 2022-01-31 | 1.789 | 1.816 | 1.771 | 1.780 |
| 2022-01-28 | 1.830 | 1.848 | 1.773 | 1.777 |
| 2022-01-27 | 1.840 | 1.851 | 1.783 | 1.799 |
| 2022-01-26 | 1.769 | 1.876 | 1.769 | 1.867 |
| 2022-01-25 | 1.753 | 1.792 | 1.735 | 1.776 |
2-Year U.S. Bond Yield
| Open | High | Low | Close | |
|---|---|---|---|---|
| Date | ||||
| 2022-01-31 | 1.1986 | 1.2145 | 1.1587 | 1.1827 |
| 2022-01-28 | 1.2141 | 1.2260 | 1.1603 | 1.1703 |
| 2022-01-27 | 1.1822 | 1.2061 | 1.1603 | 1.1882 |
| 2022-01-26 | 1.0313 | 1.1603 | 1.0154 | 1.1544 |
| 2022-01-25 | 1.0055 | 1.0353 | 0.9897 | 1.0254 |
| |

実行結果の読み方 #
10 年債利回り(青)は 2021 年 8 月の 1.2% 台から 2022 年 1 月末の 1.8% 前後まで上がり、2 年債(オレンジ)は 0.2% から 1.2% へとそれ以上の速さで上がっています。2 本の差(長短金利差)が 1.0% から 0.6% へ縮んでおり、市場が利上げを織り込み始めた局面だと読めます。
S&P 500 と 10 年債利回りの比較 #
株価指数のローソク足と利回りの折れ線は単位が違うので、twinx() で左右に別の縦軸を持たせて重ねます。mplfinance の ax= 引数に matplotlib の Axes を渡すと、通常の matplotlib の図の中にローソク足を描けます。
| |
<matplotlib.legend.Legend at 0x7fcc4de60970>

実行結果の読み方 #
横軸が反転しているので左端が 2022 年 1 月です。10 年債利回り(折れ線)が 1.7〜1.8% へ上がった左側の区間で、S&P 500 のローソク足は 4,800 付近の高値から陰線が続いて 4,400 台まで下げています。右側の 2021 年秋は利回りが 1.5% 前後で横ばい、株価は上昇基調で、金利の上昇が株価の調整と重なる局面がこの 6 か月では 1 回はっきり現れています。
使いどころと落とし穴 #
stooq は API キー不要で手軽ですが、日付が新しい順に返るため sort_index() を忘れると移動平均や差分の向きが逆になります。利回りと株価を重ねるときは必ず twinx() で軸を分け、同じ軸に載せるために片方を定数倍するのは避けます(倍率で見え方が変わってしまいます)。6 か月という短い期間では金利と株価の関係が 1 局面しか見られないので、因果を主張するなら 2010 年以降などの長期で 相互相関 を計算し、ラグを確認する方が安全です。
まとめ #
get_finance_data(ticker, source="stooq", start, end) の 1 行で、ETF(VOO・VTI)、株価指数(^SPX・^NDQ)、米国債利回り(10USY.B・2USY.B)がすべて同じ OHLC 形式で取れます。利回りは 2 本を plt.plot で重ねて長短金利差の縮小を読み、株価と利回りは mpf.plot(..., ax=ax1) と ax1.twinx() で 2 軸の 1 枚にまとめました。2021 年末からの 10 年債利回りの上昇と S&P 500 の調整が同じ図の中で重なって見えるのが、この比較チャートの読みどころです。