Sunteți pe pagina 1din 18

PROCEDURE FOR PRICING BERMUDANS AND CALLABLE SWAPS

PATRICK S. HAGAN
BLOOMBERG LP
499 PARK AVENUE
NEW YORK, NY 10022
PHAGAN1@BLOOMBERG.NET
212-893-4231
Abstract. Here we break up the methodology for evaluating callable swaps
Key words. range notes, time swaps, accrual notes
1. Introduction. The theory an methodology for using the LGM model to evaluate Bermudans is
covered in: Evaluating and hedging exotic swap instruments via LGM. In this paper, Callable Range Notes:
Procedure breaks down the method into a specic procedure and set of algorithms. In the main body of the
paper, we treat Bermudans on bullet swaps and callable bullet swaps. In the appendix, we indicate
2. Main routine.
2.1. Inputs.
2.1.1. Deal denition.
Coupon leg inputs. The coupon leg is dened by:
(2.1a) n = number of coupon intervals
(2.1b) t
0
, t
1
, . . . , t
n
= start and coupon dates
(2.1c) M
1
, M
2
, . . . M
n
= maximum coupon payment
(2.1d) m
1
, m
2
, . . . m
n
= minimum coupon payment
(2.1e) R
0
i
, R
1
i
= eective range for the coupon payment
(2.1f) k = index is assumed to be k month Libor rate
(2.1g) ind = index oating rate.
To preform the adjustment, we also need todays value C
0
i
of each coupon making up the range note,
V
cpn
1
, V
cpn
2
, ..., V
cpn
n
.
Here t
i1
and t
i
are the start and end dates of the i
th
interval, for i = 1, 2, ..., n. The maximum coupon
payment C
i
=
i
R
fix
occurs if the index is within the range for every day of the period i, and where the
minimum coupon payment c
i
=
i
R
fix
occurs if the index is outside the range for every day of the period
i, while the (eective) range is dened by R
0
i
and R
1
i
:
(2.2a) coupon =
i
M
i
+ (1
i
)m
i
paid at t
i
,
1
where
(2.2b)
i
=
# of days t in interval i with R
0
i
L
true
(t) R
1
i
# of days t in interval i
Here if the index rate L
ind
(t) has any basis spread, we assume that this spread has already been incoporated
into the boundaries
(2.3) R
0
i
= R
0,orig
i
bs(t
i1
, ind), R
1
i
= R
1,orig
i
bs(t
i1
, ind).
Funding leg inputs. The inputs to the program are the eective funding leg coupons,
(2.4) c
fun
1
, c
fun
2
, . . . c
fun
n
.
To explain this input, recall that the funding leg is assumed to be a standard oating leg plus a margin rate.
As discussed earlier, we approximate the oating legs value by pretending the oating leg schedule is the
same as the xed leg schedule. Then at any coupon date t
j
, the value of the oating leg is equivalent to
1 paid at t
j
(2.5a)
c
fun
i
= cvg(t
i1
, t
i
, basis
fun
)(m
rate
i
+ bs
fun
i
) paid at t
i
for i = j + 1, ..., n (2.5b)
Exercise input.
(2.6) payer/receiver ag
A payer is a Bermudan option to pay the coupon leg, and receivethe funding leg; a receiver is an option to
receiver the coupon leg and pay the funding leg
(2.7a)
0
,
1
, ...,
m
= exercise (notication dates).
We assume that the dates
j
before today have already been excluded. We also need the array
(2.7b) i
first
0
, i
first
1
, ..., i
first
m
If one exercises at
j
, one receives/pays the xed leg starting with the coupon payment paid at t
i
where
i = i
first
j
. The oating leg is equivalent to 1 paid at t
i1
with i = i
first
j
. The exercise fees are
(2.7c) f
0
, f
1
, ..., f
m
= exercise fee.
If the Bermudan is exercised at t
first
j
, then the option holder must pay an exercise fee of f
j
on date t
i1
with i = i
first
j
.
Deal aproximation input. In the Callable Range Note document we assumed the proxy deal only has 1
xing per period. Here we allow
(2.8) n
fix
= number of xings per coupon period
so that we can nd the sweet spot between accuracy and performance
Payo adjusters (overall coupon): On ... this means that we will multiply up the proxy coupon to match
todays coupon.
Payo adjusters (caplet vol): On ... this means we will adjust the caplet vols to match todays value
(and get risk to caplets)
2
2.1.2. Market input.
t
now
= today (evaluation, or as of, date) (2.9a)
yc = designation for yield curve (2.9b)
vc = designation for volatility cube (2.9c)
index = designation for rate used in coupon (2.9d)
These designations are used only in the external routines below.
2.1.3. Method inputs.
Calibration ags and variables. Calibration method: constant mean reversion
Calibration parameter: = 0
Evaluation method. Integration method: Direct convolution ... other methods may be developed in the
future
Kink handling: True ... this means to apply the kink correction below to the integration
2.2. Output. The value of the Bermudan and the component european options on the range note are
calculated:
V
berm
= value of bermudan option (2.10a)
V
eur
0
, V
eur
1
, ..., V
eur
m
= value of European options contained in Bermudan (2.10b)
Also, we output the four vectors dening the calibrated model:
0 = T
0
, T
1
, ..., T
n
(2.11a)
0 = H
0
, H
1
, ..., H
n
(2.11b)
0 =
0
,
1
, ...,
m
(2.11c)
0 =
0
,
1
, ...,
m
(2.11d)
The functions H(T) and (t) are obtained by piecewise linear interpolation, with linear extrapolation beyond
T
n
and
m
).
2.3. Procedure. Step1. Replace
(2.12a) M
new
i
= M
i
m
i
for i = 1, ..., n
and
(2.12b) f
new
j
=

