For the reset period (ISDA
“Compounding Period”), let:
be the
accrual factor from the effective date to the terminating date of the reset
period calculated using acc_reset
be
the accrual factor from the effective date to the terminating date of the reset
period calculated using acc_pay
be the spread over the reset rate
be the discount
factor from the accruing curve at the terminating date of the reset period
be the discount factor from the accruing curve at the effective
date of the reset period
be the reset rate (if already set) times scalefactor, or
else the scaled forward rate
For a
particular coupon period (ISDA “Calculation Period”), let:
be the accrual factor from the effective date to the terminating
date of the coupon period calculated using acc_pay
be the spread over the compounded rate
be the notional principal amount
represent multiplication over resets periods
for this coupon period
be the number of
reset periods in this coupon period (e.g., 3 for quarterly pay/monthly reset)
Then for
“Straight Compounding”:
Interest amount =
Equation 1
and
Compounded rate =
Equation 2
where is the cumulative
interest amount for the
compounding period,
and is defined recursively as:
Equation 3
.
Equation 4
The floating rate, augmented by the spread , is used to calculate the
interest amount for the current reset period (the first term), as well as to
compound the cumulative interest amount from previous reset periods (the second
term). This recursive equation has the
solution:
.
Equation 5
Note that in the normal case where acc_pay and acc_reset are
the same. In this case, and in the
absence of any spreads on the resets (i.e.,
), the formulae for
future periods reduce to:
Interest amount = ,
Equation 6
and
Compounded rate = .
Equation 7
In this case,
the reset frequency does not affect the expected interest amount or the
compounded rate.
For “Flat Compounding”,
the recursive definition of becomes:
.
Equation 8
The
cumulative interest amount from previous reset periods is now compounded at the
flat floating rate (i.e., no spread added), although the interest amount for
the current reset period is still calculated using the augmented floating rate.
For “No Compounding”,
the recursive definition of becomes:
.
Equation 9
The
cumulative interest amount from previous reset periods is not compounded.
After the interest amounts have been determined, we can use
the discount factors from the discounting curve (df_crv_disc) to calculate the
present values of all the cash flows.
The sum of these present values is the FRN price.
However, if we are pricing the FRN using a discount margin
(as is done in the function aaFRN3_DM_p), we first modify the discounting
curve by adding the discount margin to the forward rates corresponding to the
reset periods.
To simplify the notation in this section, we will assume
that the reset frequency is the same as the payment frequency. We will also assume that the first date in
the discount factor curve (which we will call ) is equal to a payment period effective date. Now, suppose there are
cash flows remaining, then
, where
is the value date and
(
) are the
next cash flow dates.
Also, let:
be the accrual factor from
to
calculated using acc_reset
be the discount factor at
be the forward rate from
to
:
be the discount margin
Then, the modified
discount factors are defined recursively by:
or explicitly by:
Now let be the discount factor
from the modified curve at the value date (which may need to be
interpolated). Then, if
is the cash flow at
, the FRN price (
) at the value date is given by:
In the case where the accrual methods for the
reset and payment periods are the same (), the reset frequency equals the payment frequency, the
discounting curve equals the accruing curve, and there is an exchange of
principal, we can write an explicit formula for the price in terms of the unmodified
discount factor values using the formula for coupons (Equation 6) from above:
Using this formula with (i.e. the spread over
the reset rate is equal to the discount margin), it can be shown that the value
at
is par, in other
words:
.
The functions aaFRN3_DM_p and aaFRN3_DM_sprd
both calculate spread duration, which is a measure of price sensitivity to
changes in the discount margin. If we use the notation from the previous
section, and define (one basis point),
then the spread duration is defined by:
Spread Duration = .
(Medium flexibility/Simple to use)
aaFRN, aaFRN2, aaFRN3:(d_v, d_e, d_t,
freq_pay_reset, position, cmpd_meth, npa, acc_pay, d_rul_pay, acc_rt,
d_rul_reset, reset_mktdays, reset_time, mgn_pay, mgn_reset, scale_factor,
asset, fixed_reset_tbl, intrp, dr_crv_acc, df_crv_disc, hl, stat)
Calculates the fair value, accrued interest and various
yields for an FRN or floating leg with regular interest payment (coupon)
periods and reset periods. The coupon
and reset frequencies may be any (allowable) combination of annual, semi-annual,
quarterly, monthly, biweekly, weekly and daily.
If the reset frequency is greater than the coupon frequency, then the
reset rates for each coupon are compounded.
The only difference between aaFRN2 and aaFRN is
that aaFRN2
has an additional switch which allows flat compounding to be selected (see
below for definition of flat compounding). aaFRN3 has an
additional input scalefactor, which is
applied to forward rates and reset rates before any spread is added; this
feature was added in order to handle “percentage of Libor” swaps more conveniently. aaFRN and aaFRN2
are retained for historical compatibility.
aaFRN_cf, aaFRN2_cf and aaFRN3_cf:(d_v,
d_e, d_t, freq_pay_reset, position, cmpd_meth, npa, acc_pay, d_rul_pay, acc_rt,
d_rul_reset, reset_mktdays, reset_time, mgn_pay, mgn_reset, scale_factor,
asset, fixed_reset_tbl, intrp, dr_crv_acc, df_crv_disc, hl, table type)
Calculates the expected future cash flows, present value
of future cash flows and implied rates for FRNs with regular coupon periods and
reset periods. aaFRN2_cf allows
flat compounding, while aaFRN_cf does not. aaFRN3_cf also handles “percentage of Libor” swaps via the scalefactor input.
aaFRN3_DM_p:(d_v,
d_e, d_t, freq_pay_reset, position, cmpd_meth, npa, acc_pay, d_rul_pay, acc_rt,
d_rul_reset, reset_mktdays, reset_time, mgn_pay, mgn_reset, scale_factor,
asset, fixed_reset_tbl, intrp, dr_crv_acc, df_crv_disc, discount_margin, hl,
stat)
Calculates the fair value given a discount margin for an
FRN or floating leg with regular interest payment (coupon) periods and reset
periods. Also calculates accrued
interest, various yields, and various risk statistics. The coupon and reset frequencies may be any
(allowable) combination of annual, semi-annual, quarterly, monthly, biweekly,
weekly and daily. If the reset frequency
is greater than the coupon frequency, then the reset rates for each coupon are
compounded.
aaFRN3_DM_sprd:(d_v,
d_e, d_t, dirty_price, freq_pay_reset, position, cmpd_meth, npa, acc_pay,
d_rul_pay, acc_rt, d_rul_reset, reset_mktdays, reset_time, mgn_pay, mgn_reset,
scale_factor, asset, fixed_reset_tbl, intrp, dr_crv_acc, df_crv_disc, hl, stat)
Calculates the implied discount margin given the value of
future cash flows (dirty price) for an FRN or floating leg with regular
interest payment (coupon) periods and reset periods. Also calculates accrued interest, various
yields, and various risk statistics. The
coupon and reset frequencies may be any (allowable) combination of annual,
semi-annual, quarterly, monthly, biweekly, weekly and daily. If the reset frequency is greater than the
coupon frequency, then the reset rates for each coupon are compounded.
(More flexibility/More inputs required)
aaFRN2_dgen, aaFRN2_dgen_cf:(d_v, d_e,
d_t, f, d_f_cpn, d_l_cpn, freq_pay_reset, frn_tbl_, position, cmpd_meth,
acc_pay, d_rul_pay, acc_rt, d_rul_reset, reset_mktdays, stub_method, mgn_pay,
mgn_reset, fixed_reset_tbl, intrp, dr_crv_acc, df_crv_disc, hl, stat, table
type)
Same as aaFRN2 and aaFRN2_cf (respectively) except that the
notional is allowed to vary, and principal payments can be specified on various
dates. These functions also take in
optional inputs specifying the dates of the first payment or the last payment
before maturity, thereby allowing odd first or last calculation periods,
whereas aaFRN2
and aaFRN2_cf do not
allow odd periods.
aaFRN3_dgen, aaFRN3_dgen_cf:(d_v,
d_e, d_t, f, d_f_cpn, d_l_cpn, freq_pay_reset, frn_tbl_, position, cmpd_meth,
acc_pay, d_rul_pay, acc_rt, d_rul_reset, reset_mktdays, stub_method, mgn_pay,
mgn_reset, scale_factor, fixed_reset_tbl, intrp, dr_crv_acc, df_crv_disc, hl,
stat, table type)
Same as aaFRN2_dgen, aaFRN2_dgen_cf with added scalefactor input.
(Maximum flexibility/Most inputs required)
aaFRN_fs, aaFRN2_fs:(d_v,
flleg_pay, flleg_r_rate, flleg_fixpay, dr_crv_acc, df_crv_disc, acc_rt,
acc_pay, intrp, position, cmpd_meth, stat)
Calculates the fair value, accrued interest and various
yields for an FRN or floating leg with user specified coupon dates, reset dates,
notional schedule and principal payments. aaFRN2_fs allows
flat compounding, while aaFRN_fs does not.
aaFRN_fs_cf, aaFRN2_fs_cf:(d_v,
flleg_pay, flleg_r_rate, flleg_fixpay, dr_crv_acc, df_crv_disc, acc_rt,
acc_pay, intrp, position, cmpd_meth, table_type)
Calculates the expected future cash flows, present value
of future cash flows and reset rates for an FRN or floating leg with user
specified coupon dates, reset dates, notional schedule and principal
payments. aaFRN2_fs_cf allows
flat compounding, while aaFRN_fs_cf does not.
aaFRN_fs_hist_cf:(pay_tb, reset_tb,
fixedpay_tb, acc_pay, position, method, table_type)
Calculates the historical cash flows (settlements) for an
FRN or floating leg with user specified coupon dates, reset dates, notional
schedule and principal payments.
Requires a full history of reset rates.
Allows flat compounding.
(Minimum flexibility/Simplest to use)
aaFloatlg_p:(d_v, d_e, d_m, d_f_cpn, d_l_cpn,
freq, position, npa, acc_pay, acc_reset, d_rul, mgn, asset, rate_reset, Intrp,
dr_crv_acc, df_crv_disc, hl, stat)
A simpler version of aaFRN in which the
coupon frequency and the reset frequency are the same, so there is no
compounding of resets. The rate is
assumed to be effective on the same day that it is set. Under these conditions there is at most one
active reset, so aaFloatlg_p takes in a single value for the
reset rate input, rather than a table of values as required by aaFRN. The function allows odd first or last
periods.
aaFloatlg_cf:(d_v, d_e, d_m, d_f_cpn, d_l_cpn,
freq, position, npa, acc_pay, acc_reset, d_rul, mgn, asset, rate_reset, Intrp,
dr_crv_acc, df_crv_disc, hl, table_type)
A simpler
version of aaFRN_cf
with no compounding, single reset rate input, and odd first/last
periods.
aaFloatlg2_p:(d_v, d_e, d_m, d_f_cpn, d_l_cpn,
freq, position, npa, acc_pay, acc_rt, d_rul, mgn, redemp_val, rate_reset,
Intrp, dr_crv_acc, df_crv_disc, hl, stat)
Same as aaFloatlg_p except that it allows for a
redemption price (per 100 notional), rather than a principal exchange switch.
aaFloatlg2_cf:(d_v, d_e, d_m, d_f_cpn, d_l_cpn,
freq, position, npa, acc_pay, acc_rt, d_rul, mgn, redemp_val, rate_reset,
Intrp, dr_crv_acc, df_crv_disc, hl, table_type)
Same as aaFloatlg_cf except that it allows for a
redemption price.
aaFloatlg3_p, aaFloatlg3_cf:( d_v, d_e, d_m, d_f_cpn, d_l_cpn,
freq, position, npa, acc_pay, acc_rt, d_rul, mgn, scale_factor, redemp_val,
rate_reset, Intrp, dr_crv_acc, df_crv_disc, hl, stat, table_type)
Same as aaFloatlg2* with added scalefactor input.
aaFRN_tables:(d_v,
d_t, d_e, freq_pay_reset, d_rul_pay, d_rul_reset, reset_mktdays, reset_time,
hl, table_type)
Calculates various dates related to these FRN deals. For instance, it calculates the dates for all
active resets. This is a utility
function which helps set up the input tables for calls to aaFRN,
aaFRN2, aaFRN_cf, aaFRN2_cf, and the freestyle (*_fs)
functions.
aaFRN_tables2:(d_s,
d_exp, d_e, d_f_cpn, d_l_cpn, freq_pay_reset, d_rul_pay, d_rul_reset,
reset_mkdays, reset_time, hl, table_type)
Similar to aaFRN_tables except
that aaFRN_tables2
also allows odd first or last periods. This function helps set up the input tables
for calls to aaFRN2_dgen
and aaFRN2_dgen_cf and the freestyle (*_fs)
functions.
Note:
Good examples of how to use the functions above are contained in the FINCAD
pre-built workbooks.
Input Argument |
Description |
d_v, d_e, d_t |
The value, effective
and terminating dates of the FRN or floating leg. In the case of Example #1, these are
30-Apr-2003, 1-Jan-2000 and 1-Jan-2010 respectively. |
Freq_pay_reset |
The frequencies of the
coupons and resets. In our example
this is 9 = semi-annual/monthly. |
Position |
1 = long, 2 = short |
npa |
Notional amount |
acc_pay |
The method used to
calculate the accrual factor for the interest payments. (e.g. act/365). |
acc_reset |
The method used to
calculate the accrual factor when extracting forward rates from the accruing
curve (e.g. act/365). The forward
rates are the expected values of the future reset rates. Usually acc_pay and acc_reset are the same. |
d_rul_pay, d_rul_reset |
The business day
convention of the coupons and the resets rates respectively. (e.g. next good
business day). |
reset_mktdays,
reset_time |
Setting reset_mktdays =
1, implies that the reset rates are set one market day prior to there
effective date. Reset_time specifies
the hour on this date, 12 = 12:00 noon.
(Setting reset_time = 0 may be sufficient for many purposes). |
asset |
1 = no exchange of
principal, 2 = exchange at the
effective and maturity dates, 3 = exchange of
principal at the maturity of the FRN. |
mgn_reset, mgn_pay |
Mgn_reset is a fixed margin (positive or negative) that
will be applied over each reset rate. Mgn_pay is a
margin that will be applied over the compounded rate. |
scalefactor |
Factor that is applied
to forward rates or reset rates prior to the addition of any margin. This is mainly for use in “percentage of
Libor” swaps – otherwise set to 1. |
fixed_reset_table |
A table containing the
active reset rate information. It may
be useful to use aaFRN_tables or aaFRN_tables2 to calculate the dates in this table. |
df_curve_acc |
A discount factor
curve for accruing. For example, if
the floating rate were calculated from LIBOR, this would be the LIBOR curve. |
df_curve_disc |
A discount factor
curve for discounting the cash flows.
For example, if the cash flows were to be paid by an AA counterparty
this would be the AA curve. |
hl |
A list of holidays. |
cmpd_meth |
Compounding
method. 1 = straight compounding, 2 = flat compounding, 3 = no compounding. |
discount_margin |
**This is only an
input for the function aaFRN3_DM_p, in which the price is calculated based on
this discount margin. It is the spread
which is added to the forward rates of the discounting curve. |
dirty_price |
**This input is only
used for the function aaFRN3_DM_sprd, in which the discount margin implied by this price is found. This is known in the output tables below as
“value of future cashflows (fair value +accrued)”. |
The freestyle functions have some special tables:
Input Argument |
Description |
Flleg_pay |
A table describing the
interest payment dates. Note that the
first input is an ID number. |
Flleg_r_rate |
A table describing the
reset rate dates. Note that the first
input of each reset rate row is an ID number, which must correspond to one of
the payment leg IDs. |
Flleg_fixpay |
A table of fixed
payment dates. For example, exchanges
of principal. |
aaFRN, aaFRN2, aaFRN3, aaFRN2_dgen, aaFRN3_dgen, aaFRN_fs,
aaFRN2_fs, aaFloatlg_p, aaFloatlg2_p and aaFloatlg3_p
Output Statistic |
Description |
1 |
fair value |
2 |
accrued interest |
3 |
value of future cashflows (fair value +accrued) |
4 |
annually compounded yield |
5 |
semi-annually compounded yield |
6 |
quarterly compounded yield |
7 |
monthly compounded yield |
8 |
money market (actual/365) yield |
9 |
money market (actual/360) yield |
10 |
next cashflow date |
11 |
previous cashflow date |
12 |
number of days from value date to maturity |
13 |
years to maturity |
14 |
number of days from value date to next cashflow |
15 |
number of days of accrued interest |
16 |
number of remaining cashflows |
17 |
basis point value |
18 |
modified duration |
19 |
convexity |
20 |
current coupon |
21 |
current reset |
22 |
current notional |
These functions
output several statistics:
pricing statistics: |
fair value, accrued
interest, and fair value + accrued interest, |
yield to maturity
statistics: |
annually compounded,
semi-annually compounded, … |
aaFRN_cf, aaFRN2_cf, aaFRN3_cf, aaFRN2_dgen_cf,
aaFRN3_dgen_cf, aaFRN_fs_cf, aaFRN2_fs_cf, aaFloatlg_cf, aaFloatlg2_cf, and
aaFloatlg3_cf
Output Table Type |
Description |
Coupon Tables |
contains all
information related to the coupons, (e.g. coupon rates, cash flow, …) |
Reset tables |
contains all
information related to the reset rates |
Cash flow tables: |
contains all future
cash flow information (interest flows, principal flows and the present value
of each). |
aaFRN3_DM_p
Output Statistic |
Description |
1 |
fair value |
2 |
accrued interest |
3 |
value of future cash flows ( fair value + accrued) |
4 |
annually compounded yield |
5 |
semi-annually compounded yield |
6 |
quarterly compounded yield |
7 |
monthly compounded yield |
8 |
money market (actual/ 365) yield |
9 |
money market (actual/ 360) yield |
10 |
next cash flow date |
11 |
previous cash flow date |
12 |
number of days from value date to maturity |
13 |
years to maturity |
14 |
number of days from value date to next cash flow |
15 |
number of days of accrued interest |
16 |
number of remaining cash flows |
17 |
basis point value |
18 |
modified duration |
19 |
convexity |
20 |
current coupon |
21 |
current reset |
22 |
current notional |
23 |
spread duration (of discount margin) |
aaFRN3_DM_sprd
Output Statistic |
Description |
1 |
fair value |
2 |
accrued interest |
3 |
implied discount margin |
4 |
annually compounded yield |
5 |
semi-annually compounded yield |
6 |
quarterly compounded yield |
7 |
monthly compounded yield |
8 |
money market (actual/ 365) yield |
9 |
money market (actual/ 360) yield |
10 |
next cash flow date |
11 |
previous cash flow date |
12 |
number of days from value date to maturity |
13 |
years to maturity |
14 |
number of days from value date to next cash flow |
15 |
number of days of accrued interest |
16 |
number of remaining cash flows |
17 |
basis point value |
18 |
modified duration |
19 |
convexity |
20 |
current coupon |
21 |
current reset |
22 |
current notional |
23 |
spread duration (of discount margin) |
Suppose the value date is 30-April-2003. Suppose we are valuing an FRN that was issued
(and started accruing interest) on
Calculate the required reset dates using the function aaFRN_tables.
Setting table_type = 3 (active resets), the output is the first 4
columns of the following table:
ID |
reset date |
effective date |
terminating date |
rate |
1 |
Tue 31-Dec-2002 |
Thu 2-Jan-2003 |
Mon 3-Feb-2003 |
5.234% |
1 |
Fri 31-Jan-2003 |
Mon 3-Feb-2003 |
Mon 3-Mar-2003 |
5.345% |
1 |
Fri 28-Feb-2003 |
Mon 3-Mar-2003 |
Tue 1-Apr-2003 |
5.456% |
1 |
Mon 31-Mar-2003 |
Tue 1-Apr-2003 |
Thu 1-May-2003 |
5.567% |
1 |
Wed 30-Apr-2003 |
Thu 1-May-2003 |
Mon 2-Jun-2003 |
5.678% |
Active resets are those that affect the amount of
the next interest payment, and whose reset date is on or before the value
date. There are 5 rates that are
available on 30-April-2003. The 6th
rate, that will affect the payment on 1-July-2003, is not available until
30-May-2003. The rates must be supplied
in the fifth column. The complete table,
including the fifth column, serves as the reset table input to aaFRN and
aaFRN_cf.
This example illustrates the rule that applies when the
value date falls on a reset date (i.e., 30-April-03 here). In this case, if a positive rate is supplied
in the fifth column on the appropriate row, then it will be used. If the cell is left blank, or contains a zero
value, then a rate will be implied from the accruing curve.
Calculate the main functions aaFRN2 and/or aaFRN2_cf. The output
from aaFRN2_cf is as
follows:
Table type #1: Cashflow Table
Date |
Interest Amount |
Principal Payment |
Total Payment |
PV Interest Amount |
PV Principal Payment |
PV Total Payment |
Accrued Interest |
Tue 1-Jul-2003 |
27,655 |
- |
27,655 |
27,427 |
- |
27,427 |
18,301 |
Fri 2-Jan-2004 |
25,728 |
- |
25,728 |
24,894 |
- |
24,894 |
- |
Thu 1-Jul-2004 |
25,196 |
- |
25,196 |
23,798 |
- |
23,798 |
- |
Mon 3-Jan-2005 |
25,938 |
- |
25,938 |
23,898 |
- |
23,898 |
- |
Fri 1-Jul-2005 |
24,962 |
- |
24,962 |
22,455 |
- |
22,455 |
- |
Tue 3-Jan-2006 |
25,938 |
- |
25,938 |
22,760 |
- |
22,760 |
- |
Mon 3-Jul-2006 |
25,245 |
- |
25,245 |
21,622 |
- |
21,622 |
- |
Tue 2-Jan-2007 |
25,515 |
- |
25,515 |
21,325 |
- |
21,325 |
- |
Mon 2-Jul-2007 |
25,221 |
- |
25,221 |
20,576 |
- |
20,576 |
- |
Wed 2-Jan-2008 |
25,587 |
- |
25,587 |
20,369 |
- |
20,369 |
- |
Tue 1-Jul-2008 |
25,196 |
- |
25,196 |
19,579 |
- |
19,579 |
- |
Fri 2-Jan-2009 |
25,797 |
- |
25,797 |
19,556 |
- |
19,556 |
- |
Wed 1-Jul-2009 |
25,104 |
- |
25,104 |
18,578 |
- |
18,578 |
- |
Mon 4-Jan-2010 |
26,080 |
1,000,000 |
1,026,080 |
18,824 |
721,787 |
740,611 |
- |
Each row represents a
cashflow, whether it be an interest payment, a principal payment, or both.
Table type #2: Reset Table
ID |
Reset Date |
Effective Date |
Terminating Date |
Reset/Forward Rate |
Rate + 5bp |
1 |
Tue 31-Dec-2002 |
Thu 2-Jan-2003 |
Mon 3-Feb-2003 |
5.234% |
5.284% |
1 |
Fri 31-Jan-2003 |
Mon 3-Feb-2003 |
Mon 3-Mar-2003 |
5.345% |
5.395% |
1 |
Fri 28-Feb-2003 |
Mon 3-Mar-2003 |
Tue 1-Apr-2003 |
5.456% |
5.506% |
1 |
Mon 31-Mar-2003 |
Tue 1-Apr-2003 |
Thu 1-May-2003 |
5.567% |
5.617% |
1 |
Wed 30-Apr-2003 |
Thu 1-May-2003 |
Mon 2-Jun-2003 |
5.678% |
5.728% |
1 |
Fri 30-May-2003 |
Mon 2-Jun-2003 |
Tue 1-Jul-2003 |
4.808% |
4.858% |
2 |
Mon 30-Jun-2003 |
Tue 1-Jul-2003 |
Fri 1-Aug-2003 |
4.969% |
5.019% |
2 |
Thu 31-Jul-2003 |
Fri 1-Aug-2003 |
Tue 2-Sep-2003 |
4.964% |
5.014% |
… |
etc… |
etc… |
etc… |
etc… |
etc… |
13 |
Thu 30-Apr-2009 |
Fri 1-May-2009 |
Mon 1-Jun-2009 |
4.983% |
5.033% |
13 |
Fri 29-May-2009 |
Mon 1-Jun-2009 |
Wed 1-Jul-2009 |
4.822% |
4.872% |
14 |
Tue 30-Jun-2009 |
Wed 1-Jul-2009 |
Mon 3-Aug-2009 |
4.974% |
5.024% |
14 |
Fri 31-Jul-2009 |
Mon 3-Aug-2009 |
Tue 1-Sep-2009 |
4.994% |
5.044% |
14 |
Mon 31-Aug-2009 |
Tue 1-Sep-2009 |
Thu 1-Oct-2009 |
4.822% |
4.872% |
14 |
Wed 30-Sep-2009 |
Thu 1-Oct-2009 |
Mon 2-Nov-2009 |
4.978% |
5.028% |
14 |
Fri 30-Oct-2009 |
Mon 2-Nov-2009 |
Tue 1-Dec-2009 |
4.822% |
4.872% |
14 |
Mon 30-Nov-2009 |
Tue 1-Dec-2009 |
Mon 4-Jan-2010 |
4.969% |
5.019% |
Each row represents a
reset period. The first 5 rates come
from the reset table that was input. The
remaining rates are forward rates implied form the accruing curve.
Table type #3: Extended Cashflow Table
ID |
Effective Date |
Terminating Date |
Notional Principal |
Compounded Rate |
Compounded Rate + 10bp |
Interest Amount |
PV Interest Amount |
Accrued interest |
1 |
Thu 2-Jan-2003 |
Tue 1-Jul-2003 |
1,000,000 |
5.462% |
5.562% |
27,655 |
27,427 |
18,301 |
2 |
Tue 1-Jul-2003 |
Fri 2-Jan-2004 |
1,000,000 |
5.017% |
5.117% |
25,728 |
24,894 |
- |
3 |
Fri 2-Jan-2004 |
Thu 1-Jul-2004 |
1,000,000 |
4.967% |
5.067% |
25,196 |
23,798 |
- |
4 |
Thu 1-Jul-2004 |
Mon 3-Jan-2005 |
1,000,000 |
5.031% |
5.131% |
25,938 |
23,898 |
- |
5 |
Mon 3-Jan-2005 |
Fri 1-Jul-2005 |
1,000,000 |
4.949% |
5.049% |
24,962 |
22,455 |
- |
6 |
Fri 1-Jul-2005 |
Tue 3-Jan-2006 |
1,000,000 |
5.031% |
5.131% |
25,938 |
22,760 |
- |
7 |
Tue 3-Jan-2006 |
Mon 3-Jul-2006 |
1,000,000 |
4.949% |
5.049% |
25,245 |
21,622 |
- |
8 |
Mon 3-Jul-2006 |
Tue 2-Jan-2007 |
1,000,000 |
5.031% |
5.131% |
25,515 |
21,325 |
- |
9 |
Tue 2-Jan-2007 |
Mon 2-Jul-2007 |
1,000,000 |
4.944% |
5.044% |
25,221 |
20,576 |
- |
10 |
Mon 2-Jul-2007 |
Wed 2-Jan-2008 |
1,000,000 |
5.017% |
5.117% |
25,587 |
20,369 |
- |
11 |
Wed 2-Jan-2008 |
Tue 1-Jul-2008 |
1,000,000 |
4.967% |
5.067% |
25,196 |
19,579 |
- |
12 |
Tue 1-Jul-2008 |
Fri 2-Jan-2009 |
1,000,000 |
5.031% |
5.131% |
25,797 |
19,556 |
- |
13 |
Fri 2-Jan-2009 |
Wed 1-Jul-2009 |
1,000,000 |
4.949% |
5.049% |
25,104 |
18,578 |
- |
14 |
Wed 1-Jul-2009 |
Mon 4-Jan-2010 |
1,000,000 |
5.030% |
5.130% |
26,080 |
18,824 |
- |
Each row represents a
coupon period. The IDs of the payment
periods in Table Type #3 match the IDs of the reset periods in Table Type #2.
The value date is still 30-April-2003, but now the FRN was
recently issued (and started accruing interest) on 15-April-2003, and it
matures on 15-April-2013. The value date
now falls in the first period, which is a stub period 2˝ months long. The last period is also a stub period 3˝
months long. Furthermore, the principal
amount is 1M until
Calculate the required reset dates using the function aaFRN_tables2. Setting table_type = 3 (active resets),
the output is the first 4 columns of the following table:
ID |
Reset Date |
Effective Date |
Terminating Date |
Rate |
1 |
|
Tue 15-Apr-2003 |
Thu 1-May-2003 |
5.567% |
1 |
|
Thu 1-May-2003 |
Mon 2-Jun-2003 |
5.678% |
There are 2 rates that are available on 30-April-2003. The 3rdrate, that will affect the
payment on 1-July-2003, is not available until 30-May-2003. The entire table serves as the reset table
input to aaFRN_dgen
and aaFRN_dgen_cf.
The dates shown above were for the case where the stub
period was compounding. The function aaFRN_tables2
also handles the case of non-compounding stub periods by use of the switch
labeled stub_method. If non-compounding stub periods had been
selected, then the output would be the first 4 columns of the following table:
ID |
Reset Date |
Effective Date |
Terminating Date |
Rate |
1 |
|
Tue 15-Apr-2003 |
Tue 1-Jul-2003 |
5.555% |
Note that supplying the
rate is mandatory, because the reset date is strictly before the value
date. That single rate would be applied
over the entire 2˝ month payment period.
Define the amortization schedule. The functions aaFRN_dgen and aaFRN_dgen_cf
take in a 3-column table that defines how the notional principal amount varies
for the purpose of calculating interest, as well as the timing of actual
repayments of principal.
Date |
Notional |
Principal Payment |
|
1,000,000 |
300,000 |
15-Apr-2013 |
700,000 |
700,000 |
In this example, the notional is 1M until
1-Jan-2005, and 0.7M thereafter. In
order to determine the Notional for a coupon period that terminates on Thu
01-Jul-2004 (for example), the calculation looks for the first row in this input
table whose amortization date is on or after 01-Jul-2004, and finds a Notional
of 1M in row #1. For a coupon that
terminates on Mon 03-Jan-2005, it looks for the first row whose date is on or
after 01-Jan-2005 (the unadjusted period-end date), and again finds a Notional
of 1M in row #1. However, for a coupon
that terminates on Fri 01-Jul-2005, it looks for the first row whose date is on
or after 01-Jul-2005, and now finds a Notional of 0.7M in row #2.
Each Principal Payment specified in the table is made on
the coupon date of the last period whose unadjusted terminating date is on or
before the date given in this input table.
For example, the 300,000 principal payment is made on Mon 03-Jan-2005,
because the unadjusted terminating date of that coupon period (01-Jan-2005) is
the last one before or equal to the given date (01-Jan-2005). Likewise, the 700,000 principal payment is
made on Mon 15-Apr-2013, because the unadjusted terminating date of that coupon
period (15-Apr-2013) is the last one before or equal to the given date
(15-Apr-2013). In other words, if there
is a coupon period whose unadjusted period-end date is equal to the date given
in this input table, then the Principal Payment will be made on the adjusted
period-end date of that period.
There is no requirement for the principal payments to
correspond to changes in notional, although this would be natural. For example, it would be acceptable (but
unusual) to include a row that defines a reduction of the Notional principal on
a certain date, but that also specifies a Principal Payment of zero on that
date.
Calculate the main functions aaFRN_dgen and/or aaFRN_dgen_cf. The output
from aaFRN_dgen_cf is as follows:
Table type #1: Cashflow Table
Date |
Interest Amount |
Principal Payment |
Total Payment |
PV Interest Amount |
PV Principal Payment |
PV Total Payment |
Accrued Interest |
Tue 01-Jul-2003 |
11,595 |
- |
11,595 |
11,500 |
- |
11,500 |
2,382 |
Fri 02-Jan-2004 |
25,728 |
- |
25,728 |
24,894 |
- |
24,894 |
- |
Thu 01-Jul-2004 |
25,196 |
- |
25,196 |
23,798 |
- |
23,798 |
- |
Mon 03-Jan-2005 |
25,938 |
300,000 |
325,938 |
23,898 |
276,398 |
300,296 |
- |
Fri 01-Jul-2005 |
17,474 |
- |
17,474 |
15,718 |
- |
15,718 |
- |
Tue 03-Jan-2006 |
18,157 |
- |
18,157 |
15,932 |
- |
15,932 |
- |
Mon 03-Jul-2006 |
17,671 |
- |
17,671 |
15,135 |
- |
15,135 |
- |
Tue 02-Jan-2007 |
17,860 |
- |
17,860 |
14,927 |
- |
14,927 |
- |
Mon 02-Jul-2007 |
17,655 |
- |
17,655 |
14,403 |
- |
14,403 |
- |
Wed 02-Jan-2008 |
17,911 |
- |
17,911 |
14,258 |
- |
14,258 |
- |
Tue 01-Jul-2008 |
17,637 |
- |
17,637 |
13,705 |
- |
13,705 |
- |
Fri 02-Jan-2009 |
18,058 |
- |
18,058 |
13,689 |
- |
13,689 |
- |
Wed 01-Jul-2009 |
17,573 |
- |
17,573 |
13,005 |
- |
13,005 |
- |
Mon 04-Jan-2010 |
18,256 |
- |
18,256 |
13,177 |
- |
13,177 |
- |
Thu 01-Jul-2010 |
17,375 |
- |
17,375 |
12,246 |
- |
12,246 |
- |
Mon 03-Jan-2011 |
18,157 |
- |
18,157 |
12,483 |
- |
12,483 |
- |
Fri 01-Jul-2011 |
17,457 |
- |
17,457 |
11,719 |
- |
11,719 |
- |
Tue 03-Jan-2012 |
18,108 |
- |
18,108 |
11,858 |
- |
11,858 |
- |
Mon 02-Jul-2012 |
17,637 |
- |
17,637 |
11,274 |
- |
11,274 |
- |
Wed 02-Jan-2013 |
17,959 |
- |
17,959 |
11,201 |
- |
11,201 |
- |
Mon 15-Apr-2013 |
10,006 |
700,000 |
710,006 |
6,155 |
430,602 |
436,757 |
- |
Each row represents a
cashflow, whether it be an interest payment, a principal payment, or both. As discussed above, the principal payments
occur on Mon 03-Jan-2005 and Mon 15-Apr-2013.
Table type #3: Extended Cashflow Table
ID |
Effective Date |
Terminating Date |
Notional Principal |
Compounded Rate |
Compounded Rate + 10bp |
Interest Amount |
PV Interest Amount |
Accrued Interest |
1 |
Tue 15-Apr-2003 |
Tue 01-Jul-2003 |
1,000,000 |
5.392% |
5.492% |
11,595 |
11,500 |
2,382 |
2 |
Tue 01-Jul-2003 |
Fri 02-Jan-2004 |
1,000,000 |
5.017% |
5.117% |
25,728 |
24,894 |
- |
3 |
Fri 02-Jan-2004 |
Thu 01-Jul-2004 |
1,000,000 |
4.967% |
5.067% |
25,196 |
23,798 |
- |
4 |
Thu 01-Jul-2004 |
Mon 03-Jan-2005 |
1,000,000 |
5.031% |
5.131% |
25,938 |
23,898 |
- |
5 |
Mon 03-Jan-2005 |
Fri 01-Jul-2005 |
700,000 |
4.949% |
5.049% |
17,474 |
15,718 |
- |
6 |
Fri 01-Jul-2005 |
Tue 03-Jan-2006 |
700,000 |
5.031% |
5.131% |
18,157 |
15,932 |
- |
7 |
Tue 03-Jan-2006 |
Mon 03-Jul-2006 |
700,000 |
4.949% |
5.049% |
17,671 |
15,135 |
- |
8 |
Mon 03-Jul-2006 |
Tue 02-Jan-2007 |
700,000 |
5.031% |
5.131% |
17,860 |
14,927 |
- |
9 |
Tue 02-Jan-2007 |
Mon 02-Jul-2007 |
700,000 |
4.944% |
5.044% |
17,655 |
14,403 |
- |
10 |
Mon 02-Jul-2007 |
Wed 02-Jan-2008 |
700,000 |
5.017% |
5.117% |
17,911 |
14,258 |
- |
11 |
Wed 02-Jan-2008 |
Tue 01-Jul-2008 |
700,000 |
4.967% |
5.067% |
17,637 |
13,705 |
- |
12 |
Tue 01-Jul-2008 |
Fri 02-Jan-2009 |
700,000 |
5.031% |
5.131% |
18,058 |
13,689 |
- |
13 |
Fri 02-Jan-2009 |
Wed 01-Jul-2009 |
700,000 |
4.949% |
5.049% |
17,573 |
13,005 |
- |
14 |
Wed 01-Jul-2009 |
Mon 04-Jan-2010 |
700,000 |
5.030% |
5.130% |
18,256 |
13,177 |
- |
15 |
Mon 04-Jan-2010 |
Thu 01-Jul-2010 |
700,000 |
4.948% |
5.048% |
17,375 |
12,246 |
- |
16 |
Thu 01-Jul-2010 |
Mon 03-Jan-2011 |
700,000 |
5.031% |
5.131% |
18,157 |
12,483 |
- |
17 |
Mon 03-Jan-2011 |
Fri 01-Jul-2011 |
700,000 |
4.944% |
5.044% |
17,457 |
11,719 |
- |
18 |
Fri 01-Jul-2011 |
Tue 03-Jan-2012 |
700,000 |
5.017% |
5.117% |
18,108 |
11,858 |
- |
19 |
Tue 03-Jan-2012 |
Mon 02-Jul-2012 |
700,000 |
4.967% |
5.067% |
17,637 |
11,274 |
- |
20 |
Mon 02-Jul-2012 |
Wed 02-Jan-2013 |
700,000 |
5.031% |
5.131% |
17,959 |
11,201 |
- |
21 |
Wed 02-Jan-2013 |
Mon 15-Apr-2013 |
700,000 |
4.896% |
4.996% |
10,006 |
6,155 |
- |
Each row represents a
coupon period. As discussed above, the
notional principal is 1M for the first 4 coupon periods, and 0.7M for the
remaining coupon periods.
Suppose we have a typical two year FRN which is effective
on 2-Mar-2007, which pays and resets quarterly, and uses actual/360 accrual
methods with no date adjustments. This
FRN will value to par on the effective date when the margin over the reset rate
is zero. However, suppose the margin over
the reset is 20 basis points, then we can calculate the price using the
function aaFRN3_DM_p
as follows:
Argument |
Description |
Example Data |
Switch Value |
d_v |
value (settlement) date |
2-Mar-2007 |
|
d_e |
effective date |
2-Mar-2007 |
|
d_t |
terminating date |
2-Mar-2009 |
|
freq_pay_reset |
pay and reset frequencies |
3 |
pay / reset quarterly |
position |
trade position |
1 |
long |
cmpd_meth |
compounding method |
1 |
straight compounding |
npa |
notional principal amount |
100 |
|
acc_pay |
accrual method for coupon payments |
2 |
actual/360 |
d_rul_pay |
business day convention for payment dates |
1 |
no date adjustment |
acc_rt |
accrual method for reset rates |
2 |
actual/360 |
d_rul_reset |
business day convention for reset dates |
1 |
no date adjustment |
reset_mktdays |
number of business days prior to the reset date that the
rate is fixed |
0 |
|
reset_time |
the hour of the day when the rate is reset |
0 |
|
mgn_pay |
margin above or below compounded rate |
0% |
|
mgn_reset |
margin above or below a reset rate |
0.20% |
|
scale_factor |
scale factor for forward rates (and reset rates if applicable) |
100% |
|
asset |
exchange of principal |
3 |
at maturity |
fixed_reset_tbl |
reset rates (already fixed) |
0% |
|
intrp |
interpolation method |
1 |
linear |
df_crv_acc |
discount factor curve for accruing rates |
DF curve below |
|
df_crv_disc |
discount factor curve for discounting rates |
DF curve below |
|
discount_margin |
discount margin |
0% |
|
hl |
holiday list |
0 |
|
stat |
statistic |
3 |
value of cash flows |
DF Curve
Date |
Discount Factor |
Fri 2-Mar-2007 |
1 |
Mon 5-Mar-2007 |
0.999558528 |
Tue 6-Mar-2007 |
0.999411458 |
Fri 9-Mar-2007 |
0.998968565 |
Fri 16-Mar-2007 |
0.997935383 |
Fri 23-Mar-2007 |
0.996906268 |
Mon 2-Apr-2007 |
0.995439780 |
Wed 2-May-2007 |
0.991024484 |
Mon 4-Jun-2007 |
0.986197616 |
Mon 2-Jul-2007 |
0.982126927 |
Thu 2-Aug-2007 |
0.977682682 |
Tue 4-Sep-2007 |
0.972994221 |
Tue 2-Oct-2007 |
0.969065804 |
Fri 2-Nov-2007 |
0.964768012 |
Mon 3-Dec-2007 |
0.960528675 |
Wed 2-Jan-2008 |
0.956503025 |
Mon 4-Feb-2008 |
0.952122519 |
Mon 3-Mar-2008 |
0.948627329 |
Tue 2-Sep-2008 |
0.927050992 |
Mon 2-Mar-2009 |
0.906193237 |
aaFRN3_DM_p Results (with discount margin = 0%)
Statistic |
Description |
Value |
3 |
value of future cashflows (fair value + accrued) |
100.3836643 |
Now, to show this FRN prices to par when the discount
margin equals the reset margin, we can call the function again, this time with
the discount margin input set to 0.20%. In
this case we get:
aaFRN3_DM_p Results (with discount margin = reset margin)
Statistic |
Description |
Value |
3 |
value of future cashflows (fair value + accrued) |
100.0000000 |
We could also verify this by using the function aaFRN_DM_sprd,
which calculates the implied discount margin given a price. If we input the par price (100) with all of
the other inputs as given above, we get the following results:
aaFRN3_DM_sprd Results
Statistic |
Description |
Value |
3 |
implied discount margin |
0.20% |
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.