对于市场给定的到期日和罢工之间的罢工和到期的内插价格/ IV

时间:2017-02-04 23:26:36

标签: c++ quantlib

我看上去“无处不在”,但我找不到一个。是否有一个示例关于如何使用c ++ Quantlib来插入具有合成罢工/到期日的期权价格?

例如,如果“今天”是2017年2月6日,我将获得2017年2月17日,2017年3月17日,2017年4月14日(等)到期日的INTC期权链的大量报价,并为此论证说,大众报价中的罢工从15到45增加了5美元,并且我根据到期日/罢工/价格(使用某些模型)来计算市场大众报价的IV表面,怎么做插入__synthetic__到期日和/或罢工,说我想要“2017年4月5日,39.33罢工”选项的IV和价格?

我看到QL支持这些插值方法,但我不确定使用哪个或如何设置问题来运行求解器。

LinearInterpolation (1-D)
LogLinearInterpolation and LogCubicInterpolation (1-D)
BackwardFlatInterpolation (1-D)
ConvexMonotone (1-D)
CubicInterpolation (1-D)
ForwardFlatInterpolation (1-D)
SABRInterpolation (1-D)
BilinearInterpolation (2-D)
BicubicSpline (2-D)

[我可能不想使用每周的插值来介于两者之间。可能只有月度和季度到期,因为我认为这些价格特别是到期后的更长时间。]

这是一个类似于引导收益率曲线的问题,除了我们在vol表面上的已知值之间的str / tenor维度上引导到一些给定的粒度。同样有趣的是,我们可以通过模拟更改基础值而无需额外工作来查看NPV更改选项的新值[因为市场数据存储在Quote实例中,因此可以在任何时候通知选项参数改变]并保持其他一切不变。通过转动罢工/男高音拨号,图书馆不支持同样的“模拟”似乎是一个遗漏。这也是一个反问题,使用不同的维度。

我需要美国和欧洲有/无股息。

1 个答案:

答案 0 :(得分:1)

你创建一个黑色波动率表面并让它插值。

目前,唯一可以执行此操作的课程是BlackVarianceSurface课程。它的构造函数采用运动日期向量,罢工向量和相应波动率矩阵。矩阵必须是满的,因此您需要为每个运动和罢工组合引用波动率。默认情况下,它在方差上使用双线性插值;可以通过调用

来更改方法
volSurface.setInterpolation<Bicubic>();

施工后。

一旦建立了表面,就可以用它来获得波动率和价格。为了获得波动性,请询问表面:

Volatility v = volSurface.blackVol(exerciseDate, strike);

将在锻炼日期进行插值并点击并返回波动率。为了得到这个价格,将整个表面传递给Black-Scholes过程的一个实例,将过程传递给引擎并使用后者为期权定价;引擎将为给定的练习和攻击选择正确的波动率。