f
j
for receivers
f
j
for payers
for j = 1, ..., m
Then if the deal is exercised at
j
, the payo is equivalent to
m
i
c
fun
i
+
M
i
n
fix
n
fix
X
=1

i,
received at t
i
for i = i
first
j
, i
first
j
+ 1, ..., n (2.13a)
1 recieved at t
n
(2.13b)
1 +f
j
paid at t
i
first
j
1
(2.13c)
3
for receivers. For payers, one exchanges the receiveds and paids. Here
i,
are the appropriate digitals. See
below.
Step 2. Calculate the schedule data for each digital
Step 2a. Get the appropriate business day rule, holiday centers, and end of month rule for the k month rate
being used as an index. Also get the appropriate day count basis, basis
ind
, for the k month index rate.
bdr
ind
= GetBDR(index), (2.14a)
hol1, hol2, hol3 = GetHolCtrs(index), (2.14b)
eom = GetEOM(index), (2.14c)
basis
ind
= GetBasisFlt(index). (2.14d)
Step 2b. Subdivide each interval t
i1
to t
i
into n
fix
subintervals. Set
t
st
i,
= Add(t, 0, months, bdr
ind
, hol1, hol2, hol3, eom) (2.15a)
for = 1, 2, .., n
fix
, i = 1, 2, ..., n
where
(2.15b) t =
n
fix
+ 1
n
fix
t
i1
+
1
n
fix
t
i
for = 1, 2, .., n
fix
, i = 1, 2, ..., n
rounded to the nearest integer. Note that the Add function just moves t to a good business day using the
appropriate conventions for a k month caplet based on the rate index
Step 2c. Find the end date, xing date, and day count fraction for each sub-interval. Since the index is a k
month rate
t
fix
i,
= FixingOf(t
st
i,
, index) for = 1, 2, .., n
fix
, i = 1, 2, ..., n (2.16a)
t
end
i,
= Add(t
st
i,
, k, months, bdr
ind
, hol1, hol2, hol3, eom) (2.16b)
for = 1, 2, .., n
fix
, i = 1, 2, ..., n
(2.16c)
i,
= coverage(t
st
i,
, t
end
i,
, basis
ind
).
Step 2d. Get the forward rates and the implied vol for each digital caplet:
R
0
i,
=
D(t
st
i,
) D(t
end
i,
)

i,
D(t
end
i,
)
for = 1, 2, .., n
fix
, i = 1, 2, ..., n, (2.17a)

1
i,
= ImpliedDigVol(t
fix
i,
, k months, R
1
i
) for = 1, 2, .., n
fix
, i = 1, 2, ..., n, (2.17b)

1
i,
= ImpliedDigVol(t
fix
i,
, k months, R
1
i
) for = 1, 2, .., n
fix
, i = 1, 2, ..., n. (2.17c)
Step2e. Calculate discount factors for each coupon date
(2.18) D
i
= Df(t
i
, yc) for i = 1, 2, ..., n,
Step 3. Call characterization routine
Step 4. Call the calibration routine
Step 5. Call the evaluation routine
Step 6. Free space & return prices and model calibration vectors
4
2.4. External routines needed
. GetBDR(index), ... returns the business day rule for index
GetHolCtrs(index) ... returns the holiday centers for index paydays
GetEOM(index) ... returns the end of month ag for index schedules
GetBasisFlt(index) ... returns the day count basis for index
FixingOf(t, index) ... returns the xing date for the rate index which starts on date t
Coverage(t
1
, t
2
, basis) ... returns the coverage (day count fraction) according to the basis basis.
Add(t, j,months, bdr, hol1, hol2, hol3, eom) ... adds j months to t; if the result is a bad business day in
any of the holiday centers, uses the business day rule bdr to move to a good business day
Df(t,yc) ... returns the discount factor to date t, according to the yield curve yc.
ImpliedDigitalVol(t
ex
, , R
fix
,vc) ... returns the volatility for a digital caplet based on index
3. Characterization routine.
3.1. Inputs.
M
i
= maximum coupon for interval i (3.1a)
m
i
= minimum coupon for interval i (3.1b)
c
fun
i
= eective coupon from funding leg (margin+basis spread) (3.1c)
R
1
i
, R
2
i
= eective boundary of ranges (3.1d)
D
i
= discount factors at pay dates (3.1e)
n
fix
= number of subintervals to approximate each coupon period (3.1f)
R
0
i,
= at-the-money rate for caplet i, (3.1g)

