蒙特卡洛的求和结果

时间:2019-05-04 21:10:07

标签: python python-3.x for-loop

我正在尝试对“ Callpayoff”列表中的值求和,但是无法这样做,print(Callpayoff)返回一个垂直列表:

0
4.081687878300656
1.6000410648454846
0.5024316862043037
0

所以我想知道这是否是一个特殊的子列表吗? sum(Callpayoff)不能正常工作。任何帮助将不胜感激。

def Generate_asset_price(S,v,r,dt):
    return (1 + r * dt + v * sqrt(dt) * np.random.normal(0,1))

def Call_Poff(S,T):
    return max(stream[-1] - S,0)


# initial values
S = 100
v = 0.2
r = 0.05
T = 1
N = 2 # number of steps 
dt = 0.00396825
simulations = 5

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
        Callpayoff = Call_Poff(S,T)
    print(Callpayoff)
    plt.plot(stream)

1 个答案:

答案 0 :(得分:0)

现在,您没有将值附加到列表中,只是在每次迭代中替换class MyClass { String name; @JsonProperty("final") String someName; } 的值并进行打印。在每次迭代时,它都打印在新行上,因此看起来像一个“垂直列表”。

您需要做的是使用Callpayoff而不是Callpayoffs.append(Call_Poff(S,T))

现在,在Callpayoff = Call_Poff(S,T)循环的每次迭代中,都会向Callpayoffs添加一个新元素。

然后,您可以使用for打印列表,或使用print(Callpayoffs)打印总和

所有print(sum(Callpayoffs))循环应如下所示:

for

输出:

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(Call_Poff(S,T))
    print(Callpayoffs,"sum:",sum(Callpayoffs))