Python: Monte Carlo 模拟
Python: Monte Carlo Simulation
我什至不确定如何继续或哪里出错了,我得到了一个大数组
这是说明
创建一个显示 2 级 header 的降价单元格,内容为:“D 部分:Monte Carlo 模拟”。还要在这部分添加一些文本,简要描述您的代码的用途。
编写一个名为 monte_carlo 的函数。该函数应接受五个参数:start、rate、vol、days 和 num_runs。该函数应使用循环来生成数量等于 num_runs 的模拟股票 运行s。 运行s 的特征由参数 start、rate、vol 和 days 提供。下面提供了此功能的详细描述。每次循环执行时,应执行以下步骤:
- 使用提供的参数模拟 运行。将结果数组存储在变量中。
- 确定股票的最终模拟价格并将其附加到名为 final_prices 的列表中。
- 确定模拟 运行 的年产量并将其附加到名为 annual_yields 的列表中。
当循环完成执行时,将您构造的两个列表转换为 numpy 数组和
return他们两个。
创建一个降价单元格来说明您将通过 运行使用特定种子进行 Monte Carlo 模拟来测试该功能。
设置种子为 1,运行 一个 Monte Carlo 模拟,由 10,000 个模拟 运行 组成,当前价格为 200 的股票,预期年度 return 为 10% ,波动率为 0.4。每个 运行 应该超过 500 天。创建最终价格的直方图。使用 bins=np.arange(0, 1600, 50),并将边缘颜色设置为黑色。设置尺寸
图为 [10,5]。
如果您的代码是正确的,您的直方图应该在 200 左右有一个峰值,并且应该有一个向右拖尾的长尾巴。
这表明大多数模拟的最终价格都在 200 附近,但也有一些非常大的异常值。
创建一个降价单元格来说明您将要显示模拟最终价格的第 10、25、50、75 和 90 个百分位数。
使用 np.percentile 计算为股票生成的模拟 运行 中最终价格的第 10、25、50、75 和 90 个百分位数。通过创建五行输出来显示结果,每行使用以下格式:__th
百分位数:_____
将显示百分位数四舍五入到小数点后两位。
如果操作正确,您应该得到第 10 个百分位数 118.05 和第 90 个百分位数 505.91。
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')
np.asarray
不会更改原位的值,但 return 是一个结果。您正在将这两个值转换为一个 numpy 数组,然后丢弃结果。所以你想要像
这样的东西
return np.asarray(final_prices), np.asarray(annual_yields)
作为第二个小问题,您使用 runs
作为 运行 的计数和 simulate_stock
的 return 值。更多的 Pythonic 会写成:
for _ in range(0, num_runs)
因为您并不真正关心它在您的计算中是哪个 运行 数字。如果您认为以后需要这个值:
for run_number in range(0, num_runs)
我什至不确定如何继续或哪里出错了,我得到了一个大数组
这是说明
创建一个显示 2 级 header 的降价单元格,内容为:“D 部分:Monte Carlo 模拟”。还要在这部分添加一些文本,简要描述您的代码的用途。 编写一个名为 monte_carlo 的函数。该函数应接受五个参数:start、rate、vol、days 和 num_runs。该函数应使用循环来生成数量等于 num_runs 的模拟股票 运行s。 运行s 的特征由参数 start、rate、vol 和 days 提供。下面提供了此功能的详细描述。每次循环执行时,应执行以下步骤:
- 使用提供的参数模拟 运行。将结果数组存储在变量中。
- 确定股票的最终模拟价格并将其附加到名为 final_prices 的列表中。
- 确定模拟 运行 的年产量并将其附加到名为 annual_yields 的列表中。 当循环完成执行时,将您构造的两个列表转换为 numpy 数组和 return他们两个。
创建一个降价单元格来说明您将通过 运行使用特定种子进行 Monte Carlo 模拟来测试该功能。 设置种子为 1,运行 一个 Monte Carlo 模拟,由 10,000 个模拟 运行 组成,当前价格为 200 的股票,预期年度 return 为 10% ,波动率为 0.4。每个 运行 应该超过 500 天。创建最终价格的直方图。使用 bins=np.arange(0, 1600, 50),并将边缘颜色设置为黑色。设置尺寸 图为 [10,5]。 如果您的代码是正确的,您的直方图应该在 200 左右有一个峰值,并且应该有一个向右拖尾的长尾巴。 这表明大多数模拟的最终价格都在 200 附近,但也有一些非常大的异常值。
创建一个降价单元格来说明您将要显示模拟最终价格的第 10、25、50、75 和 90 个百分位数。 使用 np.percentile 计算为股票生成的模拟 运行 中最终价格的第 10、25、50、75 和 90 个百分位数。通过创建五行输出来显示结果,每行使用以下格式:__th 百分位数:_____ 将显示百分位数四舍五入到小数点后两位。 如果操作正确,您应该得到第 10 个百分位数 118.05 和第 90 个百分位数 505.91。
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')
np.asarray
不会更改原位的值,但 return 是一个结果。您正在将这两个值转换为一个 numpy 数组,然后丢弃结果。所以你想要像
return np.asarray(final_prices), np.asarray(annual_yields)
作为第二个小问题,您使用 runs
作为 运行 的计数和 simulate_stock
的 return 值。更多的 Pythonic 会写成:
for _ in range(0, num_runs)
因为您并不真正关心它在您的计算中是哪个 运行 数字。如果您认为以后需要这个值:
for run_number in range(0, num_runs)