编写一个 python 脚本来计算 Implied Normal Vol ;符合 Jekel 文章(行业标准)。
https://jaeckel.000webhostapp.com/ImpliedNormalVolatility.pdf
他们说他们正在使用广义不完全伽马函数逆。
来电:
F(x)=v/(K - F) -> 找到使这成为真的 x
其中 F 是逆不完全 Gamma 函数
并且 x = (K - F)/(T*sqrt(T) ; v 是调用的值
对于那个 x,IV 是 =(KF)/x*sqrt(T)
我正在使用的示例:
F=40
X=38
T=100/365
v=5.25
音量= 20%
使用方程式我应该能够回退 20% 的 Vol
Scipy 在其特殊功能中有上下不完全 Gamma Function Inverse。
较低: scipy.special.gammaincinv(a, y) :{a 必须是正参数}
上: 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)
我知道我错了,但是我哪里错了/我该如何解决它并使用我在文章中读到的内容?