VBA中的SABR模型隐含波动率

时间:2018-09-14 15:38:28

标签: vba quantitative-finance

我正在尝试编写一个代码,该代码将根据给定上述参数的SABR模型来计算隐含波动率。但是,我总是得到ATM卷的NA。正在使用的隐含波动率公式是:enter image description here

Function SABRIV(alpha As Double, beta As Double, v As Double, rho As Double, f As Double, k As Double, T As Double) As Double
Dim z As Double
Dim x As Double
Dim numerator As Double
Dim denominator As Double

z = (v / alpha) * ((f * k) ^ ((1 - beta) / 2)) * Application.Ln(f / k)
x = Application.Ln((Sqr(1 - 2 * rho * z + z ^ 2) + z - rho) / (1 - rho))
numerator = ((1 - beta) ^ 2 / 24) * ((alpha ^ 2) / ((f * k) ^ (1 - beta))) + 1 / 4 * (rho * beta * v * alpha) / ((f * k) ^ ((1 - beta) / 2)) + (((2 - 3 * rho ^ 2) * v ^ 2) / 24)
denominator = (((f * k) ^ ((1 - beta) / 2)) * (1 + (((1 - beta) ^ 2) / 24) * (Application.Ln(f / k) ^ 2) + (((1 - beta) ^ 4) / 1920) * (Application.Ln(f / k) ^ 4)))

SABRIV = (alpha * (1 + numerator) * T) / denominator * z / x
End Function

1 个答案:

答案 0 :(得分:0)

波动率 ATM(when f==K) 有一个特例公式。查看您的函数 z/x(z)==1,由于 f**(1 - beta) 消失,因此分母减少为 log(f/K),因此您得到:

SABRIV = (alpha * (1 + numerator) * T) / denominator