F(a) и F(b) должны иметь разные знаки, чтобы исключить ошибку брента?

#scipy #scipy-optimize

Вопрос:

При расчете подразумеваемой волатильности опциона с входными данными и функцией ниже я получаю ошибку F(a) и F(b), которые должны иметь разные знаки. Я попытался увеличить интервал и максимальное количество итераций, но это не решает проблему. Есть ли другой способ устранить эту ошибку или хороший способ выбрать начальный интервал, чтобы избежать ее?

из импорта scipy оптимизируйте импорт scipy.статистика как si def calcimpliedvol(S,K,T,r,рыночная цена):

 def bs_price(sigma):
    d1=(np.log(S/K) (r 0.5*sigma**2)*T)/(sigma*np.sqrt(T))
    d2=d1-(sigma*np.sqrt(T))
    BSprice_call=S*si.norm.cdf(d1,0,1)-K*np.exp(-r*T)*si.norm.cdf(d2,0,1)
    fx=BSprice_call-marketoptionPrice
    return fx

return optimize.brentq(bs_price,0.0001,1,maxiter=1000)
 

calcimpliedvol(S=38,01,K=4,T=0,0031, r=0, рыночная цена=0,595)