days = 365
dt = 1 / days
mu = ret_df.loc['2018-01-01':'2018-12-31'].mean()['300231.SZ']
sigma = ret_df.std()['300231.SZ']
def stock_monte_carlo(start_price, days, mu, sigma):
price = np.zeros(days)
price[0] = start_price
shock = np.zeros(days)
drift = np.zeros(days)
for x in range(1, days):
shock[x] = np.random.normal(loc=mu * dt, scale=sigma * np.sqrt(dt))
drift[x] = mu * dt
price[x] = price[x - 1] + (price[x - 1] * (drift[x] + shock[x]))
return price
start_price = yx_df['close'][-1]
for run in range(100):
plt.plot(stock_monte_carlo(start_price, days, mu, sigma))
plt.xlabel("Days")
plt.ylabel("Price")
plt.title('Monte Carlo Analysis for 300231.SZ')
plt.savefig(r'D:\mcmc\AA\300231.SZ.png')
plt.show()
运行出来是这样,有啥解决办法呢?
只能说数据的分布就有问题, 试试看能不能做归一化之类的操作把它的分布拉到居中的位置