Bootstrapping Swap Curves and Diagnosing Spiky Forward Rates
Summary
The document describes a practitioner’s attempt to derive a money-market yield curve from observable interest rate swap rates whose floating coupons reference an average short-term forward rate. The author bootstraps the curve using linear interpolation assumptions applied in turn to average forward rates, non-average short-period rates, and spot rates. These approaches produce similar spot curves, yet materially different short-period forward curves, all with pronounced spikes. A Nelson–Siegel approach applied to the already smooth spot curve did not resolve the forward-rate pattern.
The discussion raises a curve-construction question: which interpolation target or parameterization can produce smoother forwards, and whether smoothing the spot curve is the more sensible approach. It provides no resolution or empirical comparison beyond the author’s reported experience, which involves an illiquid market and few observable swap tenors. The curve is for forecasting floating coupons; discount factors are derived separately from an overnight indexed swap curve. The post is therefore a practical problem statement rather than a validated recommendation.
Key ideas
- Bootstrapping results depend on whether linearity is imposed on average forwards, short-period forwards, or spot rates.
- Similar spot curves can imply quite different forward curves.
- Sparse and illiquid swap observations can make inferred forwards sensitive to interpolation choices.
- The author reports that fitting a Nelson–Siegel curve to smooth spot rates did not remove the forward spikes.
- Discount factors are derived from a separate overnight indexed swap curve.
Tags
Full text
# Saw-toothed forward rate yield curve structure # Saw-toothed forward rate yield curve structure I am trying to derive money market yield curve from observable IRS swap rates. IRS float coupon pays average 7D forward rate each quarter in arrears. For the last 2 years i've been using bootstrapping with an assumption of linear interpolation between average forward rates (which i think is a reasonable one) and doing a term shift to get regular (non-average) forward rates (because with an aforementioned linearity assumption average forward rate in coupon period equals forward rate in the middle of that period). Most of the time I was getting a pretty smooth curve considering the fact that market is illiquid and i have at most 14 observable swap rates. However, for the last month or so I've been getting saw-spiked forward rate curves like the one below. So i tried to smooth it with Nelson-Ziegel function but it didn't net me any good results, since i applied it to spot curve which was already smooth. So i decided to change the object of bootstrap. First i started bootstrapping with an assumption of linearity between 7D non-average rates (using which i calculated coupons). Next i tried using spot linearity. All 3 methods give relatively similiar results in terms of spot curves (like 4-5 bps difference). But when i start comparing 7D forward curves i get (expectedly) very different results and all of them show spikey structure. So i would like to ask for any pointers of what should i do next (to get a more smooth forward curve). Should i maybe use different type of interpolation or maybe some parametrisation (if so, is it reasonable to apply it to a forward curve). My intuition tells me that manipulating spot curve is the more rational way to do it, but I can't think of a way to get rid of these yearly spikes P.S. I dont use same curve for discounting - i derive DFs from which uses daily compounding (like SOFR, ESTER etc.): https://iss.moex.com/iss/analyticalproducts/curves/securities/RUB_OIS.json?from=2024-9-30&till=2024-9-30 7d AVG swap data:https://iss.moex.com/iss/analyticalproducts/curves/securities/RUB_KEYRATE_IRS.json?from=2024-9-30&till=2024-9-30
Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.