i,
= day count fraction for caplet i, (3.1h)

1
i,
= implied digital vol at R
1
i
for caplet i, (3.1i)

2
i,
= implied digital vol at R
2
i
for caplet i, (3.1j)
t
fix
i,
, t
st
i,
, t
end
i,
= caplet xing, start, and end dates (3.1k)
t
now
= today (evaluation, or as of, date) (3.1l)

j
= j
th
exercise date of Bermudan (3.1m)
i
first
j
= settlement-upon-exercise date of Bermudan (3.1n)
f
j
= sign adjusted fee for exercising at
j
(3.1o)
3.2. Output. The vectors of exercise dates, tenors and parallel shifts

j
= exercise dates, (3.2)

j
= t
n
t
i
first
j
1
= tenor(in months) (3.3)

j
= parallel shift (3.4)
for j = 1, 2, ..., m.We use the convention that curve shifts use the Act365 convention, so wherever one see
(t
2
t
1
) in below, one should replace it with (t
2
t
1
)/365
3.3. Procedure. Step 1. Let
(3.5a) t
st
j
= t
i
first
j
1
be the coupon start date for the rst coupon received upon exercising at
j
, and calculate
(3.5b) s
1,2
i,
=
1,2
i,
q
t
fix
i,
t
now
5
Step 2. Use a global Newton (chord?) scheme to nd the value of the shift
j
such that
n
X
i=i
first
j
(
m
i
c
i
+
M
i
n
fix
n
fix
X
=1

1 N(d
1
i,
() N(d
2
i,
())

)
D
i
e

j
(tit
st
j
)
(3.6a)
+D(t
n
)e

j
(t
n
t
st
j
)
= (1 +f
j
)D(t
st
j
)
with
(3.6b) d
1,2
i,
() =
log
R
1,2
i
R
0
i,
()
+

1
2
R
0
i,
()y
i,
h
s
1,2
i,
i
2
s
1,2
i,
,
where
(3.6c) R
0
i,
() = R
0
i,
+
1

i,

1 +
i,
R
0
i,

e
(t
end
i,
t
st
i,
)
1

Step 3: Return the outputs


3.4. External routines needed
. User written iteration scheme
Standard cumulative normal
4. Calibration routine.
4.1. Inputs. The inputs are:

j
= notication (exercise) date, for j = 0, 1, ..., m1 (4.1a)

j
= length of the swap, for j = 0, 1, ..., m1 (4.1b)

j
= parallel shifts for j = 0, 1, ..., m1 (4.1c)
where m is the number of options. Also, input are
(4.1d) t
now
= today (evaluation, or as of, date)
method = constant mean reversion,
= mean reversion,
where the mean reversion is presumably zero. Finally, we need to input:
t = designator of standard oating leg index (4.2a)
yc = designator of yield curve (4.2b)
vc = designator of volatility cube (4.2c)
These designators are used in the basis spread, discount factor, and vol cube routines.
6
4.2. Outputs. The outputs are the four vectors
0 = T
0
, T
1
, ..., T
n
(4.3a)
0 = H
0
, H
1
, ..., H
n
(4.3b)
0 =
0
,
1
, ...,
m
(4.3c)
0 =
0
,
1
, ...,
m
(4.3d)
The functions H(T) and (t) are obtained by piecewise linear interpolation, with linear extrapolation beyond
T
n
and
m
).
4.3. Procedure. In this procedure we develop a set of swaption which have common pay dates ... this is
not necessary for the constant kappa calibration method we are using (since each swaption can be calibrated
independently of all the others. However, it greatly simplies some of the other calibration methods, so we
may as well develop it this way to simplify future work.
In this procedure, we also need quatities which refer to the standard oating leg index (such as 3mUS-
DLibor) and market default parameters for xed legs opposite these oating legs in single currency swaps.
Well abreviate these arguments as t and x.
Step 1: Ensure that the triples are ordered in terms of increasing
j
, and exclude any date closer than,
say, 1 month apart from the previous date.
Step 2: Replace each
j
by the nearest whole number of months.
Step 3: Fill in the swaption schedules.
a) for each exercise date, nd the swaptions start date:
(4.4a) t
st
j
= spot-of-t(
j
, t) for j = 0, 1, ..., m1.
b) nd the the theoretical end dates for the swaptions; of these the theoretical end dates that are within
a month of the last theoretical end date, select the average (or most common) date to be the anchor date
T
anchor
;
c) Fill in the xed leg pay dates: let
q = freq(x) (4.4b)
bdr = BusDayRule(x) (4.4c)
be the number of months per period and business day rule for a standard swap, and then nd all the dates
(4.4d) T
k
= Add(T
anchor
, q(n k), months, bdr, ho11, hol2, hol3, eom) for k = 0, 1, ..., n.
Here, the holiday centers, and end-of-month rule are the ones appropriate for xed legs in the standard swap,
and T
0
is the rst date with
(4.4e) T
0
t
st
0
.
If T
0
t
now
, then replace it with t
now
.
Step 4: Calculate the quantities needed for the swaptions
a) calculate the coverages (day count fractions) for each interval using the both the xed and oating leg
bases:

