Bond Credit Spreads

Overview

In the area of credit derivatives and arbitrage bond trading, it is a standard analysis to compare the yield of a risky bond, for example a corporate bond, with the yields of benchmark bonds, for example US Treasury bonds.  FINCAD provides functions for calculating prices, yields and prices from curves of all sorts of bonds (see the math reference for other Bond Documents).  The following two functions provide the ability to calculate a bond’s spreads against a given benchmark curve.  This benchmark curve could be, for example, a treasury or a swap curve.

FINCAD Functions

aaCreditSpread_Bond(d_v, d_exp, d_dated, d_f_cpn, d_l_cpn, cpn, redemp_val, freq, acc, clean_p, linlast, exdays, adj_units, hl, d_rul, atissue, intrp, df_crv, rate_basis_hgn, acc_mgn, sprd_type, stat)

 

aaCreditSpread_Bond_dgen(d_v, d_exp, d_dated, d_f_cpn, d_l_cpn, bondcpn_tbl, freq, acc, clean_p, linlast, exdays, adj_units, hl, d_rul, atissue, intrp, df_crv, rate_basis_hgn, acc_mgn, sprd_type, stat)

Given a benchmark curve (discount factor curve), and the clean price of the bond, calculates the implied spread of the bond over this benchmark curve.

The spread that is calculated has the following meaning.  Consider the benchmark curve and consider the spot rates associated with each point in the curve.  If we take the implied spread and add it to each spot rate, the resulting curve will value the risky bond to its given clean price.  It is important to note that the spread as calculated considers the whole term structure of interest rates.  In contrast, a yield-based comparison essentially assumes that the term structure of interest rates is flat.  For more details on adding spread to curves, please see the Interest Rate Curve Utilities FINCAD Math Reference document.

The function aaCreditSpread_Bond() works for generic, periodic, level coupon bonds (like the aaBond3* suite of bonds) and aaCreditSpread_Bond_dgen() works for periodically paying bonds with time varying notional and coupon amounts and principal payments (like the aaBond_dgen* suite of functions).  For more details please see the General Bond Functions FINCAD Math Reference document.

 

Example

The details are best explained by considering the following example.  Suppose that today’s benchmark curve is, (and today is 1-Jan-2002 = d_v):

Date

Discount Factor

Spot Rate
(ann, act/365)

01-Jan-2002

1.000000

4.0000%

01-Jan-2003

0.961538

4.0000%

01-Jan-2004

0.920036

4.2552%

01-Jan-2005

0.875904

4.5114%

01-Jan-2006

0.829607

4.7775%

01-Jan-2007

0.781567

5.0497%

01-Jan-2008

0.739488

5.1562%

01-Jan-2009

0.698068

5.2647%

01-Jan-2010

0.657421

5.3790%

01-Jan-2011

0.617609

5.4969%

01-Jan-2012

0.578703

5.6188%

We note that this curve was calculated using annual, act/365, swap rates of 1Y=4%, 5Y = 5%, 10Y = 5.5% with no date adjustment nor settlement days (use aaSwap_crv()).  Now consider a 5-year bond, maturity date = 1-Jan-2007 (d_exp), coupon = 10% (cpn), annual (freq = 1), act/365 (acc_bond =1) with no odd-dates (d_dated = d_first = d_l_cpn = 0) and a market quoted clean price of 102 (price).  Suppose we set the spread (and spot rate) basis to be annually compounded (rate_basis_mgn = 1) and the accrual to be act/365 (acc_mgn = 1).  The result from the function aaCreditSpread_Bond() is 4.52542568%.  We note that, internally, this spread is calculated by using a Newton-Raphson iteration on the spread.

This means that if we add this spread to the spot rates of the benchmark curve, we will obtain a curve that values our bond to this clean price of 102.  We can check that this is true by adding the above spread to the benchmark curve using the function aaDFCuve_Spread() or calculating the actual discount factors for each of the given spot rates (using aaConverR_DF() or aaConvertR_DFcrv()).  The result is:

Date

Discount Factor

spot rate (ann, act/365)

1-Jan-2002

1

 

1-Jan-2003

0.921443057

8.52543%

1-Jan-2004

0.845078959

8.78058%

1-Jan-2005

0.77121857

9.03682%

1-Jan-2006

0.700433989

9.30291%

1-Jan-2007

0.632893225

9.57517%

1-Jan-2008

0.574231211

9.68162%

1-Jan-2009

0.519796908

9.79016%

1-Jan-2010

0.469520266

9.90441%

1-Jan-2011

0.423100754

10.02237%

1-Jan-2012

0.38032167

10.14427%

We note that the result is actually only the first two columns, the third is shown so that one can see the spot rates.  If we then use this discount factor curve to price the bond (zero-coupon pricing) using the function aaBond3_strip_p(), we make the round-trip and obtain the clean price of 102.0000005 (the error in the 7th decimal place is due to small numerical errors).

 

 

Disclaimer

 

With respect to this document, FinancialCAD Corporation (“FINCAD”) makes no warranty either express or implied, including, but not limited to, any implied warranty of merchantability or fitness for a particular purpose. In no event shall FINCAD be liable to anyone for special, collateral, incidental, or consequential damages in connection with or arising out of the use of this document or the information contained in it. This document should not be relied on as a substitute for your own independent research or the advice of your professional financial, accounting or other advisors.

 

This information is subject to change without notice. FINCAD assumes no responsibility for any errors in this document or their consequences and reserves the right to make changes to this document without notice.

 

Copyright

 

Copyright © FinancialCAD Corporation 2008. All rights reserved.