趣味の投資とプログラミング備忘録

趣味の投資と独学の「R言語」によるプログラミングを混ぜて、なぜ投資が必要なのか、メモがてら書いていきたいと思います。投資もプログラミングも初心者という方の勉強の一助となれば幸いです。

JNJの過去データから未来予測してみた!(モンテカルロシミュレーションとバックテスト)

免責事項

当ブログに掲載する情報は投資勧誘を目的としたものではありません。株式などの金融商品の取引は損失を出す恐れがあります。 全て自己判断、自己責任での投資をお願いいたします。 このブログは投稿者が趣味として記載しているものであり、いかなる損失が出た場合でも責任を負うことはできません。 誤情報が入り込んだり、情報が古くなったりすることもあります。 必ずしも正確性を保証するものではありません。また合法性や安全性なども保証いたしません。 当ブログに掲載された内容によって生じた損害等の一切の責任を負いかねますので、ご了承ください。


導入

モンテカルロシミュレーション結果は妥当なものであるといえるのか?
また、過去のデータから未来の予測は可能なのか?
意味がなかったら困るので、実験しようと思います。

今回はバリュー株。変動もさほど置きくなく右肩上がりで成長してきたJNJ(ジョンソンエンドジョンソン)で検証してみます。

変動があまりに大きすぎるのはそもそもそれが起きる要因が複数あり、その要因が常にあるわけでもなく突然要因が出現し、それ以降現れないこともあるためです。

要因が複数あり、不明な場合はシミュレーションしようがないので、予測に向いていないからです。


方法

標本データとして、米国JNJ(ジョンソンエンドジョンソン)のデータをGoogleスプレッドシートGoogle Finance関数を使って抽出。
(使用データ 1970-06-01~1990-05-31)

月末の日付と終値だけのデータを「R」で抽出してデータフレームを作成。
月末の終値から、20年分の前月比率(n=240)を算出し計算に用いる。

投資期間最後の月末の終値/投資期間最初の月末の終値を月間平均に変換する。
月末データから標準偏差を算出する。


試験用データとして、米国JNJ(ジョンソンエンドジョンソン)のデータをGoogleスプレッドシートGoogle Finance関数を使って抽出。
(使用データ 1980-06-01~2021-07-30)

毎月の月末に10$を積立投資したと仮定して、1990-06-02~2021-07-30まで、30年間の実際の変動から計算して散布図を描く。
標本データから得られた平均、標準偏差から正規分布で乱数発生させ、毎月の変動として利用する。
これを10000回シミュレーションし、実データの散布図と同時描画する。
シミュレーション結果は2.5%,25%,50%,75%,97.5%の5つにパーセンタイルに分類する。
その際、一切運用しない場合の数値も同時描画する。

 

なお、大前提である 正規性の確認や分散、平均等の標本との差がないであろうことは確認済みです。

 

結果

Fig.1 全期間(標本+試験)データの推移

f:id:HanamoriH:20210824153744p:plain

f:id:HanamoriH:20210824160621p:plain

Fig.1は今回使用するJNJの全期間の時系列データ。赤枠が標本用データ期間であり、乱数発生に用いる平均、標準偏差を求める。

それ以外の期間で得られた平均、標準偏差正規分布を仮定した乱数発生(モンテカルロシミュレーション)により検証する。

 

 

Fig.2 1990-06-02~2021-07-30のシミュレーション結果と実データ推移

f:id:HanamoriH:20210824154056p:plain

赤がパーセンタイル97.5%-2.5%の区間境界線

青が25%-75%の区間境界線

緑が50%線

オレンジが実データの時系列数値

黒が運用しない場合の数値

 

 

Fig.3 区間毎の出現確率

f:id:HanamoriH:20210824154651p:plain

Lose(%)は、当該期間に運用した場合、運用しなかった場合の数値を実データが下回った割合(元本割れの確率)。100からこの数値を引いた値が元本割れしなかった割合となる。

25%-75%(50%)はシミュレーションにおいて、50%が入るであろう範囲。

2.5%-97.5%(95%)はシミュレーションにおいて、95%が入るであろう範囲。

 

Fig.4 最終的な時点におけるモンテカルロシミュレーションから推定される確率

f:id:HanamoriH:20210825235334p:plain

 

[0%< ] :

(シミュレーションで元本割れしなかった回数/10000回)×100(%)

シミュレーション結果において±0%を超える確率。

[+100%< ] :

(シミュレーションで投資資金が+100%以上になった回数/10000回)×100 (%)

シミュレーション結果において+100%(2倍)を超える確率。

[+200%< ]  :

(シミュレーションで投資資金が+200%以上になった回数/10000回)×100 (%)

シミュレーション結果において+200%(3倍)を超える確率。

[+300%< ]  :

(シミュレーションで投資資金が+300%以上になった回数/10000回)×100 (%)

シミュレーション結果において+300%(4倍)を超える確率。

 [+400%< ]  :

(シミュレーションで投資資金が+400%以上になった回数/10000回)×100 (%)

シミュレーション結果において+400%(5倍)を超える確率。

 

 

Fig.5 シミュレーションデータと実データ、非運用の結果数値

f:id:HanamoriH:20210824161955p:plain

timeは年月日を表す。

Resultは実データの値($)

Uninvestedは非運用の場合の値($)

Q025、Q25、Q50、Q75、Q975はそれぞれ10000回シミュレーション結果におけるパーセンタイル値(2.5%、25%、50%、75%、97.5%)での値を示す($)

 

Result/Uninvested= 4.964457≒5 

30年間で投資結果は約5倍となっている。

 

考察

結果より、Fig.1の全期間データから得られたグラフを見る限り、当該期間から算出した平均、標準偏差で適切な乱数が発生できるのか微妙に見えるが、対数化したグラフからは、問題なさそうな結果となっている。

株式はもともと成果が指数関数的に伸びる傾向があるためです。

通常のグラフからはシミュレーションできるような変動なのか不安になりますが、問題ないと判断します。

 

Fig.2は実際にシミュレーションした値ですが、おおよそ、過去のデータから未来が予測できているのではないかと見える結果になりました。しかし、期間が長いため、最初の方がどうなっているのかは潰れていて見ることができませんね。

 

Fig.3より、実際にシミュレーション結果の10000個のデータを大きい順に並べ、パーセンタイル値を算出した結果、多少の誤差はありますが、大方、推定する結果通りとなっているように見えます。

 

Fig.4より、元本割れする可能性は低く、2倍以上になる確率が85%超と非常に高いということになりました。5倍以上になる確率は約50%となっています。

 

Fig.5より、実際どの程度増えたかと言えば約5倍です。シミュレーション結果から想定し、妥当かと思います。

また、Fig.2の最終時点のシミュレーション分布の最頻値も約5倍になる値になっていましたので、妥当と考えます。

 

この結果から、バリュー株であればシミュレーションが可能ではないかと思われます。

ただ、出来ることなら、30年分位サンプルサイズ360以上は欲しいところです。

 

以上