我在R中使用RQuantlib
包来计算隐含波动率。作为函数EuropeanOptionImpliedVolatility
的输入,我使用TTM天数除以365.但如果我使用输出隐含波动率来计算使用手工制作的Black Scholes函数的期权价格,我会以不同的值结束。
我发现原因属于europeanOptionImpliedVolatilityEngine
,它使用转换来转换输入小数年
int(maturity*360 + 0.5);
因此,在某些情况下,这最终会将传递给C代码函数的TTM值移动1天,在我的情况下约有70%的数据被移位。
x=OptGreeks$TTM/365
y=floor(x*360+0.5)
z=OptGreeks$TTM - y
table(z)
输出
z
0 1
2636 4910
任何想法为什么要这样做以及任何措施得到正确的日子(TTM)而不是这个异常?希望有人听。
答案 0 :(得分:1)
该函数应该可以扩展,以便人们可以选择日计数约定,如果您熟悉C ++并且可以修补和重新编译RQuantLib,那就是要走的路。
与此同时,我担心解决问题的方法是让你使用days / 360。这意味着您还必须调整输入率和输出波动率;你想要满足的关系是r 360 t 360 = r 365 t 365 (你将从中得到)得到r 360 作为输入,给定你的r 365 )和sigma 2 360 t 360 = sigma 2 365 t 365 (从中你将获得sigma 365 给出返回sigma 360 )。