0

关于 C++ Quantlib 中的 date-advance 函数,我有一个小问题。我想为具有付款工作日约定“之前”的产品使用付款抵消(以天为单位),但付款日期始终设置为周末后的第一天,而付款日期在周末。这是因为,当“天”被移交给“提前”功能时,“提前”功能会忽略工作日约定,请参见此处:

 Date Calendar::advance(const Date& d,
                       Integer n, TimeUnit unit,
                       BusinessDayConvention c,
                       bool endOfMonth) const {
    QL_REQUIRE(d!=Date(), "null date");
    if (n == 0) {
        return adjust(d,c);
    } else if (unit == Days) {
        Date d1 = d;
        if (n > 0) {
            while (n > 0) {
                d1++;
                while (isHoliday(d1))
                    d1++;
                n--;
            }
        } else {
            while (n < 0) {
                d1--;
                while(isHoliday(d1))
                    d1--;
                n++;
            }
        }
        return d1;
    } else if (unit == Weeks) {
        Date d1 = d + n*unit;
        return adjust(d1,c);
    } else {
        Date d1 = d + n*unit;

        // we are sure the unit is Months or Years
        if (endOfMonth && isEndOfMonth(d))
            return Calendar::endOfMonth(d1);

        return adjust(d1, c);
    }
}

这是故意实施的吗?ps“调整”功能正确使用工作日约定!

4

2 回答 2

0

是的,付款抵消总是工作日。所以 OISRateHelper 的调用有点误导,因为你可以交出一个工作日约定来进行支付抵消。

ql.OISRateHelper(0,
                     ql.Period(swapMaturity),
                     ql.QuoteHandle(rate),
                     eoniaIndex,
                     termStructureHandle,
                     False,
                     paymentOffset,
                     ql.Preceding
                     )
于 2020-06-18T13:04:35.100 回答
0

是的,如果它不破坏客户端代码,这是我要解决的问题之一。在天数的情况下,Calendar::advance指“提前几个工作日”;该约定不适用,因为通过这种方式前进,您永远不会进入假期。

如果您的意思是“提前几个日历日(例如 2 天)然后调整”,您可以准确地写成:

Date paymentDate = calendar.adjust(date + 2, convention);
于 2020-06-18T09:24:30.993 回答