BlackVarianceSurface 的 IV 锯齿状引用

Jagged Quote of IV for BlackVarianceSurface

我正在遵循 this 示例并努力使其适应我的需要。

在代码部分:

implied_vols[i][j] = data[j][i]

implied_vols = ql.Matrix(len(strikes), len(expiration_dates))
for i in range(implied_vols.rows()):
    for j in range(implied_vols.columns()):
        implied_vols[i][j] = data[j][i]
  [1]: http://gouthamanbalaraman.com/blog/volatility-smile-heston-model-calibration-quantlib-python.html

这假设 IV matrix 在给定的到期日内具有所有对应的 strikes。事实上,正是出于这个原因,[质量] quote 通常存储在 dictionary 而不是 array 中。

例如在 SPX 中,我们在不同的 expiration 处有不同的 strike 增量。因此,一些 strikes 在一次到期时为空,但在另一次到期时则为空。我意识到我可以通过使 matrix 单元格始终具有数值来强制这种情况,但我假设在给定的 strike/expiry 处插入 0 不是一个好主意。或者,将所有 expiry 强制为 expiry 之间的 strikes 的最小公分母会抛出大量数据。

如果您的 volatility 引号不是正方形的,并且您不想在构建 ql.Matrix 交给 BlackVarianceSurface 时丢弃数据,会发生什么情况?

遗憾的是,没有现成的解决方案。正如您所说,用 0 填充缺失的单元格是个坏主意;但是通过手动插入缺失值来填充它们应该可行。执行此操作的方法可能取决于数据的稀疏程度...