In instruments like floating rate notes, floating legs of
swaps, caps and floors, the underlying rates are zero coupon interest rates
(rates based on one payment) and the pay-outs are calculated using the rates in
a natural way. A swap rate or bond yield
is a rate based on multiple payments. In
the Constant Maturity versions of floating
rate notes, floating legs, caps and floors, the pay-outs are based on swap
rates or bond yields but the pay-outs are calculated as if the rates or yields
were zero coupon rates. The term constant
maturity swap (
In general, in a risk-neutral world, if a derivative is
structured so that its payoff mirrors the payment pattern of the underlying
rate, as in vanilla swaps, caps and floors, the instrument can be valued by
assuming the expected future interest rate is the forward rate. However, if a derivative involves using a
rate in a non-natural way, the expected future interest rate will be equal to
the forward rate plus a convexity adjustment and a timing
adjustment. This is the
case for
The convexity adjustment arises because the derivative is
valued by calculating the expected payoff in a world that is forward risk
neutral with respect to the bond, and then discounting at the risk-free
rate. In this world, the expected bond
price equals the forward bond price.
However, the expected bond yield does not equal the forward yield (i.e.,
the yield corresponding to the forward bond price), because price is a
non-linear function of yield. It is the
expected yield that is required to calculate the expected payoff. The convexity adjustment is the amount that
must be added to the forward yield to give the expected yield. The convexity adjustment is derived by
assuming that the underlying swap/bond rate is lognormal, and its calculation
requires the value of the volatility of the log of the forward swap/bond rate.
A timing adjustment is required when the payoff for a
derivative occurs at some time after the underlying variable is observed. This is the usual case for
When the underlying bond is a zero-coupon bond, and the
swap provides a payment at the maturity of the bond equal to the yield observed
at the start of the pay leg, then the swap is a vanilla swap rather than a CMT
swap. In this case, in the framework
described above, the convexity adjustment exactly cancels the timing
adjustment, to give a total adjustment of zero.
This result is consistent with the standard method of valuing vanilla
swaps, which is to assume that the forward rates will be realized with no
adjustment (in the traditional risk-neutral world), and to discount the cash
flows at the risk-free rate.
For more details on calculating the convexity and timing
adjustments, we refer the reader to
The volatility parameters are an integral requirement of
the constant maturity valuation. They
are used by the functions to calculate the required convexity and timing
adjustments. The short term rate
volatility and yield volatility also need to be calculated (or be entered by
the user) for all reset periods.
1. The
short term rate is the quarterly rate.
The best instruments to use to calculate the required volatility are
quoted caps/floors. Given the example
above, the user could use a quoted 10 year quarterly reset cap/floor. If the required cap/floor is unavailable, use
aaVol_Crv2_Rcap_BL to bootstrap the required volatilities given other data.
2. The
yield volatility is the volatility of the underlying rate that is used in the
constant maturity instrument. In our
example, this is the 5 year par swap rate.
The instruments that could be used are quoted swaptions. Given the above example, the instruments used
could be a swaption expiring in 3 months into a 5 year swap (3m x 5y), 6m x 5y,
9m x 5y, etc. If specific maturities are unavailable, interpolated volatilities
may be required (use aaInterp to calculate).
aaFRN_CM_cf(d_v, CM_pay, CM_r_rate, CM_fixpay, df_crv_acc,
df_crv_disc, freq_cm, numcf_cm, acc_cm, d_rul_cm, acc_pay, acc_accrued, intrp, position,
hl, table_type)
aaFRN_CM_p(d_v, CM_pay, CM_r_rate, CM_fixpay, df_crv_acc,
df_crv_disc, freq_cm, numcf_cm, acc_cm, d_rul_cm, acc_pay, acc_accrued, intrp, position,
hl, stat)
aaFRN_CM_iv(d_v, CM_pay, CM_r_rate, CM_fixpay, df_crv_acc,
df_crv_disc, freq_cm, numcf_cm ,acc_cm, d_rul_cm, acc_pay, acc_accrued, intrp, position,
hl, price)
aaFRN_CM_dgen_tables(d_v, d_e, d_t, d_f_cpn, d_l_cpn, frn_tbl, fixed_reset_tbl,
freq_pay, d_rul_pay, set_pay, sprd, reset_mktdays, vol_corr_tbl, intrp, hl, table_type)
aaFRN_CM_dgen_cf(d_v, d_e, d_t, d_f_cpn, d_l_cpn, frn_tbl, fixed_reset_tbl,
freq_pay, acc_pay, d_rul_cm_pay, acc_accrued, set_pay, df_crv_acc, df_crv_disc,
freq_cm, numcf_cm, acc_cm, d_rul_cm, sprd, reset_mktdays, vol_corr_tbl, method,
intrp, position, hl, table_type)
aaFRN_CM_dgen_p(d_v, d_e, d_t, d_f_cpn, d_l_cpn, frn_tbl, fixed_reset_tbl,
freq_pay, acc_pay, d_rul_cm_pay, acc_accrued, set_pay, df_crv_acc, df_crv_disc,
freq_cm, numcf_cm, acc_cm, d_rul_cm, sprd, reset_mktdays, vol_corr_tbl, method,
intrp, position, hl, stat)
aaFRN_CM_dgen_iv(d_v, d_e, d_t, d_f_cpn, d_l_cpn, frn_tbl, fixed_reset_tbl,
freq_pay, acc_pay, d_rul_cm_pay, acc_accrued, set_pay, df_crv_acc, df_crv_disc,
freq_cm, numcf_cm, acc_cm, d_rul_cm, sprd, reset_mktdays, vol_corr_tbl, method,
intrp, position, hl, price)
aaCaplet_CM_BL(r_option_type, npa, d_v, d_exp, d_e, d_t,
paydate, cm_reset, scalefactor, rate_ex, acc_pay, vlt_cm, vlt_fwd, corr_cm,
d_cm_reset, d_cm_e, freq_cm, numcf_cm_yld, acc_cm, d_rul_cm, hl, df_crv_acc,
df_crv_disc, intrp, stat)
aaRcap_CM_BL(d_v, CM_caplet_tbl, r_option_type,
scalefactor, acc_pay, freq_cm, numcf_cm_yld, acc_cm, d_rul_cm, hl, df_crv_acc,
df_crv_disc, method, intrp)
aaRcap_CM_BL_p(d_v, CM_caplet_tbl, r_option_type,
scalefactor, acc_pay, freq_cm, numcf_cm_yld, acc_cm, d_rul_cm, hl, df_crv_acc,
df_crv_disc, method, intrp, stat)
aaRcap_CM_BL_iv(d_v, CM_caplet_tbl, price, r_option_type,
scalefactor, acc_pay, freq_cm, numcf_cm_yld, acc_cm, d_rul_cm, hl, df_crv_acc,
df_crv_disc, method, intrp)
aaRcap_CM_BL_dgen_tables(d_v, d_e, d_m, d_f_cpn, d_l_cpn, freq,
eff_mktdays, npa, rate_ex, vol_corr_tbl, r_table, r_option_type, set_pay,
scalefactor, acc_cm, acc_pay, hl, d_rul_pay, freq_cm, numcf_cm_yld, d_rul_cm,
df_crv_acc, df_crv_disc, method, intrp)
aaRcap_CM_BL_dgen(d_v, d_e, d_m, d_f_cpn, d_l_cpn, freq,
eff_mktdays, npa, rate_ex, vol_corr_tbl, r_table, r_option_type, set_pay,
scalefactor, acc_cm, acc_pay, hl, d_rul_pay, freq_cm, numcf_cm_yld, d_rul_cm,
df_crv_acc, df_crv_disc, method, intrp)
aaRcap_CM_BL_dgen_p(d_v, d_e, d_m, d_f_cpn, d_l_cpn, freq,
eff_mktdays, npa, rate_ex, vol_corr_tbl, r_table, r_option_type, set_pay,
scalefactor, acc_cm, acc_pay, hl, d_rul_pay, freq_cm, numcf_cm_yld, d_rul_cm,
df_crv_acc, df_crv_disc, method, intrp, stat)
aaRcap_CM_BL_dgen_iv(d_v, d_e, d_m, d_f_cpn, d_l_cpn, freq,
eff_mktdays, npa, rate_ex, price, vol_corr_tbl, r_table, r_option_type,
set_pay, scalefactor, acc_cm, acc_pay, hl, d_rul_pay, freq_cm, numcf_cm_yld,
d_rul_cm, df_crv_acc, df_crv_disc, method, intrp)
These functions extend the regular cap/floor functions
using Black’s model to
These 8 functions mirror the existing functions for caps
and floors using Black’s model (aaCaplet_BL, aaRcap_BL,
etc.) and the additional function aaRcap_CM_BL_dgen_tables. This function generates the
aaFRN_CM_cf
Input Argument |
Description |
d_v |
value date |
CM_pay |
A table containing the
coupon payment dates and notional amount for each coupon. |
CM_r_rate |
A table containing
information related to the underlying swap rates or bond yields. Note that each reset leg must be associated
with a single pay leg through the ID argument. |
CM_fixpay |
A 2-column table
containing dates and cash flow amounts.
This table can be used for any exchanges of principal, etc. |
df_crv_acc |
A curve of discount
factors. This curve is used for
calculating the implied forward swap rates or bond yields. |
df_crv_disc |
A curve of discount
factors. This curve is used for
discounting the cash flows. |
freq_CM |
The frequency of the
underlying swap rate or bond yield: 1 = annual, 2 = semi-annual, 3 = quarterly, 4 = monthly |
numcf_cm |
The number of cash
flows in the underlying swap rate or bond yield. For example if the underlying is a 10 year |
acc_cm |
The accrual of the
underlying swap rate or bond yield. |
d_rul_cm |
The business day convention
for the underlying yield. |
acc_pay |
The accrual for
calculating the coupons |
acc_accrued |
The accrual for
calculating accrued interest |
interp |
Interpolation method
for interpolating from the curves |
position |
1 = long, 2 = short |
hl |
A holiday list |
table_type |
1 or 2 (see Description of Outputs below) |
Output Table Type |
Description |
(table_type=1) |
a 9 column table with
information on the implied yields, the convexity adjustment. |
(table_type=2) |
an 8 column table with
information on the actual coupon payments, notional payments etc. |
The functions aaFRN_CM_p and aaFRN_CM_iv
take similar inputs as the aaFRN_CM_cf function,
all of which allows custom structures to be defined. The function aaFRN_CM_p calculates
price and risk statistics. The aaFRN_CM_iv
calculates the implied volatility spread (applied to both the
volatility of the yield rate and the volatility of the short-term rate)
required for a given price.
The functions aaFRN_CM_dgen_tables,
aaFRN_CM_dgen_cf, aaFRN_CM_dgen_p and aaFRN_CM_dgen_iv are
used to generate
Consider the following three tables, CM_pay, CM_r_rate and
CM_fixedpay.
Payment Table - constant maturity
ID number |
effective date |
terminating date |
payment date |
notional principal amount |
1 |
15-Nov-1996 |
15-May-1997 |
15-May-1997 |
100 |
Reset Table - constant maturity
ID number |
reset date |
effective date |
yield |
margin above or below a floating rate |
volatility of yield rate |
volatility of short-term rate |
correlation |
1 |
14-Nov-1996 |
15-Nov-1996 |
0 |
0 |
0.15 |
0.20 |
0.70 |
Fixed Payment Table - constant maturity floating leg
payment date |
payment amount |
15-May-1997 |
100 |
These three tables describe a CMT floating rate
note, where a 6-month coupon will be paid on 15-May-97 on a notional of
100. The underlying swap rate (or bond
yield) will be set on 14-Nov-1996 and will be effective 15-Nov-1996. The yield has not been set and there is no
margin, the yield volatility is 15% (note that it is assumed the yield is
lognormal when calculating the convexity adjustment so this 15% is the
volatility of the log of the yield).
Note that if the yield had already been reset (if the value date were
after 14-Nov-1996), then the yield must be non-zero in the CM_r_rate
table. The volatility of the forward
short-term rate (for the period 14-Nov-96 to 15-May-97 relative to the value
date) is 20%, and the correlation between this rate and the underlying bond
yield (or swap rate) is 0.70. Finally,
the last table indicates that there will be a principal payment of 100 on
15-May-1997.
Suppose that the input freq_CM = 2, numcf_cm = 10, acc_CM
= 4 (30/360), and the value date is 1-Jan-1995.
This means that the underlying yield, which will be set on 14-Nov-1996,
is a 5-year semi-annual bond yield.
Output Table Type = 1:
Yield Table
ID |
reset date |
effective date |
terminating date |
yield to maturity |
adjustment |
adjusted yield |
rate + spread |
volatility |
1 |
14-Nov-1996 |
15-Nov-1996 |
15-Nov-2001 |
0.06000 |
0.00032 |
0.06032 |
0.06032 |
0.15 |
This indicates that the implied 5-year
semi-annual yield is 6.000%, the calculated total adjustment (convexity
adjustment plus timing adjustment) is 3.2 basis points and the adjusted
yield is 6.032%.
Output Table Type = 2:
Cashflow Table
date |
coupon |
notional |
total |
PV coupon |
PV notional |
PV total |
15-May-1997 |
3.016 |
100 |
103.016 |
2.621 |
86.915 |
89.536 |
This indicates that on 15-May-1997 an (implied)
coupon of 3.016 will be received and a notional amount of 100 will also be
received. The total is 103.016. The present value of each of these is shown
in the last three columns.
If the eighth column of the CM_r_rate table were missing
(i.e., only 7 columns provided), then the correlation would be assumed to be 1
for each reset. If the seventh column
were also missing (i.e., only 6 columns provided), then the volatility of the
forward short-term rate would be assumed to be the same as the volatility of
the underlying bond/swap rate. Note that
the calculation only uses the product of the correlation (column 8) and the
volatility of the forward short-term rate (column 7). For example, a correlation of 0.7 and a
short-term volatility of 20% will give the same results as a correlation of 1.0
and a short-term volatility of 14%.
In these functions, there is an input to specify
the method of calculating the convexity adjustment. Currently, all the
There are functions in FINCAD XL for valuing
[2]
Hagan, P., (March 2003), ‘Convexity Conundrums:
Pricing
[3]
[5]
Pugachevsky, D., (March 2001)
‘Forward
[6]
Zhao,
E.Y., Tavella, D., (1997), ‘Exact Pricing Formula for
Caps and Floors in Arrears’, Journal of
Financial Engineering, Volume 6 / Number 1, pp.321-329.
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.