true_divide中遇到无效值

时间:2017-01-12 11:53:06

标签: python

我正在尝试使用python计算黑色scholes公式的隐含波动率。但是,我的代码有问题。运行代码时,我不断收到此错误消息:

RuntimeWarning: divide by zero encountered in true_divide
v = sigmaOld - bs_option_call(v, s, k, r, t, call_price1)/fprime(sigmaOld, s, k, r, t)e here

这是我的代码:

while True:
for (v, k, s, t, call_price1) in zip(sigma, K, S, Ta, call_price_list):
    sigmaOld = v
    v = sigmaOld - bs_option_call(v, s, k, r, t, call_price1) / fprime(sigmaOld, s, k, r, t)
    if scipy.absolute( v - sigmaOld ) < epsilon:
        break
print(sigma)

其中fprime

def fprime(sigma, S, K, r, T):
    logSoverK = log(S / K)
    numerd1 = logSoverK + (r + sigma**2 / 2) * T
    d1 = numerd1 / (sigma*sqrt(T))
    return S * sqrt(T) * norm.pdf(d1) * exp(-r * T) 

和K,Ta,S,sigma,call_price_list是列表,r只是一个数字。

我尝试使用

import numpy as np
np.seterr(divide='ignore', invalid='ignore')

但由于某些原因它对我没用!

任何人都可以看看我的代码并告诉我我的错误是什么! 非常感谢提前

1 个答案:

答案 0 :(得分:1)

向stderr打印错误和警告是默认的Python功能。

您收到此警告是因为您正在除以零,即fprime返回零。

如果您想使用warning filters取消警告:

np.seterr(divide='ignore')

它会告诉Numpy忽略除零警告 - seterr所允许的所有参数。