Неверные результаты численного моделирования доходности инвестиций методом Монте-Карло.

Сколько денег вы получите, периодически инвестируя 10 000 долларов по средней ставке 8% годовых в течение 30 лет и используя моделирование методом Монте-Карло?

Я пытаюсь решить проблему, подобную описанной выше, с помощью моделирования процентной ставки Монте-Карло в python. Я придумал следующий код, и он кажется правильным, но он ужасно искажен, и я подозреваю, что сделал что-то не так. Под кодом

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

def sni(i,n):
    sni = round(((1+i)**n-1)/i,2)
    return sni

df = pd.DataFrame()
investment = 10000
for p in range(1000):
    i = np.random.normal(0.08,0.18)
    lst = []
    for n in range(30):
        final = investment * sni(i,n)
        lst.append(final)
    df[p]=lst

person Juan Trevisiol    schedule 25.06.2020    source источник


Ответы (1)


Я не помню уравнений из своего рукава для этого, но подозреваю, что у вас в любом случае есть изменение процентной ставки с годами, поэтому эта экспоненциальная штука не сработает.

Тогда я просто сделал это так:

import numpy as np
import pylab

years = 30
investment = 10000.0

def one_run():
    account = 0
    for n in range(years):
        interest = np.random.normal(0.08, 0.018)
        account = account * (1 + interest) + investment
    return account

df = [one_run() for _ in range(10000)]
    
# ****** everything below here is just plotting

p, b = np.histogram(df,50, density=True)
pylab.plot(b[:-1], p)
pylab.grid()
pylab.xlabel("Return [$]")
pylab.ylabel("Probability density [1/$]")
pylab.show()

Кроме того, вы меняли процентную ставку по шкале от 0,18 до 0,08, т.е. довольно часто она была отрицательной. Я взял на себя смелость вставить сюда еще один ноль (до значений 0,08 +- 0,018).

person Dr. V    schedule 25.06.2020