在给定到期日和行使价的市场之间插入 price/IV 行使价和到期日

Interpolate price/IV for strike and expiry between market given expiry dates and strikes

我已经看过 "everywhere" 但找不到。是否有一个 示例 说明如何使用 c++ Quantlib 如何使用合成 strikes/expiry 日期对期权价格进行插值?

例如,如果 "today" 是 2017 年 2 月 6 日,我得到了 2017 年 2 月 17 日、2017 年 3 月 17 日、2017 年 4 月 14 日等到期日的 INTC 期权链的批量报价,并且为了争论起见,假设大众报价中的行使价从 15 到 45 以 5 美元的幅度递增,我计算给定到期市场的大众报价的 IV 表面 dates/strikes/prices(使用某种模型),如何插入 __synthetic__ 到期日 and/or 行权价,假设我想要 "April 5, 2017, 39.33 strike call" 期权的 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 表面已知值之间的 strike/tenor 维度上自举到某个给定的粒度。同样有趣的是,我们可以看到 NPV 的新值通过模拟更改基础值而无需额外工作 [因为市场数据存储在 Quote 实例中,因此可以在任何参数变化]并保持其他一切不变。图书馆不支持通过在 strikes/tenor 上打开拨号盘来支持相同类型的 "simulation" 似乎是一个遗漏。也是一个反问题,使用不同的维度。

我需要美国和欧洲的 with/without 股息。

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

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

来改变
volSurface.setInterpolation<Bicubic>();

施工后

构建表面后,您可以使用它来获取波动率和价格。要获得波动率,请问表面:

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

将在行权日期和行使价内插值和 return 波动率。要获得价格,将整个表面传递给 Black-Scholes 进程的实例,将进程传递给引擎并使用后者为选项定价;引擎将为给定的练习和行使价选择正确的波动率。