💰
[Package] yfinanceを使ったS&P500の簡単なバックテスト(つみたて投資)
TL; DR
- yfinanceを使ってS&P500の毎月の評価額と日本円⇔ドルの為替情報を取得した
- 理想状況(手数料・税金なし)で毎月一定の日本円をS&P500に積み上げたときの評価額をプロットした
- 自分で最強の資産運用バックテストを書こう
背景
Kindle版でSoft Skillsの第1版を昔読んだのですが、第2版を最近紙で入手しました。心穏やかに生活するには投資も大事だな、と思って記事と書き捨てのスクリプトを書きました。
資産運用の真面目な話はこちらの記事を読んでください。
問題設定
この記事の問題設定です(これは理想的な状況なので、現実には不可能です)。
- S&P500(に連動する何かを理想的な状況で)を円で買えると仮定する
- 毎月 50,000 円分の日本円を積み立てる
金融庁のページを使って、簡単なシミュレーションを見ます。
毎月5万円、平均の想定利回りが8%とし、25年積み立てるとします。最終積立金額は 47,551,320円 になるそうです。25125=1,500万円なので、約3倍ということになりますね。
yfinanceを使って毎月の評価額を取得する
yfinanceのTickerとhistoryを使って取得します。コードはこれを使いました。
- S&P500: ^GSPC
- 円⇔ドル: JPY=X
25年前なので、1998年の1月から、毎月1日のデータを取得します。こういう感じで取得します。
import yfinance as yf
ticker = yf.Ticker("^GSPC")
df = ticker.history(period="max", interval="1mo", start="1998-1-1")
中身はこういうデータになっています。
Date | Open | High | Low | Close | Volume | Dividends | Stock Splits |
---|---|---|---|---|---|---|---|
1998-01-01 00:00:00-05:00 | 970.43 | 992.65 | 912.83 | 980.28 | 1.27338e+10 | 0 | 0 |
1998-02-01 00:00:00-05:00 | 980.28 | 1051.66 | 980.28 | 1049.34 | 1.16566e+10 | 0 | 0 |
1998-03-01 00:00:00-05:00 | 1049.34 | 1113.07 | 1030.87 | 1101.75 | 1.37196e+10 | 0 | 0 |
1998-04-01 00:00:00-05:00 | 1101.75 | 1132.98 | 1076.7 | 1111.75 | 1.36561e+10 | 0 | 0 |
1998-05-01 00:00:00-04:00 | 1111.75 | 1130.52 | 1074.39 | 1090.82 | 1.14771e+10 | 0 | 0 |
1998-06-01 00:00:00-04:00 | 1090.82 | 1145.15 | 1074.67 | 1133.84 | 1.3552e+10 | 0 | 0 |
1998-07-01 00:00:00-04:00 | 1133.84 | 1190.58 | 1114.3 | 1120.67 | 1.41948e+10 | 0 | 0 |
それぞれこういう意味のデータが取得されます。S&P500なので関係ないところもありますね(おそらく)。
- Open:その日の始値
- High:その日の最高値
- Low:その日の最安値
- Close:その日の終値
- Volume:その日の取引量
- Dividends:配当金
- Stock Splits:株式分割数
最高値(High)を雑にグラフにするとこういう感じです。どこかで見たことある感じのグラフですね。
積立
この記事では、各月1日目の平均的な値として Low + (High - Low) / 2 を計算します。単位はドルなので、JPY=Yから1ドルの円価格を同様に取得して、円単位に換算したりしています(細かい実装は適当)。やったことですが
- 毎月5万円積み立てる
- 5万円分のドルで買える分だけS&P500を適当な単位で購入して貯めていく
- 各累積した購入単位数を各月の円換算で比較する
やった結果です。赤いプロットは毎月5万円積立した金額で、最後は1500万円になります。黄色いプロットは積み立てたS&P500を円で評価した金額で、この場合だと5000万円を少し超えているように見えますね(理想的な状況でしたか)。
まとめ
続きません。書き捨てたプログラムはこちらです。
Discussion