The payoff of a simple European or American style call or put
option depends only on the value of the asset, not on the path taken to get
there. A double barrier option has a lower barrier and an upper barrier. These
barriers “control” the option. Once either of these barriers is breached, the
status of the option is immediately determined: either the option comes into
existence if the barrier is an “in” or “knock in” barrier, or ceases to exist
if the barrier is an “out” or “knock out” barrier.
Double barrier options of many types exist and it is best
to try to understand these options by considering several key features. The first feature is the underlying option
which can be a:
·
European style, call or put option.
·
American style, call or put option.
·
Binary option, cash or nothing, asset or nothing
depending on whether barrier is hit or not hit.
Other possibilities exist, for example an Asian
option, but we will not consider these in this document (nor are the functions
relevant for any other cases).
The second feature is the combination of barriers. The options can be:
·
A double knock-out (DKO) or in
another name, one
touch knock-out, Barrier Option
In this case, both the lower and upper barrier are knock-out barriers. Initially the holder of the option owns a
call or a put option. If at any time,
either barrier is breached, the option is lost (knocked-out). In some cases, at knock-out, the holder may
receive a rebate.
·
A double knock-in (DKI), or one touch knock-in, Barrier
Option
In this case, if either barrier is breached, the holder of the barrier option
is knocked-in to, i.e. now owns, a call or put option. In cases where the option is never
knocked-in, the holder may receive a rebate.
·
An upper barrier knock-out (UKO) double Barrier Option
In this case, if the upper barrier is breached prior to the lower barrier, the
option holder is knocked out. If the
lower is breached prior to the upper or neither barrier is breached, the holder
owns the option.
·
An upper barrier knock-out (UKO2) double Barrier Option
In this case, if the upper barrier is breached prior to the lower barrier, the
option holder gets nothing. If the lower
barrier is breached prior to the upper, the holder receives an option. If neither barrier is breached, the holder
gets nothing.
·
A lower barrier knock-out (LKO) double Barrier Option
In this case, if the lower barrier is breached prior to the upper
barrier, the option holder is knocked out.
If the upper barrier is breached prior to the lower or neither barrier
is breached, the holder owns an option.
·
A lower barrier knock-out (LKO2) double Barrier Option
In this case, if the lower barrier is breached prior to the upper barrier, the
option holder gets nothing. If the upper
barrier is breached prior to the lower, the holder receives an option. If neither barrier is breached, the holder
gets nothing.
·
An upper barrier knock-in (UKI) double Barrier Option
In this case, if the upper barrier is breached prior to the lower barrier, the
option holder receives a call or put option.
If neither barrier is breached, the holder owns an option.
·
A lower barrier knock-in (LKI) double Barrier Option
same as a UKI, switch lower and upper.
·
A double touch knock-out Option (DTKO)
In this case, the holder initially holds a call or but option. However, if both the upper and lower barriers
are breached during the life of the option, the holder is knocked out.
·
A double touch knock-in Option (DTKI)
In this case, if both the upper and lower barriers are breached during the life
of the option, the holder is knocked-in to a call or put option.
With all of these various barrier functions, the
specification of rebates is possible. These rebates (cash or asset amounts) can be
specified if one or the other barrier is hit or if neither barrier is hit. Using these rebate features is a way of
including digital / binary payoffs that depend on barrier levels.
The final feature is the type of monitoring that is done
at the barriers. Several possibilities
exist:
·
Each barrier is continuously monitored for the
life of the option.
·
Each barrier is partially monitored for specific
windows during the life of the option. During these windows, the barriers are
monitored continuously.
·
Each barrier is partially monitored for specific
windows during the life of the option. During these windows, the barriers are
monitored at discrete dates.
·
Each barrier is discretely monitored at specific
dates during the life of the option.
We also note the following convention: the fair
value and risk statistics for options which have knocked out historically are
zero, where “historically” includes the present day. In the case of a standard DKO option for
which the underlying price is less than the lower barrier value, or greater
than the upper barrier value, all statistics are thus equal to zero, except the
probability of breaching the barrier, which is equal to one. For partial and/or discretely monitored
barriers, the same will be true if the barriers exist, and are monitored, on
the valuation date of the option.
For
the case of continuously monitored European-style double barrier options closed
form solutions are available from the papers [8] and [5]. The formulas given in [5] are implemented in FINCAD XL.
For
partial barrier options, where the barrier is continuously monitored, or for
continuously monitored barriers involving American style options, a binomial
tree is used. As is well known, the key
to using trees for pricing barrier options is to adjust the tree methodology
near the barrier. If no adjustment is
made, the methodology will work, but the convergence will be painfully slow
(i.e. it will require a lot of time steps to ensure an accurate solution). We use a tree scheme where the value at the
barrier nodes is adjusted (smoothed). Our method leads to very good convergence
results. In
For
discrete barrier options, where the barrier is monitored at a discrete instant
in time, a different type of approach is used.
For all cases, even European style options, no efficient closed form
solution is available (it is true that in some cases, one may be able to write
the solution down as multiple integrals over each discrete sampling point, but
these integrals cannot be efficiently calculated). We use a binomial tree approach and again
make an adjustment at the barrier points.
The adjustment is that derived by Steiner et al. [9].
We
also suggest the reader looking at the papers Horfelt [2] and Broadie et al. [1] for more discussion and examples of discrete barrier
options and more references therein.
The
functions aaBarrier_dbl_in_part_2win
and aaBarrier_dbl_out_part_2win
allow for 2 windows with different volatilities, rates and holding costs. From the value date up to the switch date,
volatility1, rate1 and holding cost1 are used and from the switch date to the
expiry date, volatility2, rate2 and holding cost2 are used.
For clarity we write down the formulas for the payoff of
the double barrier options described above. Let and
be the first hitting times
of the upper barrier and the lower barrier, respectively. For a discrete barrier option they are the
hitting times at the given discrete time points. If an option has windows, they
represent the hitting times within the given windows. Let
be a strike price,
the option expiry
time, and
the underlying price
at time
. Denote by
the indicator of an
event
, which equals 1 if
is true and 0
otherwise. Set
to be 1 if the option
is a call and -1 if it is a put. Recall
that the notations
and
mean “and” and “or”, respectively. Here are payoff formulas
at an exercise time
of the double barrier
options described above:
DKO:
DKI:
UKO:
UKI:
LKO
LKI:
For European binary double barrier options let denote the cash amount for a cash-based binary double barrier
option or the underlying price for an asset-based option. Here are the payoff formulas:
DKO:
DKI:
UKO:
UKI:
LKO:
LKI:
FINCAD provides functions to deal with all of the above
combinations and to help search for the correct function, the tables below are
helpful.
Double Barrier Options
Option Style |
Barrier Type |
Monitoring Type |
||
Continuous |
Partial Barrier (Windows) |
Discrete |
||
European |
DKO |
|||
American |
DKO |
|||
European |
DKI |
aaBarrier_dbl_oneTouch(), also use aaBarrier_dbl_in_part(): set the window to the life of the
option and ensure the monitoring frequency is set to continuous
(monitor_freq=10) |
||
American |
DKI |
aaBarrier_dbl_in_part(): set the window to the life of the
option and ensure the monitoring frequency is set to continuous
(monitor_freq=10) |
||
European |
UKO, LKO |
aaBarrier_dbl_mix(), or can use aaBarrier_dbl_mix_part() combined with a DKO. |
aaBarrier_dbl_mix_part() combined with a DKO. |
aaBarrier_dbl_mix_dis() combined with a DKO |
European |
UKO2, LKO2 |
aaBarrier_dbl_mix() less a DKO, or can use aaBarrier_dbl_mix_part(). |
||
American |
UKO, LKO |
aaBarrier_dbl_mix_part() combined with a DKO. |
aaBarrier_dbl_mix_part() combined with a DKO. |
aaBarrier_dbl_mix_dis() combined with a DKO |
American |
UKO2, LKO2 |
|||
European |
UKI, LKI |
aaBarrier_dbl_mix(), aaBarrier_dbl_mix_part(), possibly combine with DKO |
aaBarrier_dbl_mix_part() possibly combine with DKO |
aaBarrier_dbl_mix_dis(), possibly combine with DKO |
American |
UKI, LKI |
aaBarrier_dbl_mix_part(), possibly combine with DKO |
aaBarrier_dbl_mix_part() possibly combine with DKO |
aaBarrier_dbl_mix_dis(), possibly combine with DKO |
European |
DTKO |
|
|
|
European |
DTKI |
|
|
Binary
Double Barrier Options
Option Style |
Barrier Type |
Monitoring type |
||
Continuous |
Partial Barrier (Windows) |
Discrete |
||
European |
DKO |
Use rebate features in corresponding functions listed
above |
Use rebate features in corresponding functions
listed above |
|
European |
DKI |
s/a |
s/a |
|
European |
UKO |
s/a |
s/a |
|
European |
LKO |
s/a |
s/a |
|
European |
UKI |
s/a |
s/a |
|
European |
LKI |
s/a |
s/a |
|
European |
DTKO |
s/a |
s/a |
|
European |
DTKI |
s/a |
s/a |
Some
of the above functions listed don’t take in rebates. To calculate rebate values
for these functions use the following function:
aaBarrier_dbl_hit_cash()
Other types of Double Barrier Options:
Quanto Options: aaQuanto_Barrier_dbl(),aaQuanto_Barrier_dbl_bin()
FX
Specific Options:
aaFX_Barrier_dbl(), aaFX_Barrier_dbl_bin()
In
the above listed functions, seven are based on “closed form” formulas of
European style double barrier options. These
are aaBarrier_dbl_mix(), aaBarrier_dbl_oneTouch(), aaBarrier_dbl_dblTouch(), aaBarrier_dbl_bin_mix(), aaBarrier_dbl_bin_oneTouch(), aaBarrier_dbl_bin_dblTouch() and aaBarrier_dbl_hit_cash(). For more details see [5]. All other
functions are implemented using tree-based numerical methods. In all of these tree based algorithms,
corrections are made to account for the effect of the barriers (and the
numerical errors these can introduce).
For more details see, for example, [9], [2], [1].
For
convenience of presenting the inputs of the functions their names with input
parameters are listed again in the following:
aaBarrier_dbl(d_v,
d_exp, price_u, ex, bar1, bar2, rebate_up, rebate_dn, vlt, rate_ann, cost_hldg,
option_type, optimize, option_style, stat)
aaBarrier_dbl_bin(d_v,
d_exp, price_u, ex, bar1, bar2, rebate_exp, rebate_up, rebate_dn, vlt, rate_ann,
cost_hldg, option_type, optimize, stat)
aaBarrier_dbl_in_dis(d_v,
d_exp, price_u, ex, bar_DKI_tbl, rebate, vlt, rate_ann, cost_hldg, option_type,
iter, option_style, knockin, stat)
aaBarrier_dbl_out_dis(d_v,
d_exp, price_u, ex, bar_DKO_tbl, vlt, rate_ann, cost_hldg, option_type, iter, option_style,
KOStatus, stat)
aaBarrier_dbl_in_part(d_v,
d_exp, price_u, ex, bar_DKI_tbl, monitor_freq, rebate, vlt, rate_ann, cost_hldg,
option_type, iter, option_style, knockin, hl, d_ knockin, stat)
aaBarrier_dbl_out_part(d_v,
d_exp, price_u, ex, bar_dbl_part_tbl, monitor_freq, vlt, rate_ann, cost_hldg, option_type,
iter, option_style, KOStatus, hl, d_rul, stat)
aaBarrier_dbl_in_part_2win(d_v,
d_exp, price_u, ex, bar_DKI_tbl, monitor_freq, rebate, switch_date, vlt1, rate_ann1,
cost_hldg1, vlt2, rate_ann2, cost_hldg2, option_type, iter, option_style, knockin,
hl, d_knockin, stat)
aaBarrier_dbl_out_part_2win(d_v,
d_exp, price_u, ex, bar_dbl_part_tbl, monitor_freq, switch_date, vlt1, rate_ann1,
cost_hldg1, vlt2, rate_ann2, cost_hldg2, option_type, iter, option_style, KOStatus,
hl, d_rul, stat)
The functions aaBarrier_dbl_in_part_2win
and
aaBarrier_dbl_out_part_2win allow for 2 windows with
different volatilities, rates and holding costs. From the value date up to the switch date,
volatility1, rate1 and holding cost1 are used and from the switch date to the
expiry date, volatility2, rate2 and holding cost2 are used.
aaBarrier_dbl_mix_dis(d_v,
d_exp, price_u, ex, bar_DKI_tbl, bar_dbl_mix_type, vlt, rate_ann, cost_hldg, option_type,
iter, option_style, barMixStatus, stat)
aaBarrier_dbl_mix_part(d_v,
d_exp, price_u, ex, bar_DKI_tbl, monitor_freq, bar_dbl_mix_type, vlt, rate_ann,
cost_hldg, option_type, iter, option_style, barMixStatus, hl, d_rul, stat)
aaBarrier_dbl_mix(d_v,
d_exp, price_u, ex, bar1, bar2, hit_order, bar_type, vlt, rate_ann, cost_hldg, option_type,
stat)
aaBarrier_dbl_onetouch(d_v,
d_exp, price_u, ex, bar1, bar2, bar_type, vlt, rate_ann, cost_hldg, option_type,
stat)
aaBarrier_dbl_dbltouch(d_v,
d_exp, price_u, ex, bar1, bar2, bar_type, vlt, rate_ann, cost_hldg, option_type,
dblTouch_stat, stat)
aaBarrier_dbl_bin_mix(d_v,
d_exp, price_u, ex, bar1, bar2, hit_order, bar_type, payoff, cash, vlt, rate_ann,
cost_hldg, option_type, stat)
aaBarrier_dbl_bin_onetouch(d_v,
d_exp, price_u, ex, bar1, bar2, bar_type, payoff, cash, vlt, rate_ann, cost_hldg,
option_type, stat)
aaBarrier_dbl_bin_dbltouch(d_v,
d_exp, price_u, ex, bar1, bar2, bar_type, payoff, cash, vlt, rate_ann, cost_hldg,
option_type, dblTouch_stat, stat)
aaBarrier_dbl_bin_hit_cash(d_v,
d_exp, price_u, bar1, bar2, rebate_upbarhit, rebate_dnbarhit, rebate_nobarhit, vlt,
rate_ann, cost_hldg, stat)
aaQuanto_Barrier_dbl(d_v,
d_exp, price_ufor, ex_for, FX_fix, bar1, bar2, rebate_up, rebate_dn, vlt_u, vlt_FX,
corr, rate_for_ann, rate_dom_ann, cost_hldg, option_type, optimize, option_style,
stat)
aaQuanto_Barrier_dbl_bin(d_v,
d_exp, price_ufor, ex_for, FX_fix, bar1, bar2, rebate_exp, rebate_up, rebate_dn,
vlt_u, vlt_FX, corr, rate_for_ann, rate_dom_ann, cost_hldg, option_type, optimize,
stat)
aaFX_Barrier_dbl(d_v,
d_exp, FX_rate, FX_ex, FX_bar1, FX_bar2, princ_curr, FX_unit, rebate_up, rebate_dn,
vlt, intrp, df_prim, df_sec, option_type, optimize, option_style, asset_type, amount,
stat)
aaFX_Barrier_dbl_bin(d_v,
d_exp, FX_rate, FX_ex, FX_bar1, FX_bar2, princ_curr, FX_unit, rebate_exp, rebate_up,
rebate_dn, vlt, intrp, df_prim, df_sec, option_type, optimize, asset_type, amount,
stat)
Most
of these FINCAD functions have their inverse (root finding) versions:
aaBarrier_dbl_bin_oneTouch_ix()
aaBarrier_dbl_bin_dblTouch_ix()
aaBarrier_dbl_bin_hit_cash_ix()
These
“_ix” (implied
x,
where x is any input parameter) functions find the value of any input parameter
for a given value of an output statistic. More details can be found in the General Root Finding_ix Functions
FINCAD Math Reference document.
Input Argument |
Description |
d_exp |
Expiry date of the option |
ex |
Strike price |
price_u |
Current value of an underlying asset |
bar1 |
Lower barrier value (less than price_u) |
bar2 |
Upper barrier value (larger than price_u) |
rebate_up |
Cash amount paid when the upper barrier is breached |
rebate_dn |
Cash amount paid when the lower barrier is breached |
rebate_exp |
Cash amount paid when no barrier is breached |
rebate |
A rebate |
vlt |
The annualized volatility of the underlying asset. |
rate_ann, cost_hldg |
Also denoted rate1 and rate2, respectively. These rates are quoted on an annually
compounded, Act / 365 (fixed) basis. 1. If
the underlying is an equity, rate1 is the relevant risk-free rate and rate2
is the annualized dividend yield. 2. If
the underlying is a forward or futures price, rate2 should be set equal to
the risk-free rate1. 3. If
the underlying is an FX (foreign exchange) rate, and quoted on a domestic per
foreign basis, rate1 should be the risk-free domestic rate and rate2 the
risk-free foreign rate. 4. If
the underlying is an FX rate, and quoted on a foreign per domestic basis,
rate1 should be the risk-free foreign rate and rate2 the risk-free domestic
rate. |
option_type |
The type of option: 1 = call, 2 = put, 3 = call and put. The
third option type “call and put” is issued only in the function aaBarrier_dbl_bin()
(This is the binary barrier option with a payoff independent of the strike
price). |
optimize |
Level of optimization in tree building: 1 = level 1
(low),…, 4 = level 4 (high). If the input
value is more than 4, then the value will be treated as the number of time
steps (minimum =10) |
option_style |
The style of the option: 1 = European, 2 = American |
stat |
Indicator of risk statistics. See outputs in the examples or the function
reference pages. |
bar_DKI_tbl |
In the functions aaBarrier_dbl_in_dis
and aaBarrier_dbl_mix_dis
it is a three column table (effective date, lower barrier, upper barrier). In the functions aaBarrier_dbl_in_part and
aaBarrier_dbl_mix_part
it is a four column table (effective date, terminating date, lower barrier,
upper barrier). |
bar_DKO_tbl |
A five column table (date, lower barrier, rebate if lower
barrier is hit first, upper barrier, rebate if upper barrier is hit first) |
bar_dbl_part_tbl |
A six column table (effective date, terminating date,
lower barrier, rebate if lower barrier is hit first, upper barrier, rebate if
upper barrier is hit first) |
monitor_freq |
Barrier monitoring frequency |
iter |
Number of time steps use in binomial tree |
knockin |
Option status - a switch: 1 = option has not been knocked in, 2 = option has been knocked in (a vanilla option) |
KOStatus |
Option knock-out status, a switch: 1 = option is alive, 2 = option has been knocked out. |
bar_dbl_mix_type |
Type of mixed barrier - a switch: 1 = upper barrier knock-in, lower barrier knock-out, 2 = lower barrier knock-in, upper barrier knock-out |
barMixStatus |
Mixed barrier option status: 1 = no barrier has been hit, 2 = option has been knocked in, 3 = option has been knocked out. |
hit_order |
Barrier hitting order - a switch: 1 = upper barrier is hit before the lower barrier is hit, 2 = lower barrier is hit before the upper barrier is hit. |
bar_type |
Type of barriers - a switch: 1 = knock-in barriers, 2 = knock-out barriers. |
dblTouch_stat |
Status of a double touch double barrier option - a switch: 1 = no barrier has been hit, 2 = upper barrier has been hit, but lower barrier has not
been hit (a single lower barrier option), 3 = lower barrier has been hit, but upper barrier has not
been hit (a single upper barrier option), 4 = both barriers have been hit (a vanilla option for a
knock-in option and nothing for a knock-out option). |
payoff |
Type of payoff - a switch: 1 = cash, 2 = asset |
price_ufor |
Price of foreign asset |
ex_for |
Exercise price of foreign asset |
FX_fix |
Fixed FX rate |
vlt_FX |
Volatility of FX rate |
corr |
Instant correlation of FX rate (domestic per one unit of
foreign currency) and price of foreign asset |
FX_rate |
Spot FX rate |
FX_ex |
Exercise price of FX rate |
FX_bar1 |
Lower barrier value of FX rate |
FX_bar2 |
Upper barrier value of FX rate |
princ_curr |
Currency of the principal amount - a switch: 1 = primary currency, 2 = secondary currency |
FX_unit |
Unit of the spot FX rate and exercise FX rate - a switch: 1 = secondary currency per one unit of primary currency, 2 = primary currency per one unit of secondary currency. |
Output Statistic |
Description |
fair
value |
The
fair value of the option. |
delta |
The
rate of change in the fair value of the option per one unit change in the
current value of the underlying asset. This is the derivative of the option price
with respect to the underlying current value. |
gamma |
The
rate of change in the value of delta per one unit change in the current value
of the underlying asset. This is the
second derivative of the option price with respect to the underlying current
value. |
theta |
The
rate of change in the fair value of the option per one day decrease of the
option time. This is the negative of
the derivative of the option price with respect to the option time (in
years), divided by 365. |
vega |
The
rate of change in the fair value of the option per 1% change in volatility. This is the derivative of the option price
with respect to volatility, divided by 100. |
rho
of rate |
The
rate of change in the fair value of the option per 1% change in the risk-free
rate, rate_ann. This is the derivative
of the option price with respect to the risk-free rate, divided by 100. |
rho
of holding cost rate |
The
rate of change in the fair value of the option per 1% change in the holding
cost, cost_hldg. This is the
derivative of the option price with respect to the holding cost, divided by
100. If the underlying is futures,
this statistic is not available. |
value
of upper rebate |
The
present value of the upper barrier rebate. |
value
of lower rebate |
The
present value of the lower barrier rebate. |
probability
of not hitting a barrier |
The
probability (the risk neutral probability) that the underlying does not hit a
barrier during the option’s lifetime. |
probability
of hitting lower barrier (early exercise considered) |
The
probability (the risk neutral probability) that, when early exercise is taken
into consideration, during the life of the option the underlying price
reaches the lower barrier before it reaches the upper barrier. For European style options early exercise is
not allowed and this value is the same as probability of hitting upper
barrier. This output is available only
for the function aaBarrier_dbl(). |
probability
of hitting upper barrier (early exercise considered) |
The
same as above but for the upper barrier. |
probability
of hitting upper barrier |
The
probability (the risk neutral probability) that during the life of the option
the underlying price hits the upper barrier before it hits the lower barrier.
Note that this number is not adjusted
for possible early exercise |
probability
of hitting lower barrier |
The
same as above but for the lower barrier. |
probability
of early exercise |
The
probability (the risk neutral probability) that the option will be exercised
early. |
Remark:
There are other types of outputs in the
FX or quanto specific functions. Their
meaning is self-explanatory from their names.
For details about the calculation of Greeks, see the Greeks of Options on non-Interest Rate
Instruments FINCAD Math Reference document.
Context
specific examples are presented for American-style options on stocks, commodity
futures and foreign exchange rates. For options involving different
underlyings, see the remarks following these examples.
Consider
an American style double barrier put option on an index. The stock has a spot value of 910. The strike price of the option is 925 and the
lower and upper barriers are 850 and 1000, respectively. The rebate when the lower barrier is breached
is 3 and the rebate when the upper barrier is breached is 30. Today is Dec. 3, 2003. The expiration date of the option is
Dec. 1, 2004. Suppose the relevant
risk-free interest rate (annually compounded, Actual/365) is 4% and the
dividend payout rate over the life of the option (annually compounded,
Actual/365) is 1%. Suppose the annual
volatility of the index is 12%. Using
the function aaBarrier_dbl()
we obtain the following results:
aaBarrier_dbl
Argument |
Description |
Example Data |
Switch |
d_v |
value (settlement) date |
3-Dec-2003 |
|
d_exp |
expiry date |
1-Dec-2004 |
|
price_u |
underlying price |
910 |
|
ex |
exercise price |
925 |
|
bar1 |
lower barrier value |
850 |
|
bar2 |
upper barrier value |
1000 |
|
rebate_up |
payout if upper barrier is hit |
30 |
|
rebate_dn |
payout if lower barrier is hit |
3 |
|
vlt |
volatility |
0.12 |
|
rate_ann |
rate – annual – Actual/365 |
0.04 |
|
cost_hldg |
holding – annual – Actual/365 |
0.01 |
|
option_type |
option type |
2 |
put |
optimize |
number of time steps |
2 |
optimization level 2 |
option_style |
style of option |
2 |
American |
stat |
list of statistics |
1…14 |
|
Results
Statistics |
Description |
Value |
1 |
fair value |
48.8504799 |
2 |
delta |
-0.30905727 |
3 |
gamma |
0.002838768 |
4 |
theta |
-1.86E-02 |
5 |
vega |
1.463293734 |
6 |
rho of rate |
-1.10406092 |
7 |
rho of cost of holding |
0.992558754 |
8 |
value of upper rebate |
12.40817322 |
9 |
value of lower rebate |
0 |
10 |
probability of hitting lower barrier (early exercise
considered) |
0.420111057 |
11 |
probability of hitting upper barrier (early exercise
considered) |
0 |
12 |
probability of hitting upper barrier |
0.43342468 |
13 |
probability of hitting lower barrier |
0.482333503 |
14 |
probability of early exercise |
0.545128181 |
Suppose
in Example 1 the option is an American knock-in double barrier option. Suppose
also the rebate when no barrier is breached during the option’s life is 1. Call
the function aaBarrier_dbl_in_part
with continuous barrier monitoring (barrier monitoring frequency
= 10) and double barrier knock-in table:
Double
Barrier Knock-in Table
effective date |
terminating date |
lower barrier |
upper barrier |
3-Dec-2003 |
1-Dec-2004 |
850 |
1000 |
to
get the following results:
aaBarrier_dbl_in_part
Argument |
Description |
Example Data |
Switch |
d_v |
value (settlement) date |
3-Dec-2003 |
|
d_exp |
expiry date |
1-Dec-2004 |
|
price_u |
underlying price |
910 |
|
ex |
exercise price |
925 |
|
bar_DKI_tbl |
double
barrier knock-in table |
see above |
|
monit_freq |
barrier monitoring frequency |
10 |
continuous |
rebate |
rebate if barrier is not hit |
0 |
|
vlt |
volatility |
0.12 |
|
rate_ann |
rate – annual – Actual/365 |
0.04 |
|
cost_hldg |
holding cost – annual – Actual/365 |
0.01 |
|
option_type |
option type |
2 |
put |
iter |
number of time steps |
500 |
|
option style |
style of option |
2 |
American |
knockin |
option status |
1 |
option has not been knocked-in |
hl |
holiday list |
0 |
|
d_rul |
business day convention |
1 |
no adjustment |
stat |
list of statistics |
1…12 |
|
Results
Statistics |
Description |
Value |
1 |
fair value per barrel |
39.52502218 |
2 |
Delta |
-0.49371315 |
3 |
Gamma |
0.005078237 |
4 |
theta |
-0.04267492 |
5 |
Vega |
3.90433997 |
6 |
rho of rate |
-2.59213374 |
7 |
rho of holding cost |
2.784928351 |
8 |
value of rebate |
0 |
9 |
probability of not hitting any barrier |
0.084415011 |
10 |
probability of hitting upper barrier (early exercise
considered) |
0.43371672 |
11 |
probability of hitting lower barrier (early exercise
considered) |
0.481868269 |
12 |
fair value of a vanilla option |
40.86002039 |
A
trader thinks that crude oil futures price will more likely go up and unlikely
go down much in the coming months. He
decides to buy a European-style lower barrier knock-out double barrier call
option on 6 month's crude oil futures. With
this option, when the futures’ price hits the upper barrier before hitting the
lower barrier or it does not hit the lower barrier at all during the option’s
life time, he will be knocked into a vanilla call option; otherwise, he will
walk away with nothing. Suppose the size
of the option is 10000 barrels and the strike price is $25 per barrel. The upper barrier is set to be $28 and the
lower barrier $23. The current price of
6 month's crude oil futures per barrel is $24. Today's date is June 3, 2004. The expiration date of the option is Oct 1,
2004. Suppose the relevant risk-free
interest rate over the life of the option is 4%, (annually compounded,
Actual/365), and annual volatility of the futures price is 20%. Using the function aaBarrier_dbl_mix() we
obtain the following results:
aaBarrier_dbl_mix
Argument |
Description |
Example Data |
Switch |
d_v |
value (settlement) date |
1-Jun-2004 |
|
d_exp |
expiry date |
1-Oct-2004 |
|
price_u |
underlying price |
24 |
|
ex |
exercise price |
25 |
|
bar1 |
lower barrier value |
23 |
|
bar2 |
upper barrier value |
28 |
|
hit_order |
barrier hitting order |
2 |
lower barrier first |
bar_type |
type of barrier |
2 |
knock out |
vlt |
volatility |
0.2 |
|
rate_ann |
rate – annual – Actual/365 |
0.04 |
|
cost_hldg |
holding cost – annual – Actual/365 |
0.04 |
|
option_type |
option type |
1 |
call |
stat |
list of statistics |
1…10 |
|
Results
Statistics |
Description |
Value |
1 |
fair value per barrel |
0.494322009 |
2 |
delta |
0.513901321 |
3 |
gamma |
0.056054491 |
4 |
theta |
-1.73E-03 |
5 |
vega |
0.02087684 |
6 |
rho of rate |
0.020635521 |
7 |
rho of cost of holding |
-0.02215435 |
8 |
probability of not hitting any barrier |
0.133155465 |
9 |
probability of hitting upper barrier |
0.725553901 |
10 |
probability of hitting lower barrier |
0.858709365 |
Fair
value for 1000 barrels = 10000×fair value per barrel = 4943 ($).
Instead
of buying a double barrier option the trader could buy a vanilla call option. To find out how much the trader can save, call
aaBSG
to calculate the fair value of the vanilla call option as 10000*0.69 = 6900
($). Hence he can save:
6900
– 4943 = 1957 ($)
Suppose
in example 3 the trader wants to hedge his oil price for the summers of the
coming three years. For this he decides
to buy an American partial upper barrier knock-in call option. For this option the 6 month futures price hits
the predetermined upper barrier before hitting the lower barrier in certain
time window. The option will be knocked
into a vanilla American call option; otherwise, the option will expire
worthless. The option’s maturity is 1-Oct-2006 and the three barrier
windows are set as follows
Double
Barrier Table
effective date |
terminating date |
lower barrier |
upper barrier |
|
1-Oct-2004 |
22 |
28 |
1-Jun-2005 |
1-Oct-2005 |
23 |
29 |
1-Jun-2006 |
1-Oct-2006 |
23 |
30 |
Call
the function aaBarrier_dbl_mix_part
to get the following results:
aaBarrier_dbl_mix_part
Argument |
Description |
Example Data |
Switch |
d_v |
value (settlement) date |
1-Jun-2004 |
|
d_exp |
expiry date |
1-Oct-2006 |
|
price_u |
underlying price |
24 |
|
ex |
exercise price |
25 |
|
bar_DKI_tbl |
double
barrier table |
see above |
|
monit_freq |
barrier monitoring frequency |
10 |
|
bar_dbl_mix_type |
type of mixed barrier |
1 |
upper knock-in, lower knock-out |
rebate |
rebate |
0 |
|
vlt |
volatility |
0.2 |
|
rate_ann |
rate – annual – Actual/365 |
0.04 |
|
cost_hldg |
holding cost – annual – Actual/365 |
0.04 |
|
option_type |
option type |
1 |
call |
Iter |
number of time steps |
500 |
|
option_style |
option style |
2 |
American |
barMixStatus |
knock-in status |
1 |
option has not touched either barrier (default) |
hl |
holiday list |
0 |
|
d_rul |
business day convention |
1 |
next good business day |
stat |
list of statistics |
1…12 |
|
Results
Statistics |
Description |
Value |
1 |
fair value per barrel |
1.477289693 |
2 |
delta |
0.739864895 |
3 |
gamma |
0.005077705 |
4 |
theta |
-1.5521E-06 |
5 |
vega |
0.061642165 |
6 |
rho of rate |
0.12411354 |
7 |
rho of holding cost |
-0.13053542 |
8 |
value of rebate |
0 |
9 |
probability of not hitting any barrier |
0.018417485 |
10 |
probability of hitting upper barrier |
0.282251376 |
11 |
probability of hitting lower barrier |
0.69933114 |
12 |
fair value of a vanilla option |
2.3330944 |
The
premium that the trader has to pay is then:
10000×1.4773
= 14773.
The value of the corresponding vanilla call option
(use aaBSG)
is:
10000×2.3331
= 23331.
Thus by buying a double barrier option instead of a
vanilla option he can save
23331
– 14773 = 8558 ($).
Consider
a binary double touch knock-in put option on the FX rate £/$, sterling pounds
per unit of US dollar. The current value
of the FX rate is 0.61. The strike price
is 0.62 and the lower and upper barriers of the option are set to be 0.55 and
0.70, respectively. The cash payment at
the expiration, when none of the barriers is touched and the FX rate is below
the strike, is 0.1. T he current risk-free interest rate of sterling (annually
compounded, Actual/365 (fixed)) is 4% and that of the U.S. dollar is 2%. Today’s date is Dec. 3, 2003. The expiration
date of the option is Dec. 1, 2004 and none of the barriers has been breached
since the inception of option. Suppose
the annual volatility of the exchange rate is 12%. Using the function aaBarrier_dbl_bin_dblTouch()
we obtain the following results:
aaBarrier_dbl_bin_dblTouch
Argument |
Description |
Example Data |
Switch |
d_v |
value (settlement) date |
3-Dec-2003 |
|
d_exp |
expiry date |
1-Dec-2004 |
|
price_u |
underlying price |
0.61 |
|
ex |
exercise price |
0.62 |
|
bar1 |
lower barrier value |
0.55 |
|
bar2 |
upper barrier value |
0.7 |
|
bar_type |
barrier type |
2 |
knock out |
payoff |
cash or asset |
cash |
|
cash |
cash payment |
0.1 |
|
vlt |
volatility |
0.12 |
|
rate_ann |
rate – annual – Actual/365 |
0.04 |
|
cost_hldg |
holding cost – annual – Actual/365 |
0.02 |
|
option_type |
option type |
2 |
put |
dblTouch_stat |
barrier touch status |
1 |
no barrier is hit |
stat |
list of statistics |
1…12 |
|
Results
Statistics |
Description |
Value |
1 |
fair value |
0.049245606 |
2 |
delta |
-0.530427 |
3 |
gamma |
0.35275304 |
4 |
theta |
1.97019E-05 |
5 |
vega |
-8.0671E-05 |
6 |
rho of rate |
-0.00352155 |
7 |
rho of holding cost |
0.0031203 |
8 |
value of rebate |
0.2765293 |
9 |
probability of not hitting any barrier |
0.352669089 |
10 |
probability of hitting upper barrier (early exercise
considered) |
0.629198353 |
11 |
probability of hitting lower barrier (early exercise
considered) |
0.049245606 |
12 |
fair value of a vanilla option |
0.049245606 |
Suppose
the option is to sell $100000. Then the
cost is:
100000
× 0.049245606=
4924.56 (£) = 8073.05 (£).
Tip: The selection of the appropriate
FX rate in valuing an option on FX rates can be confusing. The following table
lists all of the different scenarios in the sterling/dollar FX market. One can
simply follow this example in his/her modeling.
buy/sell |
amount |
option type |
FX rate |
cost of option |
sell
|
100
$ |
put |
£/$ |
100×option
value (£) |
buy |
100
$ |
call |
£/$ |
100×option
value (£) |
buy
|
50
£ |
call |
$/£ |
50×option
value ($) |
sell
|
50
£ |
put |
$/£ |
50×option
value ($) |
Note:
For double knock-out or binary double
knock-out options it is more convenient to use one of the functions aaFX_barrier_dbl
and aaFX_barrier_dbl_bin.
Most
options on commodities are options on commodity futures. However one can also
use the above functions to value options on commodity spot prices. To use these
functions one should identify first the rates of storage cost, insurance cost
and convenience yield of the underlying commodity and then combine these rates
to define the rate of the cost of holding of the commodity. This value is used
as the value of the parameter cost_hldg.
Valuation
of options on stocks modeled using continuous dividend payout rates is similar
to the valuation of options on indices.
Stock
paying discrete dividends can be modeled approximately as stocks paying
continuous dividends by converting the discrete dividend payout to a continuous
rate.
[3]
[4]
[6]
Rubinstein,
M. and Reiner, E., (October 1991), ‘Unscrambling the Binary Code’, Risk, pp. 75-83.
[7]
Rubinstein,
M. and Reiner, E., (Sept. 1991), ‘Breaking Down the Barriers’, Risk, pp. 28-35.
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.