首页 > 解决方案 > 用于计算期权价格的数组函数

问题描述

我正在尝试在 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)

错误消息现在是: 在此处输入图像描述

我试图避免“直接”循环遍历 xS 数组。显然,在 Python 中没有足够的细微差别来做到这一点....会很感激一些建议。谢谢,C

标签: pythonmultidimensional-array

解决方案


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

d1是一个简单的 Python 列表。

d2=[d1-sigma*pow(T,0.5) for S in xS]

在这里,您尝试从整个列表中减去一个浮点值,然后重复执行len(xS)。你认为你应该从中获得什么功能?这当然不合法。

您可以从 NumPy 数组中减去浮点数,但不能从列表中减去。


推荐阅读