何年か後の資産

今まで正規分布で1年後の資産をシミュレーションしてきましたが、新しい変数を増やし、何年か後の資産はどのような分布になるかのシミュレーションを作っていきたいと思います。

今までの計算は以下のプログラムによって行ってきました。

     //数値を発生させる関数
         function getRandomValue(averageReturnRate,riskRate,currentValue) {
        var x, y, z, s;
        for (let i = 0; i < 10000; i++) {
          x = Math.random();
          y = Math.random();
          z = Math.sqrt(-2 * Math.log(x)) * Math.cos(2 * Math.PI * y);
          s = currentValue * ( 1 + averageReturnRate*0.01 + riskRate*0.01 * z);//初期資産currentValue,リターンaverageReturnRate,リスクriskRate
          
          nd.push(s);
        }
      }  

これを、定数で、年率期待リターン:10%、標準偏差:10%、初期投資額 100(万円)が5年後どうなるか配列(10個)でHTMLで取り出すプログラムを書きます。

<!DOCTYPE html>
<html>

<body>
    <div><span id="nd"></span></div>

    <script>
        function getRandomValue(averageReturnRate, riskRate, currentValue) {
            var x, y, z, re, s;
            var nd = []; // nd を初期化

            for (let i = 0; i < 10; i++) {
                re = 1; // 内側のループ前に re を初期化

                for (let j = 0; j < 5; j++) {
                    x = Math.random();
                    y = Math.random();
                    z = Math.sqrt(-2 * Math.log(x)) * Math.cos(2 * Math.PI * y);
                    re *= (1 + averageReturnRate * 0.01 + riskRate * 0.01 * z);
                }

                s = currentValue * re;
                s = s.toFixed(0);

                nd.push(s);
            }
            return nd; // 関数の戻り値として nd を返す
        }
        // 関数を呼び出す例
        var ndArray = getRandomValue(10, 10, 100); // 適切な引数を指定して呼び出す

        // 配列を文字列に変換して結果を表示
        document.getElementById("nd").textContent = ndArray.join(', ');
    </script>
</body>

</html>

結果です。平均は100×(1.1)^5=161になるはずなので、まぁこんなものだろうか。

コメント

タイトルとURLをコピーしました