以前、投資におけるルールの理解を深めるという観点から、バックテストに関する記事を書きました。
その記事では、Python を使ってバックテストを行ったのですが、プログラミングに日常的に接する機会の少ない方は「Python やっぱ使わなければならないの…?」と感じたかもしれません。
そこで、本記事では表計算で積立投資のバックテストをしてみようと思います。積立投資のような簡単なルールなら表計算でもバックテストは可能ですので、手軽にバックテストを試していただき、バックテストの大切さを実感していただければ幸いです。
今回のゴール
今回のゴールは、「自分で決めたルールを守る」ためにできること ― バックテストでルールを理解するでテストしたルールを表計算でテストすること、です。Python は使ったことがなくても、Excel もしくは Google Spreadsheet など他の表計算ソフトは使ったことがある人は多いのではないでしょうか?今回は Excel を使いますが、Excel を使わない方は Google Spreadsheet など他の表計算ソフトで試してみてください。
では、実際にテストするルールを見てみましょう。
「毎月末に SPY (SPDR S&P 500 ETF) (S&P 500 に連動することを目指す ETF の一つ)を $100 購入する。投資期間中は売ることはない。」
注:
- 今回はバックテストの都合上、古くから存在し過去データが豊富な SPY を S&P 500 連動 ETF として選びました。
- 単純化のため、円ではなく米ドルを基準に定額積み立てをすることとしています。
テストするルールを確認したところで、準備に進みます。
準備:株価データの取得
積立シミュレーションを行うには、過去の株価データ(今回はSPY)を月次で取得しておく必要があります。
今回ご紹介するのは、Stooq という無料の株価情報サイトを使った方法です。登録不要で、そのままCSV形式のデータがダウンロードできます。
ダウンロード手順(例:SPY の月次データ)
- Stooq の SPY ページへアクセス:https://stooq.com/q/d/?s=spy.us
2.「Interval(期間)」を Monthly に変更
-
Start date と End date に、テストしたい期間(例:2010年1月1日から2019年12月31日)の始めと終わりを入力する
-
Show ボタンをクリックとデータが表示される
-
ページ下部の "Download data in csv file..." をクリックし、CSV を保存する
保存されたCSVファイルは、そのままExcelで開くことができます。
Stooqから取得したCSVファイルは、次のようなシンプルな構造になっています。
| Date | Open | High | Low | Close | Volume |
|---|---|---|---|---|---|
| 2010/01/31 | 86.705 | 88.8298 | 82.7215 | 82.8497 | 4804550512 |
| 2010/02/28 | 83.4335 | 86.0706 | 80.6876 | 85.4599 | 5770156716 |
| ... | ... | ... | ... | ... | ... |
この「Close」の列を使って、積立のシミュレーションをしていきます。
積み立てシミュレーションを作成する
株価の月次データ(CSV)を準備できたら、いよいよExcelで積立投資のシミュレーションを組んでいきましょう。
まずは、CSVファイルを読み込みます。
ステップ1:CSVをExcelで開いて、不要な列を整理
StooqからダウンロードしたCSVファイル(例:spy_d.csv)には、以下のような列が含まれています:
| Date | Open | High | Low | Close | Volume |
|---|---|---|---|---|---|
| 2010/01/31 | 86.705 | 88.8298 | 82.7215 | 82.8497 | 4804550512 |
| 2010/02/28 | 83.4335 | 86.0706 | 80.6876 | 85.4599 | 5770156716 |
| ... | ... | ... | ... | ... | ... |
このうち今回使うのは、日付(Date)と終値(Close)の2列だけです。
ステップ2:列を追加して、積立の計算に使う形へ変換
以下のような構成にしていきます:
| A列 | B列 | C列 | D列 | E列 | F列 | G列 |
|---|---|---|---|---|---|---|
| Date | Close | 投資額 | 購入株数 | 累積株数 | 累積投資額 | 資産評価額 |
| 2010/01/31 | 82.8497 | 100 | =C2/B2 | =D2 | =C2 | =B2*E2 |
| 2010/02/28 | 85.4599 | 100 | =C3/B3 | =E2+D3 | =F2+C3 | =B3*E3 |
| 2010/03/31 | 90.274 | 100 | =C4/B4 | =E3+D4 | =F3+C4 | =B4*E4 |
| ... | ... | ... | 繰り返し | ... | ... | ... |
ポイント
-
毎月の投資額(100ドル)は固定として、C列に手入力または数式コピーで入力
-
数式は下にコピーしていくだけで、何年何ヶ月分でも積立シミュレーションが可能
-
最終行を見ることで、最終的な「累計投資額」と「資産評価額」がすぐに分かる
グラフ化する
シミュレーションができたら、折れ線グラフで「資産評価額 vs 累積投資額」を可視化すると、資産がどう推移するのか見ることができます。
-
横軸:日付(A列)
-
縦軸:累積投資額(F列)、資産評価額(G列)
シミュレーション結果の詳細については以下の記事をご覧ください。
ℹ️ なお、上の記事で説明した Python を使う方法と、今回ご紹介した方法では、参照するデータが異なるため、同じ期間でシミュレーションしても得られる結果に若干の差異が出ることがあります。
まとめ
今回の記事では、Python を使わずとも表計算で積立投資のバックテストはできる、ということを述べてきました。
「自分で決めたルールを守る」ために大切なのは、Python がかけること、プログラムが書けることではなく、自分で自分のルールが実際に過去にどのように機能するのかを確かめることです。
そこで、今回はプログラミング言語に日常的に接していなくて、Python は手間だなと感じる方でも積立投資がどのように機能するのかを確かめられるよう、表計算でシミュレーションを行う方法を説明してきました。積立投資のようなシンプルなルールなら表計算でも十分にシミュレーションができるということをわかっていただけたら幸いです。


