Most call and put options are issued with one strike price
that holds for all times during the options’ life if they are American style,
or only at expiry if they are European-style, or only on certain dates if they
are Bermudan-style. FINCAD provides
several functions for each of these option types. However, there are instances where options
have:
·
time-varying strike prices
·
lock-out periods
·
exercise windows
FINCAD provides functions that take into account
these characteristics. They have the
extension “_strike”
in their name (e.g. aaBin_strike()).
For the valuation of options, it is standard to assume
that the risk-free rate is constant over the life of the option. This is an assumption in the Black-Scholes
formula, which is used for European options, and the Cox-Rubinstein Binomial
model, which is often used for American and Bermudan-style options. It is possible to modify these methods to
allow for time varying rates. This
modification is especially useful for long-dated options and FX options in
particular (this will be discussed in more detail below). FINCAD functions that allow for variable
rates have the extension “_curve” in
their name. (e.g. aaBin_curve()).
We note that, often options with these types of
characteristics are warrants or employee stock options (options issued by a
company on its own stock). If this is
the case, we encourage users to look at the specialized warrant functions that
allow for the characteristics described above and, further, account for any
dilution effect associated with an exercise of the warrants (or employee stock
options).
Though perhaps not well-known, it is very simple to modify
the standard binomial tree to account for variable rates. Consider one step of the binomial tree
between a node at and
(a move up) and
a move down.
Let
be the volatility and
the time step (which
is equal to the option time divided by the number of time steps).
Now
and
.
Let
and
.
We note that these values are independent of any
rates. Now, given a discount factor
curve, it is possible to interpolate the discounting rate, , associated with each time step. Suppose, for simplicity,
is a continuous
rate and let
. The probability of
moving down to
is given by
and the
probability of moving up is equal to
.
The important thing to note is that as rates
change, the stock prices (or FX rates, or commodity prices, ...) are not
altered. The only thing that is altered
in the tree is the probabilities. Hence,
the standard binomial method can be altered to account for time varying rates
by:
·
calculating the discounting rate at each time
step
·
calculating new probabilities at each time step
·
discounting the option at the given rate at each
time step.
We note that if there is a second curve for the
holding cost (in commodities) or a foreign curve (in FX), one also needs to
calculate this rate at each time step.
It is also fairly straightforward to modify the binomial
tree for variable strike prices. At any
given iteration, one simply needs to determine the strike price that applies
(if one does at all). Given this strike
price, at any time step, one can check the value of exercising a call or a put
against the value of retaining the option.
For a more
detailed discussion concerning binomial trees, we suggest that the reader refer
to the binomial tree document contained in the product.
aaBIN_strike()
:(price_u, strike_tbl, d_exp, d_v, vlt, rate_ann, acc_rate, cost_hldg,
acc_cost_hldg, option_type, iter, stat)
Calculates the fair value and risk statistics for an
American-style call or put option with time varying strike prices and any
combination of lock-out periods and/or exercise windows.
aaBIN_curve_strike():(price_u,
strike_tbl, d_exp, d_v, vlt, df_crv_std, df_crv_hld, intrp, option_type, iter,
stat)
Calculates the fair value and risk statistics for an
American-style call or put option with time varying strike prices and any
combination of lock-out periods and/or exercise windows. This function allows for variable rates.
aaBIN_strike_dcf()
: (price_u, strike_tbl, d_exp, d_v, vlt, rate_ann, acc_rate, div_obj,
option_type, iter, stat)
Calculates the fair value and risk statistics for an
American-style call or put option with time varying strike prices and any
combination of lock-out periods and/or exercise windows. The underlying equity may pay a discrete
dividend.
aaBIN_curve_strike_dcf()
:(price_u, strike_tbl, d_exp, d_v, vlt, df_crv_std, div_obj, intrp,
option_type, iter, stat)
Calculates the fair value and risk statistics for an
American-style call or put option with time varying strike prices and any
combination of lock-out periods and/or exercise windows. This function allows for variable rates. The underlying equity may pay a discrete
dividend.
aaBerm_strike()
:(price_u, ex_obj, d_exp, d_v, vlt, rate_ann, cost_hldg, acc_cost_hldg,
option_type, iter, stat)
Calculates the fair value and risk statistics for an
Bermudan-style call or put option with time varying strike prices.
aaBerm_curve_strike()
:(price_u, ex_obj, d_exp, d_v, vlt, df_crv_std, df_crv_hld, intrp, option_type,
iter, stat)
Calculates the fair value and risk statistics for an
Bermudan-style call or put option with time varying strike prices.
aaBerm_strike_dcf()
:(price_u, ex_obj, d_exp, d_v, vlt, rate_ann, div_obj, option_type, iter, stat)
Calculates the fair value and risk statistics for an
Bermudan-style call or put option with time varying strike prices. The underlying equity may pay a discrete
dividend.
aaBerm_curve_strike_dcf()
:(price_u, ex_obj, d_exp, d_v, vlt, df_crv_std, div_obj, intrp, option_type,
iter, stat)
Calculates the fair value and risk statistics for an
Bermudan-style call or put option with time varying strike prices. The underlying equity may pay a discrete
dividend.
Input Argument |
Description |
price_u |
Current value of the
underlying asset |
ex |
Strike price |
d_exp |
Expiry date of the
option |
d_v |
Value date |
vlt |
The annualized
volatility of the underlying asset (not an input in the implied volatility
functions). |
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. 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. 5.
If the underlying is a commodity, then rate2
should be set to the annualized holding cost of the commodity, including
storage and insurance costs as well as marginal convenience value. |
df_crv_std, df_crv_hld |
These are discount factor
curves (date, discount factor). If
the underlying is an FX rate, and quoted on a domestic per foreign basis,
df_crv_std should be the domestic curve and df_crv_hld the foreign curve.
If the quoted basis is foreign per domestic the curves should be switched. If the underlying is a commodity, then df_crv_std is the risk-free curve and
df_crv_hld should be the holding cost discount factor curve (including
storage and insurance costs as well as marginal convenience value). |
iter |
The number of steps of
the binomial tree. |
option_type |
The type of option: 1.
call 2.
put |
stat |
See the description of
the outputs. |
div_obj |
Dividend payment
table. The table has two columns, the dividend payment dates (left column)
and the corresponding dividend payment amounts (right column). Only used in aaBIN*_dcf() and aaBerm*_dcf(). |
Strike_tbl |
A 3 column table,
start date, end date, strike price.
This table is used in all of the aaBin*_strike* functions. |
Ex_tbl |
A 2 column table,
date, strike price. This table is used
in all of the aaBerm*_strike* functions. |
Output Statistic |
Description |
fair value |
The fair value of the
option. |
delta |
The rate of change in
the fair value of the option per change in the current value of the
underlying asset. This is the
derivative of the option price with respect to the current value of the
underlying. |
gamma |
The rate of change in
the value of delta per change in the current value of the underlying asset. This is the second derivative of the option
price with respect to the current value of the underlying. |
theta |
The rate of change in
the fair value of the option per one day decrease in 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 the volatility. |
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. |
rho of holding cost |
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 cost_hldg. If the underlying is futures, this statistic is
not available. |
For details about the calculation of Greeks, see
the Greeks of Options on non-Interest Rate
Instruments FINCAD Math Reference document.
Consider a call option on a stock that is locked-out for
the first year, has a strike price of 40 for the next year, is locked out the
third year and a strike price of 45 for the 4th and final year after
that. Suppose that today is the 1-Jan-2000,
the stock price is 40, the volatility 20%, the risk-free rate is 5% and that
the stock pays dividends at a rate of 2% (we are not going to run an actual
dividend version though this is likely a better model for a dividend paying
stock). The following table (Strike_tbl)
describes the exercise schedule.
Strike Table
effective date |
terminating date |
exercise price |
|
1-Jan-2002 |
40 |
|
1-Jan-2004 |
45 |
If we run the function aaBin_Strike()
with these parameters (and 200 time steps), we obtain a fair value of
5.6615. For comparison, running the same
option with a strike price of 40 in the 4th year, we obtain a value
of 6.694 (not surprisingly, more valuable).
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.