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.
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.
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 |
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.