Cream-Kuchen

資産運用シミュレーション - pythonで計算する期待運用総額, 定期拠出額, 期待利回り, 運用期間

はじめに

積立投資のシミュレーションツールが各所にありますが、pythonでどうやって算出するのでしょう?

下記4つの変数を方程式に入れて、書き下します。

 ・将来の期待運用総額
 ・月々の拠出額
 ・期待運用利回り
 ・運用期間

また下記ツールを使うと、それぞれの値が簡便に算出可能です。

↓ツールはこちらです↓
colab.research.google.com

目次


1, 方程式

下記4つの変数を方程式に落とし込みます。

 ・A ... 将来の期待運用総額
 ・S ... 必要な月々の拠出額
 ・r ... 期待運用利回り(年率, 小数表記)
 ・N ... 必要な運用期間(年)

各月の拠出額を運用期間最後まで期待運用利回りで複利計算します。


\require{color}
\textcolor{red}{A}=\textcolor{blue}{S}(1+\frac{\textcolor{brown}{r}}{12})^{12\textcolor{orange}{N}}+\textcolor{blue}{S}(1+\frac{\textcolor{brown}{r}}{12})^{12\textcolor{orange}{N}-1}+...+\textcolor{blue}{S}(1+\frac{\textcolor{brown}{r}}{12})^{12\textcolor{orange}{N}-(12\textcolor{orange}{N}-2)}+\textcolor{blue}{S}(1+\frac{\textcolor{brown}{r}}{12})^{12\textcolor{orange}{N}-(12\textcolor{orange}{N}-1)}


上式をまとめるとこうなります。


\require{color}
\textcolor{red}{A}=\textcolor{blue}{S}(1+\frac{12}{\textcolor{brown}{r}})((1+\frac{\textcolor{brown}{r}}{12})^{12\textcolor{orange}{N}}-1)



この方程式を基にpythonで書き下してみましょう。



2, 将来の期待運用総額の計算

方程式をそのままpythonで書きます。

A = S * (1+12/r) * ((1+r/12)**(N*12)-1)



3, 必要な月々の拠出額の計算

方程式のAとSを右辺・左辺に入れ替える式変形をします。

S = A / ((1+12/r) * ((1+r/12)**(N*12)-1))



4, 期待運用利回りの計算

方程式の式変形が困難なので、scipyのoptimizeを用います。

from scipy import optimize
def calc(r):
    return S * (1+12/r) * ((1+r/12)**(N*12)-1) - A
r = optimize.fsolve(calc, 0.01).item()  # rは年率の小数表記、fsolveの第2引数は計算開始時点の値



5, 必要な運用期間(年)の計算

対数logを用いて方程式の式変形をします。

import math
N = math.log(1+A/(S*(1+12/r)), 1+r/12)/12



おわりに

資産運用シミュレーションをpythonで書き下す方法を紹介しました。

世に出回るツールでは計算過程が分からなかったり、複利計算が年単位で大雑把だったりしますが、

当ブログ & ツールではより明確・正確に詳らかにしています。ご参考にして頂けると幸いです。