Skip to content
All library documents

Fitting a Corporate Zero Curve to Bond Prices

Article Quant Q&A · Author: Max 1000000

Summary

The document outlines a method for building monthly A-or-better US corporate yield curves from bond-level index data. For each date, select bonds meeting the specified S&P or Moody’s rating threshold, convert clean prices to full prices by adding accrued interest, and fit a zero-rate curve to those prices. Nelson–Siegel is offered as one possible curve form, with parameters estimated by minimizing the difference between model and observed bond prices. The fit may weight each bond by its amount outstanding.

The method prices each bond as a stream of coupon and principal cash flows discounted at zero rates for their respective payment dates. This is presented as more appropriate than fitting yields to maturity directly. Once the curve is fitted, calculate zero rates at the requested maturities, then derive par yields by finding the coupon that prices a hypothetical bond at par. The example formulas assume annual coupons; semiannual payment schedules require adjustments. The response does not provide the requested monthly numerical series or specify all practical choices needed for a production curve.

Key ideas

  • Filter each month’s bond data using the stated rating threshold and add accrued interest to clean prices.
  • Fit a zero curve to full bond prices by minimizing pricing errors, optionally weighting bonds by issuance size.
  • Discount each bond cash flow using the zero rate for its payment date.
  • Derive par yields from the fitted curve by solving for the coupon that gives a par price.
  • The formulas assume annual coupons and need adjustment for semiannual payments.

Tags

Full text
# How to Construct a Corporate Yield Curve


# How to Construct a Corporate Yield Curve












I received this question in a job interview. I don't really have fixed income background and was wondering if anyone can help me understand how to figure out this for myself.

Create a 12 month time series representing the “A-AAA” yield at the 2yr, 5yr, 10yr, 20yr and 30yr maturity points. “A-AAA” is defined as all bonds whose S&P rating is A- or better or Moody’s rating is A3 or better.

Please provide results in the following format: Date 2yr Yield 5yr Yield 10yr Yield 20yr Yield 30yr Yield 4/30/2013 5/31/2013 … 2/28/2014 3/31/2014

The raw input data provided is bond level data for the constituents of a US Corporate Bond Index for each of 12 consecutive month ends from 4/30/2013 to 3/31/2014.

Example rows and file header

AsOfDate,Identifier,Amount Outstanding,Description,Coupon,Maturity Date, Price,Yield,Moody's Rating,S&P Rating

3/31/2014,00037BAA, 500000,ABB FINANCE USA INC,1.625,5/8/2017,100.436928,1.48,A2 ,A

## Answer by Dom (score 0, accepted)

https://quant.stackexchange.com/a/30606

I find the task a little strange as there is usually a big difference between A and AAA yields.

But if this is really what is needed then I would do as follows. For each date:

i) I would pull in all of the bonds in the A-AAA category. I would then calculate their full prices by adding the accrued interest on to the provided clean price. That I can easily calculate from the bond information provided.

ii) I would then attempt to best-fit a zero curve form such as the Nelson-Siegel function to these full bond prices using a least squares approach. For example the Nelson-Siegel model has three main parameters $\beta_0, \beta_1,\beta_2$ and the exercise is to find the value of these parameters that fits the market prices best. This can be done easily in something like Excel Solver. The objective function you are minimising is something like

$\hat{O}(\beta_0,\beta_1,\beta_2) = \sum_{k=1}^K \left(P(\beta_0,\beta_1,\beta_2)-P_k \right)^2$

It might also be advisable to weight different bonds by their issuance size $N_k$. So you could change this to

$\hat{O}(\beta_0,\beta_1,\beta_2) = \sum_{k=1}^K N_k \left(P_k(\beta_0,\beta_1,\beta_2)-P_k \right)^2$

This would result in a curve that is the best fit to that set of bonds and which takes into account the different issuance sizes. Doing this will require me to value each bond $k$ as a stream of $M_k$ discounted cash flows using the appropriate zero rate $r(t)$ for that future date, i.e.

$P_k(\beta_0,\beta_1,\beta_2) = \sum_{i=1}^{M_k} \frac{c_k}{(1+r(t_i))^i}+ \frac{1}{(1+r(t_{M_k}))^{M_k}}$

I have written $r(t)$ rather than $r(t,\beta_0,\beta_1,\beta_2)$ to simplify notation.

Note how the discount zero rate $r(t)$ depends on the cash flow time. This approach is therefore more correct that using a yield-to-maturity based approach.

iii) From my fitted curve, I would calculate the 2Y, 5Y, 10Y, 20Y, 30Y zero rates as required. Calculating the different bond yields is simply a matter of solving for the bond coupon that makes a 2Y, 5Y, 10Y, 20Y, 30Y bond price to par. The formula for the $M$-year yield is

$y(M) = \left( 1-\frac{1}{(1+r(t_M))^M}\right) \left( {\sum_{i=1}^M \frac{1}{(1+r(t_i))^i}}\right)^{-1}$

This all assumes annual coupons. For semi-annual coupons you should adjust accordingly.

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.