book_irds3
book_irds3 copied to clipboard
Erratum: Example 23.9: Calculating roll-down on par IRS
The error here regards the roll-down calculation of the 3M. When 0.70 O/N rate is held constant the compounded up 3M rate is not 0.75% but is closer to 0.7005%. This results in 10bps roll-down, not 5bps.
And for what its worth you can replicate this numerically using rateslib
from rateslib import *
curve = Curve(
nodes={
dt(2025, 11, 4): 1.0,
dt(2025, 11, 5): 1.0,
dt(2026, 2, 6): 1.0,
dt(2027, 8, 4): 1.0,
dt(2027, 11, 9): 1.0,
},
calendar="nyc",
convention="act360",
id="v",
)
solver = Solver(
curves=[curve],
instruments=[
IRS(dt(2025, 11, 4), "1b", spec="usd_irs", curves=curve),
IRS(dt(2025, 11, 4), "3m", spec="usd_irs", curves=curve),
IRS(dt(2025, 11, 4), "21m", spec="usd_irs", curves=curve),
IRS(dt(2026, 2, 4), "21m", spec="usd_irs", curves=curve),
],
s=[0.70, 0.80, 2.28, 2.45]
)
print(IRS(dt(2025, 11, 4), "2Y",spec="usd_irs", curves=curve).rate())
print(IRS(dt(2025, 11, 4), "2Y",spec="usd_irs", curves=curve.roll("3m")).rate())
##
<Dual: 2.241506, (v0, v1, v2, ...), [51.0, 0.0, -0.6, ...]>
<Dual: 2.079712, (v0, v1, v2, ...), [4670.7, -4670.8, -0.7, ...]>
##
The roll down is 16.2bps