今まで正規分布で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になるはずなので、まぁこんなものだろうか。

コメント