Skip to main content
CFDL

Credit: the discount margin of a floating-rate note

A six-year floating-rate note paying a reference rate plus 80 basis points semiannually, bought below par, and the spread over the reference at which its cash is worth the price: the discount margin.

Every number below is checked against an independent reference implementation on every commit — period by period, and on each metric, inside a declared tolerance. See benchmark methodology.

The case

A six-year floating-rate note paying a reference rate plus 80 basis points twice a year, bought at 99.3098 per 100 of face. The question a floater is quoted on is not its yield, which moves with every reset, but its discount margin: the spread over the reference rate at which the note's cash, discounted at the reference rate plus that spread, is worth the price paid.

The reference

A standard fixed-income textbook's worked example of the discount margin, which states the note, the price, a reference rate assumed flat at 10%, and the answer, 96 basis points. See SOURCE.md.

Provenance. The expectations are taken from an independent published reference, cited above. The source is not committed with the case; a reader checks the asserted figures against the published document itself.

What it exercises

Packnone
Contract typesnone; two hand-written streams
Language featuresa series-shaped assumption read at the period; spread over a selection at a price
Conventionsa semiannual payer on a monthly grid; the discount accruing simple between settlement dates

The note pays semiannually and the model runs monthly. The coupon stream occurs every month and carries cash in every sixth cell; the face returns with the last coupon. spread accrues its discount between the dates cash settles, six months apart, at the reference rate plus the spread, simple, which is the basis a floater's coupon accrues on and the definition the reference uses:

metric discount_margin = spread("frn.*", 100 * inputs.price, inputs.reference)

The result

Discount margin, solved95.99 basis points
Published96 basis points

Asserted within half a basis point, the print floor of a figure stated to the basis point. The coupon stream is pinned per period as the figure's basis.

The delta

Exact to the print floor. The residual is the rounding of the published figure. The reference discounts per semiannual period at half the annual reference rate plus half the margin; the model accrues the same quantity over each six-month stretch between settlement dates, which is the same arithmetic. On a grid that compounded the discount month by month the figure would read 72 basis points, which is the convention error this case exists to catch.

Run configuration

{
  "deterministic": {
    "annual_discount_rate": 0.10
  }
}

Verified results

Checked period by period: 1 series across 72 periods — 72 values in all, each within ±0.000001 of the reference.

  • frn.coupon

Summary metrics for the base run:

MetricValueTolerance
metric.discount_margin0.0096±0.00005