2022年 11月 16日

python绘制隐含波动率曲面_Python中的隐含波动率计算

根据答案中的注释,我重新编写了下面的代码(math.1p(x)->;math.log(x)),它现在应该可以工作了,并给出了波动率的一个很好的近似值。

我试图创建一个短代码来计算欧洲看涨期权的隐含波动率。我写了下面的代码:from scipy.stats import norm

import math

norm.cdf(1.96)

#c_p – Call(+1) or Put(-1) option

#P – Price of option

#S – Strike price

#E – Exercise price

#T – Time to expiration

#r – Risk-free rate

#C = SN(d_1) – Ee^{-rT}N(D_2)

def implied_volatility(Price,Stock,Exercise,Time,Rf):

P = float(Price)

S = float(Stock)

E = float(Exercise)

T = float(Time)

r = float(Rf)

sigma = 0.01

print (P, S, E, T, r)

while sigma < 1:

d_1 = float(float((math.log(S/E)+(r+(sigma**2)/2)*T))/float((sigma*(math.sqrt(T)))))

d_2 = float(float((math.log(S/E)+(r-(sigma**2)/2)*T))/float((sigma*(math.sqrt(T)))))

P_implied = float(S*norm.cdf(d_1) – E*math.exp(-r*T)*norm.cdf(d_2))

if P-(P_implied) < 0.001:

return sigma

sigma +=0.001

return “could not find the right volatility”

print implied_volatility(15,100,100,1,0.05)

收益率:0.595波动率,应该在0.3203左右。这是一个巨大的不同。。。

我知道无论如何这不是一个快速的方法,我只是想演示原理是如何工作的,但我不能计算出一个好的近似值。

由于某种原因,当我调用这个函数时,它给了我一个非常糟糕的实际隐含波动率的近似值,我是用一个Matlab程序和下面的网页计算的:Implied Volatility。有谁能帮我找出我在哪里犯的错误吗?