用于计算期权价格的数组函数

我试图用Python实现我的第一个BS选项模型,但是我不想一次传递一个底层证券价格,而是想传递一个数组。这是代码和错误消息:

xS=np.arange(10,110,10)

C=np.maximum(xS-K,0)

def bsm_call(S,K,T,r,sigma):

    d1=[(log(S/K) + 0.5 * pow(sigma,2)*T)/(sigma*pow(T,0.5)) for S in xS ] 

    d2=[d1-sigma*pow(T,0.5)]

    vC=[S * stats.norm.cdf(d1,0,1) - K * exp(-r*T) * stats.norm.cdf(d2,0,1)]

    return np.array(vC)

extC=bsm_call(xS,K,T,r,sigma)

生成:TypeError:-:“ list”和“ float”的不受支持的操作数类型

不知道这意味着什么,但我认为它不喜欢我传递xS数组的方式。因此,为了测试,我尝试了:

def test(S,K,T,r,sigma):    
    d1=[(log(S/K) + 0.5 * pow(sigma,2)*T)/(sigma*pow(T,0.5)) for S in xS ] 
    return np.array(d1)

test1=test(xS,K,T,r,sigma)
print(test1)

这给了我d1的一些值(不确定它们是否正确....但是至少代码可以正常工作)。因此,为此感到鼓舞,我尝试添加第二行:

def test(S,K,T,r,sigma):    
    d1=[(log(S/K) + 0.5 * pow(sigma,2)*T)/(sigma*pow(T,0.5)) for S in xS ] 
    d2=[d1-sigma*pow(T,0.5) for S in xS]
    return np.array(d1+d2)

test1=test(xS,K,T,r,sigma)
print(test1)

The error message is now: enter image description here

我试图避免“直接”遍历xS数组。显然,在Python中没有足够的细微差别可以做到这一点。谢谢,C