fix
k
= cvg(T
k1
, T
k
, basis
fix
) for k = 1, ..., n (4.5a)

flt
k
= cvg(T
k1
, T
k
, basis
flt
) for k = 1, ..., n (4.5b)
7
b) nd the discount factor to each pay date:
(4.5c) D
k
= Df(T
k
, yc) for k = 1, ..., n,
where yc is the relevent yield curve.
c) nd the forward basis spread for each interval,
(4.5d) bs
k
= bs(T
k1
, t) for k = 2, ..., n
d) the rst period of each swaption is special, in that it may be broken. So for each swaption j, we have to
nd the same quantities:
d1) nd the rst pay date T
k
strictly after the swaptions start-upon-exercise date t
st
j
. Call it k
1
j
:
(4.6a) k
1
j
is smallest k with t
st
j
< T
k
1
j
.
d2) nd the coverage for the rst period:
(4.6b)
fix,first
j
= cvg(t
st
j
, T
k
1
j
, basis
fix
),
flt,first
j
= cvg(t
st
j
, T
k
1
j
, basis
flt
)
d3) nd the discount factor for each start date t
st
j
,
(4.6c) D
st
j
= Df(t
st
j
, yc)
d4) nd the basis spread for the rst period
bs
first
j
= bs(t
st
j
, t)
Step 5: For each swaption j, determine the strike R
fix
j
of each swaption from
(4.7) R
fix
j
=
D
st
j
D
n
e

j
(Tnt
st
j
)
+
flt,first
j
bs
first
j
D
k
1
j
e

j
(T
k
1
j
t
st
j
)
+
n
P
k=k
1
j
+1

flt
k
bs
k
D
k
e

j
(T
k
t
st
j
)

fix,first
j
D
k
1
j
e

j
(T
k
1
j
t
st
j
)
+
n
P
k=k
1
j
+1

fix
k
D
k
e

j
(T
k
t
st
j
)
Here
j
T is to be interpretted as Act365. See characterization routine
Step 6: For each swaption j, determine the market price
a) Find the at-the-money forward swap rate
(4.8a) R
0
j
=
D
st
j
D
n
+
flt,first
j
bs
first
j
D
k
1
j
+
n
P
k=k
1
j
+1

flt
k
bs
k
D
k

fix,first
j
D
k
1
j
+
n
P
k=k
1
j
+1

fix
k
D
k
.
8
b) Get the volatility for the swaption with exercise date
j
,start date t
1
j
, end date T
n
, and strike R
fix
j
:
(4.8b) = GetVol(
j
, T
n
, R
fix
j
, R
0
j
, vc)
c) Find
(4.8c) y
j
= Years(t
now
,
j
) = time to exercise in years
d) Evaluate
(4.8d) V
mkt
j
=
n
R
fix
j
N(d
1
) R
0
j
N(d
2
)
o
_
_
_

fix,first
j
D
k
1
j
+
n
X
k=k
1
j
+1

fix
k
D
k
_
_
_
,
with
(4.8e) d
1,2
=
log R
fix
j
/R
0
j

1
2

2
y
j

y
j
.
Now we get to the calibration-proper step.
Step 7: Fill in H(T):
(4.9) H
i
=
1 e
T
i

to ll in the H vector.
Step 8: For each j, nd the value of
p

j
:
a) interpolate (linear-linear-linear) to obtain H
st
j
at the swaptions start-upon-exercise date
b) Use the following formula to get an intial guess for
p

j
(4.10)
q

j

1
2

R
fix
j
+R
0
j

y
j
n
P
k=k
1
j
+1

fix
k
D
k
Sum
with
Sum =
h
H
k
1
j
H
st
j
i

fix,first
j
R
fix
j

flt,first
j
bs
first
j

D
k
1
j
(4.11)
+
n
X
k=k
1
j
+1

H
k
H
st
j

fix
k
R
fix
j

flt
k
bs
k

D
k
+

H
n
H
st
j

D
n
c) Use a global Newton scheme to nd the
p

j
which sets the model value V
LGM
j
equal to the above market
9
value.
V
LGM
j
=

fix,first
j
R
fix
j

