>我一直在使用 QuantLib 1.6.2 从 CDS 引导危险率曲线。我的代码CDS.cpp
类似于QuantLib 分布,即
boost::shared_ptr<PiecewiseDefaultCurve<HazardRate, BackwardFlat> >
hazardRateStructure(new PiecewiseDefaultCurve<HazardRate, BackwardFlat>
(todaysDate, instruments, Actual365Fixed()));
我尝试尝试不同的非线性插值方法(而不是上面列出的BackwardFlat
),例如:
CubicNaturalSpline
KrugerCubic
Parabolic
FritschButlandCubic
MonotonicParabolic
但是我收到错误" no appropriate default constructor available
"。将这些插值器之一传递给 PiecewiseDefaultCurve
课?
谢谢
克里斯
[注意:如果有人偶然发现了这个问题,我在这里复制了我在QuantLib邮件列表中给你的答案。
您列出的类是实际的插值类,但曲线需要相应的工厂类(例如,示例中BackwardFlat
是BackwardFlatInterpolation
类的工厂)。 对于三次插值,您必须使用 Cubic
类。默认情况下,它会构建克鲁格插值(我不知道选择的原因),所以如果你写:
PiecewiseDefaultCurve<HazardRate, Cubic>(todaysDate, instruments, Actual365Fixed())
您将使用 KrugerCubic
类获得一条曲线。 要获取其他插值,您可以传递带有相应参数的 Cubic
实例(您可以在插值类的构造函数中查找它们);例如
PiecewiseDefaultCurve<HazardRate, Cubic>(todaysDate, instruments, Actual365Fixed(),
1e-12, Cubic(CubicInterpolation::Spline, false))
将使用CubicNaturalSpline
类为您提供曲线,并且
PiecewiseDefaultCurve<HazardRate, Cubic>(todaysDate, instruments, Actual365Fixed(),
1e-12, Cubic(CubicInterpolation::Parabolic, true))
将使用MonotonicParabolic
类。