【发布时间】:2021-01-06 23:17:21
【问题描述】:
我什至不知道如何继续或哪里出错了,我得到了一个大数组
这是说明
创建一个降价单元格,其中显示一个 2 级标题,内容为:“D 部分:蒙特卡洛模拟”。还要在这部分添加一些简要描述代码用途的文本。 编写一个名为 monte_carlo 的函数。该函数应接受五个参数:start、rate、vol、days 和 num_runs。该函数应使用循环来生成数量等于 num_runs 的模拟库存运行。运行的特征由参数 start、rate、vol 和 days 提供。下面提供了此功能的详细说明。每次循环执行时,应执行以下步骤:
- 使用提供的参数模拟运行。将结果数组存储在变量中。
- 确定股票的最终模拟价格并将其附加到名为 final_prices 的列表中。
- 确定模拟运行的年收益率,并将其附加到名为 Annual_yields 的列表中。 循环执行完成后,将您构建的两个列表转换为 numpy 数组和 将它们都归还。
创建一个降价单元以说明您将通过使用特定种子运行蒙特卡罗模拟来测试该函数。 将种子设置为 1,并针对当前价格为 200、预期年回报率为 10%、波动率为 0.4 的股票运行由 10,000 次模拟运行组成的蒙特卡罗模拟。每次运行应超过 500 天。创建最终价格的直方图。使用 bins=np.arange(0, 1600, 50),并将边缘颜色设置为黑色。设置大小 图为 [10,5]。 如果你的代码是正确的,你的直方图应该有一个大约 200 的峰值,并且应该有一个长尾拖到右边。 这表明大多数模拟的最终价格都在 200 附近,但存在一些非常大的异常值。
创建一个降价单元格,说明您将要显示模拟最终价格的第 10、25、50、75 和 90 个百分位数。 使用 np.percentile 计算为股票生成的模拟运行中最终价格的第 10、第 25、第 50、第 75 和第 90 个百分位数。通过创建五行输出来显示结果,每行使用以下格式:__th 百分位数: _____ 将显示百分位数四舍五入到小数点后 2 位。 如果操作正确,您应该得到 118.05 的第 10 个百分位和 505.91 的第 90 个百分位。
def monte_carlo(start, rate, vol, days, num_runs):
final_prices =[]
annual_yields =[]
for runs in range(0, num_runs):
runs = simulate_stock(start, rate, vol, days)
y = runs[-1]
final_prices.append(y)
z = find_yield(runs)
annual_yields.append(z)
np.asarray(final_prices)
np.asarray(annual_yields)
return final_prices, annual_yields
np.random.seed(1)
final_prices, annual_yields = monte_carlo(200, 0.1, 0.4, 500, 10000)
plt.figure(figsize=[10, 5])
plt.hist(final_prices, bins=np.arange(0, 1600, 50), edgecolor='black')
【问题讨论】:
-
这里的问题是什么?请注意,Stack Overflow 是为了解决技术编码问题,而不是为贡献者做功课。
标签: python python-3.x numpy percentile simulate