flt,first
j
bs
first
j

D
k
1
j
N
_
_
y

+
h
H
k
1
j
H
st
j
i

j
p

j
_
_
(4.12a)
+
n
X
k=k
1
j
+1

fix
k
R
fix
j

flt
k
bs
k

D
k
N

H
k
H
st
j

j
p

j
!
+D
n
N

H
n
H
st
j

j
p

j
!
D
st
j
N

j
!
V
LGM
j

j
=
h
H
k
1
j
H
st
j
i

fix,first
j
R
fix
j

flt,first
j
bs
first
j

D
k
1
j
G
_
_
y

+
h
H
k
1
j
H
st
j
i

j
p

j
_
_
(4.12b)
+
n
X
k=k
1
j
+1

H
k
H
st
j

fix
k
R
fix
j

flt
k
bs
k

D
k
G

H
k
H
st
j

j
p

j
!
+

H
n
H
st
j

D
n
G

H
n
H
st
j

j
p

j
!
with y

determined implicitly by

fix,first
j
R
fix
j

flt,first
j
bs
first
j

D
k
1
j
e
(H
k
1
j
H
st
j
)y

1
2

H
k
1
j
H
st
j

j
(4.12c)
+
n
X
k=k
1
j
+1

fix
k
R
fix
j

flt
k
bs
k

D
k
e
(H
k
H
st
j
)y

1
2
(H
k
H
st
j
)
2

j
+D
n
e
(HnH
st
j
)y

1
2
(HnH
st
j
)
2

j
= D
st
j
Note: For eciency, its usually best for a single function to calculate and return V
LGM
j
,
V
LGM
j

j
, and
y

. One usually inputs an initial guess for y

, since y

needs to be determined implicitly by its own global


Newton scheme. (y

= 0 is a good initial guess, which always leads to convergence.). For each step in the
Newtons method for
p

j
, we can use y

from the preceding step as the initial guess. Then only only one
or two steps are needed to get y

. For the rst step, y

= 0 can be used.
Step 9. Fill in the return array with
0
= 0,
0
= 0 and then
j
,
j
. Check to ensure that
j
s are
increasing in j. If
j
<
j1
, increase
j
to
j1
. Of the theoretically feasible values, this one is closest to
matching the market.
4.4. Summary of external routines needed
. Date mechanics routines:
t
st
= spot-of-t(,t)
q = freq(x)
bdr = BusDayRule(x)
FixLegDCBasis(index) returns the day count basis
fix
for a xed leg of same type of swap
FltLegDCBasis(index) returns the day count basis
flt
for a oating leg of same type of swap
10
T
k
= Add(T
anchor
, j,months,bdr,ho11,hol2,hol3,eom) adds/subtracts j months to T
anchor
, using
the respect end-of-month ag eom, and then applies the business day rule bdr to nd a good business day
according to the joint holiday schedules hol1, hol2, hol3. Note: need to allow j negative and zero as well as
positive.
cvg (t
a
, t
b
,basis) returns the day count fraction of interval from t
a
to t
b
according to basis
y
j
=Years(t
now
,
j
) = time to exercise in years
Market info routines
Df(t, yc) returns discount factor for date t according to the yield curve yc.
bs(t,t) returns the basis spread for the oating rate indexflt
GetVol(
ex
, T
end
, R
fix
, R
0
,t) returns the volatility of a swaption/caplet whose exercise (no-
tication) date is , where the underlying swap/FRA lasts from spot-of- to T
end
, with strike R
fix
and
at-the-money rate R
0
. Here, the standard xed leg frequency, day count basis for swaptions/caplets based
on index needs to be used.
Note: It may be simpler to agree on the names of an "add months" routine, which automatically applies
the eom ag, business day rule, and holiday centers appropriate for the oating leg (and xed leg) index:
(4.13a) t = AddMonths(t
anchor
, n, x),
(4.13b) t = AddMonths(t
anchor
, n, bdr, t),
5. Creating the payos/adjustments.
5.1. Inputs.
5.1.1. Deal inputs.
M
i
= maximum coupon for interval i (5.1a)
m
i
= minimum coupon for interval i (5.1b)
c
fun
i
= eective coupon from funding leg (margin+basis spread) (5.1c)
R
1
i
, R
2
i
= eective boundary of ranges (5.1d)
D
i
= discount factors at pay dates (5.1e)
n
fix
= number of subintervals to approximate each coupon period (5.1f)
R
0
i,
= at-the-money rate for caplet i, (5.1g)

i,
= day count fraction for caplet i, (5.1h)

1
i,
= implied digital vol at R
1
i
for caplet i, (5.1i)

2
i,
= implied digital vol at R
2
i
for caplet i, (5.1j)
t
fix
i,
, t
st
i,
, t
end
i,
= caplet xing, start, and end dates (5.1k)

