見出し画像

【新NISA】Excelで検討する新NISAの投資戦略:まずは標準正規乱数を発生させる

さて先日のnoteの記事「新NISAの投資戦略:今後分析してみたいことのアウトライン」で書いたとおり、今後モンテカルロ・シミュレーションなるものを駆使して、自身の新NISAの投資戦略を検討してみたいと思ってます。


そもそもモンテカルロ・シミュレーションとは?

Googleでモンテカルロ・シミュレーションを検索するといろいろと定義が出ていますが、超簡単に言うと、「サイコロを何度も振って、その結果がどういう分布(平均とか、散らばりとか)になるかを調べる」ことです。1から6まで、それぞれの目が出る確率は1回サイコロを振るたびにそれぞれ1/6ですが、例えばそれを100回振ってもそうなのか、10,000回振ってもそうなのか、確認してみるのがモンテカルロ・シミュレーションです。

ビジネスの現場であれば例えば、複数のプロジェクト候補があった場合、将来起こりうる事象を確率的に推定、どのプロジェクトを選んだらいいかの判断材料にしたり、また今回やろうとしているように、ある確率分布に従いランダムに動く金融市場において、将来自分の損益がどうなる可能性があるのかを、複数回そのシナリオを走らせて調べてみるものです。

シミュレーションに使うツール

VBAやPythonといった言語を駆使してプログラミングできればいいのですが(できなくはないが…)、ここではまず、「Excelでできるだけ簡単にシミュレーションできないものか?」ということで、愚直にチャレンジしていきたいと思います。

なお僕が1990年代後半、ビジネス・スクールで使用していたExcelのアドインのツールで、"Crystal Ball"というのがありました。これはExcel上で簡単に任意の分布に従う乱数を発生させ、簡単にモンテカルロ・シミュレーションを走らせ、結果の分布や確率等も簡単に出せる優れものでした。僕がモンテカルロ・シミュレーション好きになったのも、そのツールのおかげです(笑)まだ存在するのかな?と思って調べてみると、今はOracleの元で販売されてるんですね。一般向けの価格が$1,100とちょっとお高めなので、まずはそれを使わずにやってみたいと思います。もしどなたかで、「もっとこんな便利なアプリがあるよ」というのをご存知でしたら、ぜひ教えてください!

https://www.oracle.com/jp/applications/crystalball/

Excelで標準正規乱数を発生させる

モンテカルロ・シミュレーションをするにあたり、どういう予測モデル(株価のブラウン運動モデル)を使うのかを決めないといけませんが、それは次に議論することとして、まずはそのランダム性のベース(ホワイトノイズ)となる標準正規乱数(平均=0, 標準偏差=1の標準正規分布に従う乱数)をExcelで取り出します。

まずExcelで標準正規乱数を取り出すための関数は以下を使います。
=NORMINV(RAND(), 0, 1)

そして発生させる乱数の数ですが、「月次の価格の推移を想定し(月次での投資・入金パターンを想定し)今後50年(600ヶ月)の価格推移・リターンの予測を10,000回試行したい」ということで、10,000回 x 600ヶ月分の乱数を発生させることにします。

以下はそのExcelのスナップショットです。10,000 x 600の数の標準正規乱数もほぼ瞬時に発生させることができました。最近のPCの計算能力は凄いですね!

Excelによる10,000x600の標準正規乱数の発生

一応念のため、乱数全体の平均と標準偏差を見てみましたが、それぞれ0.000、1.000と、もちろん桁数を多くするとちょうど0とか1にはならないのですが、それなりにいい数字が出ていると判断しておきます。

今後のための一工夫

ここからモンテカルロ・シミュレーション用の計算シートを作っていきますが、標準正規乱数を発生させたシートをそのまま使用してやると、Excelのエンターキーを押すたびにあらたな乱数を発生させようとして、その都度(数秒程度ではありますが)時間が取られてしまいます。従って、今後の作業の効率化のために、モンテカルロ・シミュレーションを行うファイルを別に作り、上記で発生させた標準正規乱数を値複写して、一度発生させた乱数はそのままの値で使っていこうと思います。

次回は、いよいよシミュレーションのためのExcelシートを作っていこうと思います。

この記事が気に入ったらサポートをしてみませんか?