This document is a supplement to the Interest Rate Caps and Floors FINCAD
Math Reference document. In this document, we focus on the special features of
average rate caps and floors. The
function is aaRCapAsian().
A standard rate cap (rate floor) consists of a series of
caplets (floorlets). Each caplet has an
option expiry date, which is generally the date on which the forward rate is
set, and effective and terminating dates which describe the tenor of the
underlying forward rate. For example,
consider a 6% caplet, on a notional of $1M, on the March 2002 3-month LIBOR
rate. The rate is effective from 20-March-2002
until 20-June-2002 and this rate is set 2 market days prior on
18-March-2002. The purchaser of the
caplet has effectively set a 5% ceiling on the interest that he will have to
pay, on $1M, during this 3-month time period.
Similarly, the purchaser of a floorlet would be guaranteed a floor, of
5%, on the amount of interest he or she would receive during this period.
An average cap (floor), like a standard cap, consists of a
string of caplets (floorlets). The
additional feature is that instead of the rate being based on one single reset
rate, the caplet rate is the average of two or more
reset rates. For example,
consider a 6% caplet, on a notional of $1M, on a 6-month rate based on the
average of the March-2002 and the June-2002 3-month LIBOR rates. For example, if the March rate is set at 5.1%
and the June rate at 6%, the caplet rate is equal to 5.6% = (5.2% + 6%)/2. Note, in the function, this type of average
is obtained by setting the switch avg_type =
2. It is possible to use a weighted
average, avg_type = 1, described in more
detail later on.
aaRCapAsian(d_v,
r_option_type, avg_type, rcap_obj, reset_tbl, acc, df_crv_acc, df_crv_disc,
scale_rate, intrp, rcap_output):
Argument |
Description |
d_v |
Settlement / valuation date. This is the date that the cap and all
caplets will be priced at. |
r_option_type |
1 = rate cap, 2 = rate floor |
avg_type |
How to average the resets.
The methods are a weighted average, where the weights are determined
by the number of days that a reset contributes to the total final rate
(avg_type = 1) or a regular arithmetic average of the rates (avg_type = 2). |
rcap_obj |
A description of the caplets. It has 5-columns: effective date,
terminating date, notional, exercise rate and implied volatility. The input of volatility allows the cap to
be priced with a term structure of volatilities. |
reset_table |
A table that describes the underlying reset rates. It has 4-columns: reset date, effective
date, terminating date and the current fixing of the reset. If the rate has not been set, the current
fixing is not required and may be set to zero (or even a blank cell). |
acc |
The accrual of the reset rates and the cap (or floor)
rate. There are 10 possible settings. |
df_crv_acc |
The accruing curve.
The implied reset rates will be estimated using this curve. |
df_crv_disc |
The discounting curve.
This curve is used for discounting.
Often the two discount factor curves will be the same. |
scale_rate |
This will scale the reset rates. This allows the possibility, for example,
of using the LIBOR curve (df_crv_acc), but scaling the LIBOR reset by 80%
(use a rate equal to 0.8 * LIBOR). |
intrp |
Interpolation method.
Used for interpolating from both discount factor curves. |
Consider a caplet or floorlet period that spans from 1-Jan-2001
to 1-Jul-2001. Suppose the underlying
resets are monthly and set on the 15th of each month. The resets that apply to the period above
are:
Effective |
Terminating |
Rate |
# days in caplet |
|
15-Jan-2001 |
5.0% |
14 |
|
15-Feb-2001 |
5.2% |
31 |
|
15-Mar-2001 |
5.5% |
28 |
|
15-Apr-2001 |
5.0% |
31 |
|
15-May-2001 |
5.3% |
30 |
|
15-Jun-2001 |
5.4% |
31 |
|
15-Jul-2001 |
5.0% |
16 |
The simple arithmetic average (avg_type = 2) is easily shown to be 5.2%. On the other hand, the weighted average (avg_type = 1), where the weighting is by number of
days in the caplet period, is equal to (5% *14 + … + 5% * 16) / 181 = 5.22983%.
Consider a rate cap from
Date |
Discount Factor |
01-Nov-2001 |
1.000000 |
01-Nov-2002 |
0.952381 |
01-Nov-2003 |
0.902619 |
01-Nov-2004 |
0.851040 |
01-Nov-2005 |
0.822595 |
The Caplet dates for both deals is:
Effective |
Terminating |
20-Aug-2001 |
20-Feb-2002 |
20-Feb-2002 |
20-Aug-2002 |
with the cap rate set at 4%. All volatilities are assumed to be 20%.
For the regular cap, the reset dates are the same as
the caplet dates and the rate for the first 6-month period has been set at 5%. For the average cap, the resets are quarterly
and cycle off 20-Aug-2002:
Reset date |
Effective |
Terminating |
Rate (if reset) |
20-Aug-2001 |
20-Aug-2001 |
20-Nov-2001 |
5.000% |
20-Nov-2001 |
20-Nov-2001 |
20-Feb-2002 |
|
20-Feb-2002 |
20-Feb-2002 |
20-May-2002 |
|
20-May-2002 |
20-May-2002 |
20-Aug-2002 |
|
The result from the regular function, aaRCap_BL(),
(Cap_settle = 1, in arrears, all accruals = 1, act/365, and scale_factor = 1) gives a total cap value of
$9066.68 (or 0.9067% of notional) and the output is:
expiry |
effective |
term |
principal |
strike |
vol |
fair value |
delta |
gamma |
theta |
vega |
forward rate |
intrinsic value |
20-Aug-2001 |
20-Aug-2001 |
20-Nov-2001 |
1,000,000 |
4% |
20% |
2514.30 |
0.000 |
0.000 |
0.000 |
0.000 |
5.000% |
2,514.30 |
20-Nov-2001 |
20-Nov-2001 |
20-Feb-2002 |
1,000,000 |
4% |
20% |
2066.42 |
24.84 |
0.000 |
0.271 |
0.002 |
4.832% |
2,066.42 |
20-Feb-2002 |
20-Feb-2002 |
20-May-2002 |
1,000,000 |
4% |
20% |
2127.97 |
23.03 |
0.030 |
-0.115 |
4.399 |
4.889% |
2,112.29 |
20-May-2002 |
20-May-2002 |
20-Aug-2002 |
1,000,000 |
4% |
20% |
2357.99 |
22.67 |
0.042 |
-0.250 |
11.266 |
4.950% |
2,304.50 |
Running the average rate cap function, aaRCapAsian(),
(acc = 1, scale_factor
= 1), gives a total cap value of $9124.28 (or .91245% of notional). The output is:
effective |
terminating |
principal |
strike |
vol |
fair value |
delta |
gamma |
theta |
vega |
forward rate |
intrinsic value |
20-Aug-2001 |
20-Feb-2002 |
1,000,000 |
4% |
20% |
4550.475 |
24.840 |
0.000 |
0.598 |
0.000 |
4.832% |
4,550.47 |
20-Feb-2002 |
20-Aug-2002 |
1,000,000 |
4% |
20% |
4574.009 |
46.067 |
0.060 |
-0.198 |
0.116 |
4.950% |
4,533.86 |
We see that the values are quite close. There is no way to guarantee that one would
be more or less valuable than the other.
It is easy to find examples where the Average case is less valuable.
As discussed in the Rate Cap Document, a standard
methodology for valuing rate caps is to use Black’s model, on each caplet,
where the underlying is the forward rate.
In Black’s model, the forward rate is assumed to follow an exponential
Brownian motion (lognormal). In the function
aaRCapAsian(),
we make a similar assumption, and assume the underlying
reset rate (e.g. the 3-month LIBOR rate) is lognormal. Having made this assumption, the valuation of
the average rate cap is essentially an Asian Option (see
Asian Options
FINCAD Math Reference document) on the underlying reset rate, run for each
caplet.
Consider a caplet from 1-Jan-2000 to 1-Apr-2000 and
suppose the resets are monthly, cycling and resetting on the 15th of
the month.
Reset and Effective |
Terminating |
Rate |
# days in cap period |
|
15-Jan-2001 |
5.0% |
14 |
|
15-Feb-2001 |
5.2% |
31 |
|
15-Mar-2001 |
5.5% |
28 |
|
15-Apr-2001 |
5.0% |
15 |
Now, we see that the first reset date is
15-Dec-2000, this is the date that the averaging starts (d_avg). On 15-Match-2001, all 4 relevant resets will
have been set and any optionality is essentially over though the payment is not
made until 1-April-2001. Thus the option
expiry date is 15-March-2001. However,
for dates after expiry until the 1st of April, the value of the
option is priced as the intrinsic value, discounted. Thus we price the caplet by using the aaAsian()
function with the underlying price (price_u)
= forward reset rate (the closest reset rate that has not been set), strike
price (ex) = cap rate, the average (average) is
the average of the resets to date (or zero if we are prior to any reset
date). We also note that the rates in
the call to aaAsian()
are set to zero (as one would expect like the Black-model approach). The results, which are returned as a rate,
are then scaled by the notional and the accrual (the accrual of the caplet
period) and discounted to the value date.
Remarks:
Though
the input of the reset dates is arbitrary, the function expects
the resets to be on a regular periodic basis. In the cases where they are not input as a periodic
basis, the function will choose the frequency that most closely matches those
of the resets. The acceptable
frequencies are annual, semi-annual,
quarterly, monthly, weekly, daily and market days (see the switch sam_freq in the function aaAsian()).
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.