j
= j
th
exercise date of Bermudan (5.1l)
i
first
j
= settlement-upon-exercise date of Bermudan (5.1m)
f
j
= sign adjusted fee for exercising at
j
(5.1n)
5.1.2. Market inputs.
t
now
= today (evaluation, or as of, date) (5.2a)
V
cpn
1
, V
cpn
2
, ..., V
cpn
n
= todays value of each coupo (5.2b)
11
5.1.3. Model inputs. We need the calibrated H(T) and (t)
0 = T
0
, T
1
, ..., T
n
(5.3a)
0 = H
0
, H
1
, ..., H
n
(5.3b)
0 =
0
,
1
, ...,
m
(5.3c)
0 =
0
,
1
, ...,
m
(5.3d)
5.1.4. Grid inputs.
h
j
= grid spacing for each exercise (5.4a)
m
x
= number of grid points is 2m
x
+ 1 (5.4b)
5.2. Outputs. The vectors
(5.5) P
j
(x
k
) = payo of exercising at
j
for k = 0, 1, ..., 2m
x
for j = 1, 2, .., m.
5.3. Procedure. Creating the payo vectors is often done in two steps. The rst is a set-up routine
that does everything except calculate the nal payo vectors P
j
(x
k
). This routine does as much of the pre-
calculation as possible. The payo routine is then called for each j. This routine calculates the payo vector
from the stored intermediates. Lastly, the wind-up routine is called to free all the space.
Step 1. Dene
(5.6) t
st
j
= t
i
first
j
1
= the start date upon exercise for j = 1, ..., m
and interpolate to obtain the needed model parameters
(5.7a)
j
= (
j
)
(5.7b) H
i
= H(t
i
)
(5.7c)
i,
= (t
fix
i,
)
(5.7d) H
st
i,
= H(t
st
i,
), H
end
i,
= H(t
end
i,
)
Step 2. Determine the vol adjustment. For each i, determine
(5.8a)
1,2
i,
=
2
1 +
2
v
u
u
u
u
t
1 2
H
end
i,
H
st
i,
log
1 +
i,
R
1,2
i
1 +
i,
R
0
i,
,
12
with
(5.8b) =
log
1 +
i,
R
1,2
i
1 +
i,
R
0
i,
H
end
i,
H
st
i,

1,2
i,
q
t
fix
i,
t
now
log
R
1,2
i
R
0
i,
+
1
2
h

1,2
i,
i
2
(t
fix
i,
t
now
)
.
Step 3. Determine the gross up
i
for each coupon
Step 3a. Determine the todays unadjusted value of each coupon
V
unadj
i
= D
i
(
m
i
+
M
i
n
fix
n
fix
X
=1

1 N(d
1
i,
(0, 0)) N(d
2
i,
(0, 0))

)
where
(5.9a) d
1,2
i,
(0, 0) =
X
1,2
i,
+H
i
h

1,2
i,
i
2

1,2
i,
and
(5.9b) X
1,2
i,
=
log
1 +
i.
R
1,2
i
1 +
i.
R
0
i,
H
end
i,
H
st
i,

1
2

H
end
i,
+H
st
i,

1,2
i,
i
2
.
Step 3b. Determine the adjument factor
(5.10)
i
=
V
mkt
i
V
unadj
i
for i = 1, 2, ..., n
Note: this is a little dierent then in the other notes.
Step 4. For each j and k, determine
P
j
(x
k
) =
n
X
i=i
first
j
Z(x; t
i
)
(

i
m
i
c
fun
i
+

i
M
i
n
fix
n
fix
X
=1

1 N(d
1
i,
(t, x
k
)) N(d
2
i,
(t, x
k
))

)
(5.11a)
+Z(x
k
; t
n
) (1 +f
j
)Z(x
k
; t
st
j
)
where
Z(x; t
i
) = D
i
e
Hix
1
2
H
2
i

j
(5.11b)
d
1,2
i,
(t, x) =
X
1,2
i,
x +H
i
h

1,2
i,
i
2
1
j
/
i,

1,2
i,
q
1
j
/
i,
, (5.11c)
and
(5.11d) X
1,2
i,
=
log
1 +
i.
R
1,2
i
1 +
i.
R
0
i,
H
end
i,
H
st
i,

1
2

H
end
i,
+H
st
i,

1,2
i,
i
2
.
13
Step 5. If the deal is a payer, multiply payo by 1:
(5.12) P
j
(x
k
) P
j
(x
k
)
5.4. External routines used
. Standard normal distribution
6. Evaluating the Bermudan.
6.1. Inputs. Integration variables:
m
y
, h
y
: denes the y grid points through
(6.1) y
i
= h
y
(i m
y
) for i = 0, 1, ..., 2m
y
m
x
: the number of x points on the grid is 2m
x
+ 1
J : number of exercises
h
0
, h
1
, ..., h
J1
: For each j = 0, 1, ..., J 1, the discretization of x at
j
is
(6.2) x
k
= h
j
(k m
x
) for k = 0, 1, ..., 2m
x
Model variables:

