在为浮动利率债券定价时,需要使用 USDLibor 类别的实例,并在给定日期(相当于最后一个重置日期减去两个工作日)添加新的定价。但是,有时它会在运行时抱怨,告诉用户指定日期的修复不可用(意味着提供了错误日期的修复)。
USDLibor 的实例如何知道哪个日期是正确的?我问这个是因为也许我可以通过直接检索正确的日期来解决这个问题,因为 USDLibor 让它解决了找出正确日期的问题。
正如你所说,修复日期是重置日期前两个工作日(逻辑的实现在FloatingRateCoupon::fixingDate()
方法中,如果你想检查它)。
但是,您可能使用了错误的工作日。USD LIBOR 在伦敦是固定的,所以假期是根据英国日历而不是美国日历确定的。
无论如何,一旦你建立了债券,你可以用这样的方式询问现金流本身的定价日期(我没有测试过,所以它甚至可能无法编译,但你应该明白了):
using namespace QuantLib;
Leg cashflows = bond.cashflows();
std::vector<Date> fixingDates;
for (Size i=0; i<cashflows.size(); ++i) {
boost::shared_ptr<FloatingRateCoupon> coupon =
boost::dynamic_pointer_cast<FloatingRateCoupon>(cashflows[i]);
if (coupon)
fixingDates.append(coupon->fixingDate());
}
之后,fixingDates
向量将包含(毫不奇怪)固定日期。