巴切利耶法线隐含电压Python计算 (帮助) Jekel

问题描述 投票:0回答:1

编写一个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)

我知道我错了,但我哪里错了,我如何解决它,并使用我在文章中读到的?

python-3.x quantitative-finance gamma-function computational-finance
1个回答
0
投票

你是否也发布了这个上 量化金融栈交流? 在那里你可能会得到更好的回应。

这不是我的领域,但看起来你的主要问题是...。Brentq 需要通过的 Objective 函数,当传入 -2020 参数。然而,这最终不会发生,因为根据scipy文档。伽马辛夫γinccinv 总是返回一个介于0和无穷大之间的值。

很遗憾,我不知道如何解决这个问题。你是否尝试过实现论文第二部分中的分析解(而不是迭代寻根)?

© www.soinside.com 2019 - 2024. All rights reserved.