0
,
1
, ...
J1
: For each j = 0, 1, ..., J 1,
j
is the variance of x at
j
.
Deal variables:
For each j = 0, 1, ..., J 1 :
P
jk
= P
j
(
j
, x
k
) for k = 0, 1, ..., 2m
x
: the vector of payo values at
j
if exercised at
j
Note: it is usualyl sounder engineering to pass the name of a payo routine and a pointer to a structure
containing whatever datas needed by the routine. This routine, given the input j, h
j
, m
x
and the pointer to
the data structure then returns the payo vector P
jk
. Even if for some complicated deal types, this routine
just returns rows of the 2d array of payos P
jk
, for other deal types the payo vectors can be calculated
on-the-y very eciently.
6.2. Outputs. Todays value V of the Bermudan, and the vector V
eur
0
, V
eur
1
, ..., V
eur
J1
. Here V
eur
j
is
the value of the j
th
European option on the accrual swap.
6.3. Procedure. Step 1. Call the routine for generating the integration weights w
0
, w
1
, ..., w
2my
and
partial sums S
0
, S
1
, ..., S
2m
y
. This requires only h
y
and m
y
as inputs. (See routine description below).
Step 2. Intialize the V
+
vector
(6.3) V
+
k
= 0 for k = 0, 1, ..., 2m
x
For j = J 1, J 2, ..., 1, 0:
Step 3. Call the routine to generate the payo vector P
jk
= P
j
(
j
, x
k
)
(6.4) P
jk
= P
j
(
j
, x
k
), where x
k
= h
j
(k m
x
) for k = 0, 1, ..., 2m
x
Step 4: Calculate the value of the j
th
European option. As input, this requires the grid variables
h
j
, m
x
, the payo vector P
jk
, the variance
j
at
j
,the y grid variablea h
y
, m
y
, and the weight vector w
i
.
(See routine description below).
Step 5: Take the maximum of the payo P
jk
with V
+
k
:
(6.5a) V
k
= max

P
jk
, V
+
k

for k = 0, 1, ..., 2m
x
,
14
and store the index K of the interval where P
jk
and V
+
k
cross,
(6.5b)

P
j,K
V
+
K

P
j,K+1
V
+
K+1

0.
If there is more than one crossing (which there wont be for this deal type) choose the crossing with K
nearest the midpoint k = m
x
. Store the maxs and mins from the crossing:
(6.5c) m
K
= min

P
j,K
, V
+
K

, m
K+1
= min

P
j,K+1
, V
+
K+1

(6.5d) M
K
= max

P
j,K
, V
+
K

, M
K+1
= max

P
j,K+1
, V
+
K+1

Note: Trhoughout step 6 below, we should set


1
= 0 so that
p

j1
=
p

0
at j = 0.
Step 6: For each k,
6a. Find i
first
(k), largest integer with
(6.6) i
first
(k) m
y

m
x
h
j
(k m
x
)h
j1
h
y
p

j1
.
6b. Find i
last
(k), the smallest integer with
(6.7) i
last
(k) m
y
+
m
x
h
j
(k m
x
)h
j1
h
y
p

j1
.
6c. Calculate the sum
(6.8a) V
+
k
= S
i
first
(k)
V
0
+
i
last
(k)+1
X
i=i
first
(k)+1
w
i
V
k(i)
+S
i
last
(k)
V
2m
x
where
(6.8b) k(i) =
h
j1
(k m
x
) +h
y
(i m
y
)
p

j1
h
j
+m
x
,
and where piecewise linear interpolation is used to evaluate V
k(i)
:
(6.8c) V
k(i)
= [k
0
(i) + 1 k(i)] V
k0(i)
+ [k(i) k
0
(i)] V
k0(i)+1
if k
0
(i) k(i) < k
0
(i) + 1.
Of course, the terms S
i
first
(k)
V
0
should be omitted if i
first
(k) < 0, and S
i
last
(k)
V
2mx
should be omitted if
i
last
(k) > 2m
x
.
6d. Correct the kink by adding
(6.9a) V
+
k
= V
+
k
+
h
j
E
avg
p

j1
G

h
j
(K +
1
2
m
x
) h
j1
(k m
x
)
p

j1
!
if h
j

p

j1
, and
V
+
k
= V
+
k
(6.9b)
+E
avg
N

h
j
(K + 1 m
x
) h
j1
(k m
x
)
p

j1
!
E
avg
N

h
j
(K m
x
) h
j1
(k m
x
)
p

j1
!
15
if h
j
>
p

