Python 中 while 循环中的先前值

Previous value in while loop in Python

我尝试对股票投资进行简单的 monte carlo 模拟,您从一些投资价值、投资期限(以年为单位)以及股票共同基金的均值和标准差开始。我还想为股市崩盘实施一种简单的方法——我这样做是为了每当新的计算值比以前的值高 40% 时,新的值应该下降 90%——就像某种崩盘。我设法让它工作,这是代码,但我认为它工作不正常。问题可能隐藏在我称之为先前值的地方。你能试着让它工作吗?

import matplotlib
import matplotlib.pyplot as plt
import random
import numpy as np

mean = 7.0 #mean for stock mutual fund
std = 19.0 #std for stock mutual fund

def investment_return(): #random normal distribution of returns
    investment_return = (np.random.normal(mean,std))/100
    return investment_return

def investor(A, B):
    investment_value = A
    investment_period = B

    wX = []
    vY = []

    x = 1

    while x <= investment_period:
        value = A + A*investment_return()
        if value > value * 1.4: #if new value is 1.4x bigger than previous
            A = value * 0.1 #than make -90 percent adjustment
        else:
            A = value #else use new value
        wX.append(x)
        vY.append(value)
        x += 1
    #print(value)

    plt.plot(wX,vY)

i = 0
while i < 10: #number of investors
    investor(100,20) #starting value and investment period
    i += 1

plt.ylabel('Investment_value')
plt.xlabel('Investment_period')
plt.show()

好吧,我尽我所能来解释你想要的东西。它帮助您为使用 :) 提供了坚实的基础。

好的,我们开始吧:显然,凯文关于 value > value * 1.4 永远不会计算为 True 的评论是可靠的。我确实重命名了一些变量(例如,通常我们将股票比较为indices,所以我将A重命名为index)。时间一般是指t,而不是xwhile 循环有点古怪,所以我去掉了它们。

import matplotlib.pyplot as plt
import numpy as np


mean = 7.0
std = 19.0


def investment_return():
    return (np.random.normal(mean, std)) / 100


def investor(index, period):
    wT = []
    vY = []

    for t in range(1, period + 1):
        new_index = index + index * investment_return()
        if new_index > index * 1.4:
            index = new_index * 0.1
        else:
            index = new_index
        wT.append(t)
        vY.append(index)
    return wT, vY


for i in range(0, 10):
    wT, vY = investor(100, 20)

    # do something with your data

    plt.plot(wT, vY)

plt.ylabel('Investment_value')
plt.xlabel('Investment_period')
plt.show()

这偶尔会导致股票崩盘,这一点可以清楚地看到(请记住,这需要您从 N(7,19) 分布中抽样 >40:这不应该在短时间内发生在所有案例中超过 95%)。