我正在尝试对 Callpayoffs 中的值进行求和,因为它们代表基于先前路径 Assets 价格循环中生成的最后价格的 yield 。如果我运行 10 次模拟,则根据每个模拟路径(有 252 个价格点)的最后价格,应该有 10 个 Callpayoffs。不幸的是,我无法将 Callpayoffs
列表中的值相加。非常感谢任何帮助 - 下面是 print(sum(Callpayoffs)
4.620174500863143
22.762337253759725
0
51.97221078945353
基于我的代码
import numpy as np
import pandas as pd
from math import *
import matplotlib.pyplot as plt
from matplotlib import *
def Generate_asset_price(S,v,r,dt):
return (1 + r * dt + v * sqrt(dt) * np.random.normal(0,1))
# initial values
S = 100
v = 0.2
r = 0.05
T = 1
N = 252 # number of steps
dt = 0.00396825
simulations = 4
for x in range(simulations):
stream = [100]
Callpayoffs = []
t = 0
for n in range(N):
s = stream[t] * Generate_asset_price(S,v,r,dt)
stream.append(s)
t += 1
Callpayoffs.append(max(stream[-1] - S,0))
print(sum(Callpayoffs))
plt.plot(stream)
最佳答案
您需要在 for
循环之外初始化 Cardpayoffs
,并在迭代列表后调用 sum
。以下应该可以解决问题:
Callpayoffs = []
for x in range(simulations):
stream = [100]
t = 0
for n in range(N):
s = stream[t] * Generate_asset_price(S,v,r,dt)
stream.append(s)
t += 1
Callpayoffs.append(max(stream[-1] - S,0))
print(sum(Callpayoffs))
plt.plot(stream)
关于python - 总结蒙特卡洛的场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55987590/