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
,而不是x
。 while
循环有点古怪,所以我去掉了它们。
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%
)。
我尝试对股票投资进行简单的 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
,而不是x
。 while
循环有点古怪,所以我去掉了它们。
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%
)。