Skip to content

Commit 2aba236

Browse files
pcaspersjenkins
authored andcommitted
QPR-11772 fixes
1 parent 6a3089e commit 2aba236

4 files changed

Lines changed: 12 additions & 6 deletions

File tree

OREData/ored/marketdata/capfloorvolcurve.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,6 @@ CapFloorVolCurve::CapFloorVolCurve(
7676
const bool buildCalibrationInfo)
7777
: spec_(spec) {
7878

79-
QL_REQUIRE(boost::dynamic_pointer_cast<BMAIndexWrapper>(iborIndex) == nullptr,
80-
"CapFloorVolCurve: BMA/SIFMA index in '"
81-
<< spec_.curveConfigID()
82-
<< " not allowed - vol surfaces for SIFMA can only be proxied from Ibor / OIS");
83-
8479
try {
8580
// The configuration
8681
const boost::shared_ptr<CapFloorVolatilityCurveConfig>& config =
@@ -90,6 +85,11 @@ CapFloorVolCurve::CapFloorVolCurve(
9085
// handle proxy vol surfaces
9186
buildProxyCurve(*config, sourceIndex, targetIndex, requiredCapFloorVolCurves);
9287
} else {
88+
QL_REQUIRE(boost::dynamic_pointer_cast<BMAIndexWrapper>(iborIndex) == nullptr,
89+
"CapFloorVolCurve: BMA/SIFMA index in '"
90+
<< spec_.curveConfigID()
91+
<< " not allowed - vol surfaces for SIFMA can only be proxied from Ibor / OIS");
92+
9393
// Read the shift early if the configured volatility type is shifted lognormal
9494
Real shift = 0.0;
9595
if (config->volatilityType() == CfgVolType::ShiftedLognormal) {

OREData/ored/portfolio/fixingdates.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
#include <qle/cashflows/averageonindexedcoupon.hpp>
2626
#include <qle/cashflows/bondtrscashflow.hpp>
27+
#include <qle/cashflows/cappedflooredaveragebmacoupon.hpp>
2728
#include <qle/cashflows/cmbcoupon.hpp>
2829
#include <qle/cashflows/commodityindexedaveragecashflow.hpp>
2930
#include <qle/cashflows/commodityindexedcashflow.hpp>
@@ -501,6 +502,8 @@ void FixingDateGetter::visit(AverageBMACoupon& c) {
501502
c.date());
502503
}
503504

505+
void FixingDateGetter::visit(CappedFlooredAverageBMACoupon& c) { c.underlying()->accept(*this); }
506+
504507
void FixingDateGetter::visit(CmsSpreadCoupon& c) {
505508
// Enforce fixing to be added even if coupon pays on settlement.
506509
requiredFixings_.addFixingDate(c.fixingDate(),

OREData/ored/portfolio/fixingdates.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class StrippedCappedFlooredCoupon;
4949
} // namespace QuantLib
5050

5151
namespace QuantExt {
52+
class CappedFlooredAverageBMACoupon;
5253
class AverageONIndexedCoupon;
5354
class OvernightIndexedCoupon;
5455
class BondTRSCashFlow;
@@ -177,6 +178,7 @@ class FixingDateGetter : public QuantLib::AcyclicVisitor,
177178
public QuantLib::Visitor<QuantExt::OvernightIndexedCoupon>,
178179
public QuantLib::Visitor<QuantExt::CappedFlooredOvernightIndexedCoupon>,
179180
public QuantLib::Visitor<QuantLib::AverageBMACoupon>,
181+
public QuantLib::Visitor<QuantExt::CappedFlooredAverageBMACoupon>,
180182
public QuantLib::Visitor<QuantLib::CmsSpreadCoupon>,
181183
public QuantLib::Visitor<QuantLib::DigitalCoupon>,
182184
public QuantLib::Visitor<QuantLib::StrippedCappedFlooredCoupon>,
@@ -217,6 +219,7 @@ class FixingDateGetter : public QuantLib::AcyclicVisitor,
217219
void visit(QuantExt::OvernightIndexedCoupon& c) override;
218220
void visit(QuantExt::CappedFlooredOvernightIndexedCoupon& c) override;
219221
void visit(QuantLib::AverageBMACoupon& c) override;
222+
void visit(QuantExt::CappedFlooredAverageBMACoupon& c) override;
220223
void visit(QuantLib::CmsSpreadCoupon& c) override;
221224
void visit(QuantLib::DigitalCoupon& c) override;
222225
void visit(QuantLib::StrippedCappedFlooredCoupon& c) override;

QuantExt/qle/utilities/cashflows.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ Real getOisAtmLevel(const boost::shared_ptr<OvernightIndex>& on, const Date& fix
4141
Real getBMAAtmLevel(const boost::shared_ptr<BMAIndex>& bma, const Date& fixingDate,
4242
const Period& rateComputationPeriod) {
4343
Date today = Settings::instance().evaluationDate();
44-
Date start = bma->valueDate(fixingDate);
44+
Date start = bma->fixingCalendar().advance(fixingDate, 1 * Days);
4545
Date end = bma->fixingCalendar().advance(start, rateComputationPeriod);
4646
Date adjStart = std::max(start, today);
4747
Date adjEnd = std::max(adjStart + 1, end);

0 commit comments

Comments
 (0)