j1
. Here,
(6.9c) E
avg
=
1
2
(M
K
m
K
) (M
K+1
M
K
)
M
K+1
m
K+1
+M
K
m
K
.
Step 7. Return V
+
k
at k = m
x
, todays value of the Bermudan option on a range note.
6.4. External routines needed
. Routine for generating the integration weights and partial sums (detailed below)
Routine for calculating the payo vector at each j (detailed above)
Routine for calculating the European option values (detailed immediately below)
Standard cumulative normal distribution
Gaussian density
7. Routine for evaluating the European options. Classically, this routine is part of the evaluating
the Bermudan routine
7.1. Inputs. grid variables: h
x
, m
x
dened by
(7.1a) x
k
= h
x
(k m
x
) for k = 0, 1, ..., 2m
x
the payo vector
(7.1b) P
j
(
j
, x
k
) = payo vector for exercising at the j
th
exercise date

j
, the variance at
j
the y denition variable h
y
, m
y
dened by
(7.1c) y
i
= h
y
(i m
y
)
the weight vector
(7.1d) w
0
, w
1
, ..., w
2my
7.2. Output. The todays value V
eur
j
of the j
th
European option
7.3. Procedure. Take the maximum of the payo with 0 :
(7.2a) I
k
= max {P
j
(
j
, x
k
), 0} for k = 0, 1, ..., 2m
x
,
and remember the interval x
K
, x
K+1
where P
j
(
j
, x
k
) becomes negative,
(7.2b) P
j
(
j
, x
K
)P
j
(
j
, x
K+1
) 0.
If there is more than one crossing (which there wont be for this deal type) choose the crossing with K
nearest the midpoint m
x
. Remember the maxs and mins from the crossing:
(7.2c) m
K
= min{P
j
(
j
, x
K
), 0} , m
K+1
= min{P
j
(
j
, x
K+1
), 0}
(7.2d) M
K
= max {P
j
(
j
, x
K
), 0} , M
K+1
= max {P
j
(
j
, x
K+1
), 0}
16
Compute the sum
(7.3a) V
eur
j
=
2my
X
i=0
w
i
I
k(i)
where for each i, I
k(i)
is the linearly interpolated value
(7.3b) I
k(i)
=
_
_
_
I
0
if k(i) 0
[k
0
(i) + 1 k(i)] I
k0(i)
+ [k(i) k
0
(i)] I
k0(i)+1
) if 0 < k(i) < 2m
x
,
I
2m
x
if k(i) 2m
x
at
(7.3c) k(i) =
h
y
(i m
y
)
h
x
q

j
+m
x
.
Here k
0
(i) is the largest integer smaller the k(i) :
(7.3d) k
0
(i) k(i) < k
0
(i) + 1
After computing the sum, we should make the kink correction
(7.4a) V
eur
j
= V
eur
j
+
h
x
E
avg
p

j
G

h
x
(K +
1
2
m
x
)
p

j
!
i h
x

p

j
, and
V
eur
j
= V
eur
j
+E
avg
N

h
x
(K + 1 m
x
)
p

j
!
E
avg
N

h
x
(K m
x
)
p

j
!
if h
j
>
p

j
. Here,
(7.4b) E
avg
=
1
2
(M
K
m
K
) (M
K+1
M
K
)
M
K+1
m
K+1
+M
K
m
K
.
7.4. External routines required
. Standard cumulative normal distribution
Gaussian density
8. Routine to create integration weights.
8.1. Inputs. There are only two inputs required: h and m. These dene the grid of points
(8.1) y
i
= h(i m) for i = 0, 1, ..., 2m
8.2. Outputs. The weight vector w
0
, w
1
, ..., w
2m
and the vector of partial sums, S
0
, S
1
, ..., S
2m
.
17
8.3. Procedure. Calculate
(8.2a) w
0
=

1 +
y
0
h

N(y
0
+h)
y
0
h
N(y
0
) +
1
h
{G(y
0
+h
y
) G(y
0
)} .
w
i
=

1 +
y
i
h

N(y
i
+h) 2
y
i
h
N(y
i
) +

1
y
i
h

N(y
i
h) (8.2b)
+
1
h
y
{G(y
i
+h) 2G(y
i
) +G(y
i
h)}
for i = 1, 2, ..., m. Then use symmetry to get the other valuts
(8.2c) w
i+m
= w
mi
for i = 1, 2, ..., m
Calculates the moments of the weights,
(8.3a) M
0
=
2my
X
i=0
w
i
, M
2
=
2my
X
i=0
y
4
i
w
i
, M
2
=
2my
X
i=0
y
4
i
w
i
,
and dene
(8.3b) A =
M
4
M
2
M
0
M
4
M
2
2
, B =
M
2
M
0
M
0
M
4
M
2
2
.
Then set re-dene the weights by,
(8.3c) w
new
i
= (A+By
2
i
)w
i
Finally calculate the partial sums
(8.4) S
i
=
i
X
k=0
w
k
.
8.4. External routines required
. N(x) standard cumulative normal distribution at x
G(x) standard gaussian density
1

2
e
x
2
/2
18

S-ar putea să vă placă și