编写一个python脚本来计算隐含正常波动率;符合Jekel文章(行业标准)。
https:/jaeckel.000webhostapp.comImpliedNormalVolatility.pdf。
他们说他们使用的是广义不完全伽马函数反。
对于一个调用。
F(x)=v(K - F) -> 找出能使之为真的x。
其中F为反不完全伽马函数。
而x = (K - F)(T*sqrt(T);v是调用的值。
对于该x,IV为=(K-F)x*sqrt(T)
我的工作实例。
F=40
X=38
T=100365
v=5.25
Vol=20%
使用公式,我应该可以倒退20%的电压。
Scipy的特殊函数中有上位和下位不完全伽马函数反演。
下限:scipy.special.gammaincinv(a, y) : {a必须是正参数}。
Upper: scipy.special.gammainccinv(a, y) : {a必须是正参数}。
Implementation:
SIG= sympy.symbols('SIG')
F=40
T=100/365
K=38
def Objective(sig):
SIG=sig
return(special.gammaincinv(.5,((F-K)**2)/(2*T*SIG**2))+special.gammainccinv(.5,((F-K)**2)/(2*T*SIG**2))+5.25/(K-F))
x=optimize.brentq(Objective, -20.00,20.00, args=(), xtol=1.48e-8, rtol=1.48e-8, maxiter=1000, full_output=True)
IV=(K-F)/x*T**.5
Print(IV)
我知道我错了,但我哪里错了,我如何解决它,并使用我在文章中读到的?