Skip to content

[QL-4b/6/7/8][DEFER] BMA municipal-swap curve vertical: AverageBMACoupon -> BMAIndex -> BMASwap -> BMASwapRateHelper #565

Description

@benbenbang

BMA (SIFMA municipal) swap curve - a deferred 4-piece vertical

Carved out of #343 (which is now otherwise complete: BondHelper/FixedRateBondHelper +
bond arm, FraRateHelper, FuturesRateHelper all landed). BMASwapRateHelper is the last
unported member of the rate-helper family, but it is not leftover cleanup - it is a whole
municipal-rate vertical with an unported dependency chain, so it gets its own tracker.

Dependency chain (nothing below is ported today - verified grep, 2026-07-25)

layer piece QuantLib source
L7 cashflow AverageBMACoupon + its pricer ql/cashflows/averagebmacoupon.{hpp,cpp}
L6 index BMAIndex (InterestRateIndex subclass: fixingSchedule, maturityDate) ql/indexes/bmaindex.{hpp,cpp} (69 + 97 LOC)
L8 instrument BMASwap ql/instruments/bmaswap.{hpp,cpp}
L4b helper BMASwapRateHelper (RelativeDateRateHelper, holds a BMASwap) ql/termstructures/yield/ratehelpers.hpp:294-327

Oracle

testBMACurveConsistency (QuantLib/test-suite/piecewiseyieldcurve.cpp:566+), a separate
test from testCurveConsistency. Fixture bmaData (:154-166, 10 tenors 1Y-30Y, the
liborFraction quotes 67.56-73.81). The bootstrapped curve must reprice the BMA swap quotes
within tolerance.

Suggested ticket split when picked up (dependency order)

  1. AverageBMACoupon + pricer (L7) - the cashflow the swap is built from.
  2. BMAIndex (L6) - averaged index with its own fixing schedule.
  3. BMASwap (L8) - the instrument.
  4. BMASwapRateHelper + testBMACurveConsistency (L4b) - the payoff.

Priority

Low. BMA/SIFMA is a niche US municipal-rate product; no other ported code depends on it,
and the mixed-strip bootstrap (deposits + futures + FRA + swaps) already exercises the
bootstrapper end-to-end. Deferred visibly rather than silently. Epic: EPIC-4b (#337), touches
EPIC-6 (#68) / EPIC-7 (#69) / EPIC-8 (#70).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions