@@ -286,7 +286,7 @@ void Swaption::buildBermudan(const boost::shared_ptr<EngineFactory>& engineFacto
286286 // determine strikes for calibration basket (simple approach, a la summit)
287287 // also determine the ibor index (if several, chose the first) to get the engine
288288 std::vector<Real> strikes (exerciseBuilder_->noticeDates ().size (), Null<Real>());
289- boost::shared_ptr<IborIndex > index;
289+ boost::shared_ptr<InterestRateIndex > index;
290290 for (Size i = 0 ; i < exerciseBuilder_->noticeDates ().size (); ++i) {
291291 Real firstFixedRate = Null<Real>();
292292 Real firstFloatSpread = Null<Real>();
@@ -305,6 +305,9 @@ void Swaption::buildBermudan(const boost::shared_ptr<EngineFactory>& engineFacto
305305 DLOG (" found cms index " << tmp->name () << " , use key '" << tmp->iborIndex ()->name ()
306306 << " ' to look up vol" );
307307 index = tmp->iborIndex ();
308+ } else if (auto tmp = boost::dynamic_pointer_cast<BMAIndex>(cpn->index ())) {
309+ DLOG (" found bma/sifma index '" << tmp->name () << " '" );
310+ index = tmp;
308311 }
309312 }
310313 }
@@ -324,7 +327,7 @@ void Swaption::buildBermudan(const boost::shared_ptr<EngineFactory>& engineFacto
324327 }
325328
326329 if (index == nullptr ) {
327- DLOG (" no ibor, ois, cms index found, use ccy key to look up vol" );
330+ DLOG (" no ibor, ois, bma/sifma, cms index found, use ccy key to look up vol" );
328331 }
329332
330333 auto builder = engineFactory->builder (" BermudanSwaption" );
0 commit comments