Skip to content

Commit 36d0f35

Browse files
pcaspersjenkins
authored andcommitted
QPR-11772 bma coupon has one additional fixing date at the end that needs to be removed!
1 parent 7bc11c6 commit 36d0f35

1 file changed

Lines changed: 4 additions & 1 deletion

File tree

QuantExt/qle/cashflows/blackaveragebmacouponpricer.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ void BlackAverageBMACouponPricer::initialize(const FloatingRateCoupon& coupon) {
4141
}
4242

4343
Real BlackAverageBMACouponPricer::optionletRate(Option::Type optionType, Real effStrike) const {
44-
Date lastRelevantFixingDate = coupon_->underlying()->fixingDates().back();
44+
Date lastRelevantFixingDate = coupon_->underlying()->fixingDate();
4545
if (lastRelevantFixingDate <= Settings::instance().evaluationDate()) {
4646
// the amount is determined
4747
Real a, b;
@@ -57,6 +57,9 @@ Real BlackAverageBMACouponPricer::optionletRate(Option::Type optionType, Real ef
5757
// not yet determined, use Black model
5858
QL_REQUIRE(!capletVolatility().empty(), "BlackAverageBMACouponPricer: missing optionlet volatility");
5959
std::vector<Date> fixingDates = coupon_->underlying()->fixingDates();
60+
QL_REQUIRE(!fixingDates.empty(),
61+
"BlackAverageBMACouponPricer: internal error, got empty fixingDates, contact dev.");
62+
fixingDates.erase(fixingDates.back()); // there is one additional date returned!
6063
QL_REQUIRE(!fixingDates.empty(), "BlackAverageBMACouponPricer: empty fixing dates");
6164
bool shiftedLn = capletVolatility()->volatilityType() == ShiftedLognormal;
6265
Real shift = capletVolatility()->displacement();

0 commit comments

Comments
 (0)