Implement IMM_ROLL tenor resolution for credit/CDS conventions

Table of Contents

This page is a capture in the inbox bucket of the product backlog — a pre-sprint idea, not yet pulled into a sprint as a story.

What

Implement the IMM_ROLL branch of the tenor resolver (ores.marketdata.api::domain::resolve_end_date()), which currently throws std::logic_error whenever tenor_convention.resolution_algorithm is IMM_ROLL. This means stepping through IMM Dates' quarterly roll schedule by offset_multiplier roll-quarters from the horizon's most recent roll, rather than the anchor+offset arithmetic the ANCHOR_OFFSET branch already implements. Also seed the tenor_convention_resolution rows for the CREDIT_CDS_IMM convention (offset_unit = 'ROLL_QUARTER', offset_multiplier = the roll-quarter count per nominal tenor, e.g. 1Y 1RQ) — deliberately not done in the originating task since the exact roll-quarter-per-tenor mapping was not sourced anywhere in the knowledge cluster and fabricating it would have been a hack.

Why

The persisted tenor data model (tenor=/=tenor_anchor=/ =tenor_convention=/=tenor_convention_resolution) was deliberately designed so credit/CDS's genuinely different resolution algorithm fits without a schema change: resolution_algorithm and the offset_unit=/=offset_multiplier columns already accommodate it. Only the resolver code and CDS-specific seed data are outstanding — this capture exists so that gap doesn't get silently forgotten once the ["DQ dataset for tenor reference data"] work closes as apparently complete for two conventions.

References

  • Tenor — the "Tenor conventions by curve type" section, including the CDS 1Y 1RQ disambiguation notation.
  • IMM Dates — the quarterly roll schedule to step through.

See also

Emacs 29.3 (Org mode 9.6.15)