Equity Derivatives Using Closed-Form Solutions
Introduction
Financial Instruments Toolbox™ supports four types of closed-form solutions and analytical approximations to calculate price and sensitivities (greeks) of vanilla options:
Black-Scholes model
Black model
Roll-Geske-Whaley model
Bjerksund-Stensland 2002 model
Black-Scholes Model
The Black-Scholes model is one of the most commonly used models to price European calls and puts. It serves as a basis for many closed-form solutions used for pricing options. The standard Black-Scholes model is based on the following assumptions:
There are no dividends paid during the life of the option.
The option can only be exercised at maturity.
The markets operate under a Markov process in continuous time.
No commissions are paid.
The risk-free interest rate is known and constant.
Returns on the underlying stocks are log-normally distributed.
Note
The Black-Scholes model implemented in Financial Instruments Toolbox software allows dividends. The following three dividend methods are supported:
Cash dividend
Continuous dividend yield
Constant dividend yield
However, not all Black-Scholes closed-form pricing
functions support all three dividend methods. For more information
on specifying the dividend methods, see stockspec
.
Closed-form solutions based on a Black-Scholes model support the following tasks.
Task | Function |
---|---|
Price European options with different dividends using the Black-Scholes option pricing model. | |
Calculate European option prices and sensitivities using the Black-Scholes option pricing model. | |
Calculate implied volatility on European options using the Black-Scholes option pricing model. | |
Price European simple chooser options using Black-Scholes model. |
For an example using the Black-Scholes model, see Pricing Using the Black-Scholes Model.
Black Model
Use the Black model for pricing European options on physical commodities, forwards or futures. The Black model supported by Financial Instruments Toolbox software is a special case of the Black-Scholes model. The Black model uses a forward price as an underlier in place of a spot price. The assumption is that the forward price at maturity of the option is log-normally distributed.
Closed-form solutions for a Black model support the following tasks.
Task | Function |
---|---|
Price European options on futures using the Black option pricing model. | |
Calculate European option prices and sensitivities on futures using the Black option pricing model. | |
Calculate implied volatility for European options using the Black option pricing model. |
For an example using the Black model, see Pricing Using the Black Model.
Roll-Geske-Whaley Model
Use the Roll-Geske-Whaley approximation method to price American call options paying a single cash dividend. This model is based on the modification of the observed stock price for the present value of the dividend and also supports a compound option to account for the possibility of early exercise. The Roll-Geske-Whaley model has drawbacks due to an escrowed dividend price approach which may lead to arbitrage. For further explanation, see Options, Futures, and Other Derivatives by John Hull.
Closed-form solutions for a Roll-Geske-Whaley model support the following tasks.
Task | Function |
---|---|
Price American call options with a single cash dividend using the Roll-Geske-Whaley option pricing model. | |
Calculate American call prices and sensitivities using the Roll-Geske-Whaley option pricing model. | |
Calculate implied volatility for American call options using the Roll-Geske-Whaley option pricing model. |
For an example using the Roll-Geske-Whaley model, see Pricing Using the Roll-Geske-Whaley Model.
Bjerksund-Stensland 2002 Model
Use the Bjerksund-Stensland 2002 model for pricing American puts and calls with continuous dividend yield. This model works by dividing the time to maturity of the option in two separate parts, each with its own flat exercise boundary (trigger price). The Bjerksund-Stensland 2002 method is a generalization of the Bjerksund and Stensland 1993 method and is considered to be computationally efficient. For further explanation, see Closed Form Valuation of American Options by Bjerksund and Stensland.
Closed-form solutions for a Bjerksund-Stensland 2002 model support the following tasks.
Task | Function |
---|---|
Price American options with continuous dividend yield using the Bjerksund-Stensland 2002 option pricing model. | |
Calculate American options prices and sensitivities using the Bjerksund-Stensland 2002 option pricing model. | |
Calculate implied volatility for American options using the Bjerksund-Stensland 2002 option pricing model. |
For an example using the Bjerksund-Stensland 2002 model, see Pricing Using the Bjerksund-Stensland Model.
Barone-Adesi-Whaley Model
The Barone-Adesi-Whaley model is used for pricing American vanilla options. Closed-form solutions for a Barone-Adesi-Whaley model support the following tasks.
Task | Function |
---|---|
Calculate the prices of an American call and put options using the Barone-Adesi-Whaley approximation model. | |
Calculate the prices and sensitivities of an American call and put options using the Barone-Adesi-Whaley approximation model. | |
Calculate the implied volatility for American options using the Barone-Adesi-Whaley model. |
For an example using the Barone-Adesi-Whaley model, see Compute American Option Prices Using the Barone-Adesi and Whaley Option Pricing Model.
Pricing Using the Black-Scholes Model
Consider a European stock option with an exercise price of $40 on January 1, 2008 that expires on July 1, 2008. Assume that the underlying stock pays dividends of $0.50 on March 1 and June 1. The stock is trading at $40 and has a volatility of 30% per annum. The risk-free rate is 4% per annum. Using this data, calculate the price of a call and a put option on the stock using the Black-Scholes option pricing model:
Strike = 40; AssetPrice = 40; Sigma = .3; Rates = 0.04; Settle = 'Jan-01-08'; Maturity = 'Jul-01-08'; Div1 = 'March-01-2008'; Div2 = 'Jun-01-2008';
Create RateSpec
and StockSpec
:
RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, 'EndDates',... Maturity, 'Rates', Rates, 'Compounding', -1); StockSpec = stockspec(Sigma, AssetPrice, {'cash'}, 0.50,{Div1,Div2});
Define two options, one call and one put:
OptSpec = {'call'; 'put'};
Calculate the price of the European options:
Price = optstockbybls(RateSpec, StockSpec, Settle, Maturity, OptSpec, Strike)
Price = 3.2063 3.4027
The first element of the Price
vector represents
the price of the call ($3.21); the second is the price of the put
($3.40). Use the function optstocksensbybls
to
compute six sensitivities for the Black-Scholes model: delta
, gamma
, vega
, lambda
, rho
,
and theta
and the price
of the
option.
The selection of output parameters and their order is determined
by the optional input parameter OutSpec
. This parameter
is a cell array of character vectors, each one specifying a desired
output parameter. The order in which these output parameters are returned
by the function is the same as the order of the character vectors
contained in OutSpec
.
As an example, consider the same options as the previous example.
To calculate their Delta
, Rho
, Price
,
and Gamma
, build the cell array OutSpec
as
follows:
OutSpec = {'delta', 'rho', 'price', 'gamma'}; [Delta, Rho, Price, Gamma] = optstocksensbybls(RateSpec, StockSpec, Settle,... Maturity, OptSpec, Strike, 'OutSpec', OutSpec)
Delta = 0.5328 -0.4672 Rho = 8.7902 -10.8138 Price = 3.2063 3.4027 Gamma = 0.0480 0.0480
Pricing Using the Black Model
Consider two European call options on a futures contract with exercise prices of $20 and $25 that expire on September 1, 2008. Assume that on May 1, 2008 the contract is trading at $20 and has a volatility of 35% per annum. The risk-free rate is 4% per annum. Using this data, calculate the price of the call futures options using the Black model:
Strike = [20; 25]; AssetPrice = 20; Sigma = .35; Rates = 0.04; Settle = 'May-01-08'; Maturity = 'Sep-01-08';
Create RateSpec
and StockSpec
:
RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle,... 'EndDates', Maturity, 'Rates', Rates, 'Compounding', -1); StockSpec = stockspec(Sigma, AssetPrice);
Define the call option:
OptSpec = {'call'};
Calculate price and all sensitivities of the European futures options:
OutSpec = {'All'} [Delta, Gamma, Vega, Lambda, Rho, Theta, Price] = optstocksensbyblk(RateSpec,... StockSpec, Settle, Maturity, OptSpec, Strike, 'OutSpec', OutSpec);
Price = 1.5903 0.3037
The first element of the Price
vector represents
the price of the call with an exercise price of $20 ($1.59); the second
is the price of the call with an exercise price of $25 ($2.89).
The function impvbyblk
is
used to compute the implied volatility using the Black option pricing
model. Assuming that the previous European call futures are trading
at $1.5903 and $0.3037, you can calculate their implied volatility:
Volatility = impvbyblk(RateSpec, StockSpec, Settle, Maturity,... OptSpec, Strike, Price);
As expected, you get volatilities of 35%. If the call futures were trading at $1.50 and $0.50 in the market, the implied volatility would be 33% and 42%:
Volatility = impvbyblk(RateSpec, StockSpec, Settle, Maturity,...
OptSpec, Strike, [1.50;0.5])
Volatility = 0.3301 0.4148
Pricing Using the Roll-Geske-Whaley Model
Consider two American call options, with exercise prices of $110 and $100 on June 1, 2008, that expire on June 1, 2009. Assume that the underlying stock pays dividends of $0.001 on December 1, 2008. The stock is trading at $80 and has a volatility of 20% per annum. The risk-free rate is 6% per annum. Using this data, calculate the price of the American calls using the Roll-Geske-Whaley option pricing model:
AssetPrice = 80; Settle = 'Jun-01-2008'; Maturity = 'Jun-01-2009'; Strike = [110; 100]; Rate = 0.06; Sigma = 0.2; DivAmount = 0.001; DivDate = 'Dec-01-2008';
Create RateSpec
and StockSpec
:
StockSpec = stockspec(Sigma, AssetPrice, {'cash'}, DivAmount, DivDate); RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle,... 'EndDates', Maturity, 'Rates', Rate, 'Compounding', -1);
Calculate the call prices:
Price = optstockbyrgw(RateSpec, StockSpec, Settle, Maturity, Strike)
Price = 0.8398 2.0236
The first element of the Price
vector represents
the price of the call with an exercise price of $110 ($0.84); the
second is the price of the call with an exercise price of $100 ($2.02).
Pricing Using the Bjerksund-Stensland Model
Consider four American stock options (two calls and two puts) with an exercise price of $100 that expire on July 1, 2008. Assume that the underlying stock pays a continuous dividend yield of 4% as of January 1, 2008. The stock has a volatility of 20% per annum and the risk-free rate is 8% per annum. Using this data, calculate the price of the American calls and puts assuming the following current prices of the stock: $80, $90 (for the calls) and $100 and $110 (for the puts):
Settle = 'Jan-1-2008'; Maturity = 'Jul-1-2008'; Strike = 100; AssetPrice = [80; 90; 100; 110]; DivYield = 0.04; Rate = 0.08; Sigma = 0.20;
Create RateSpec
and StockSpec
:
StockSpec = stockspec(Sigma, AssetPrice, {'continuous'}, DivYield); RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle,... 'EndDates', Maturity, 'Rates', Rate, 'Compounding', -1);
Define the option type:
OptSpec = {'call'; 'call'; 'put'; 'put'};
Compute the option prices:
Price = optstockbybjs(RateSpec, StockSpec, Settle, Maturity, OptSpec, Strike)
Price = 0.4144 2.1804 4.7253 1.7164
The first two elements of the Price
vector
represent the price of the calls ($0.41 and $2.18), the last two elements
represent the price of the put options ($4.72 and $1.72). Use the
function optstocksensbybjs
to
compute six sensitivities for the Bjerksund-Stensland model: delta
, gamma
, vega
, lambda
, rho
,
and theta
and the price
of the
option. The selection of output parameters and their order is determined
by the optional input parameter OutSpec
. This parameter
is a cell array of character vectors, each one specifying a desired
output parameter. The order in which these output parameters are returned
by the function is the same as the order of the character vectors
contained in OutSpec
. As an example, consider
the same options as the previous example. To calculate their delta
, gamma
,
and price
, build the cell array OutSpec
as
follows:
OutSpec = {'delta', 'gamma', 'price'};
The outputs of optstocksensbybjs
are in the same order as in
OutSpec
.
[Delta, Gamma, Price] = optstocksensbybjs(RateSpec, StockSpec, Settle,... Maturity, OptSpec, Strike, 'OutSpec', OutSpec)
Delta = 0.0843 0.2912 0.4803 0.2261 Gamma = 0.0136 0.0267 0.0304 0.0217 Price = 0.4144 2.1804 4.7253 1.7164
For more information on the Bjerksund-Stensland model, see Closed-Form Solutions Modeling.
Compute American Option Prices Using the Barone-Adesi and Whaley Option Pricing Model
Consider an American call option with an exercise price of $120. The option expires on Jan 1, 2018. The stock has a volatility of 14% per annum, and the annualized continuously compounded risk-free rate is 4% per annum as of Jan 1, 2016. Using this data, calculate the price of the American call, assuming the price of the stock is $125 and pays a dividend of 2%.
StartDate = datetime(2016,1,1); EndDate = datetime(2018,1,1); Basis = 1; Compounding = -1; Rates = 0.04;
Define the RateSpec
.
RateSpec = intenvset('ValuationDate',StartDate,'StartDate',StartDate,'EndDate',EndDate, ... 'Rates',Rates,'Basis',Basis,'Compounding',Compounding)
RateSpec = struct with fields:
FinObj: 'RateSpec'
Compounding: -1
Disc: 0.9231
Rates: 0.0400
EndTimes: 2
StartTimes: 0
EndDates: 737061
StartDates: 736330
ValuationDate: 736330
Basis: 1
EndMonthRule: 1
Define the StockSpec
.
Dividend = 0.02;
AssetPrice = 125;
Volatility = 0.14;
StockSpec = stockspec(Volatility,AssetPrice,'Continuous',Dividend)
StockSpec = struct with fields:
FinObj: 'StockSpec'
Sigma: 0.1400
AssetPrice: 125
DividendType: {'continuous'}
DividendAmounts: 0.0200
ExDividendDates: []
Define the American option.
OptSpec = 'call';
Strike = 120;
Settle = datetime(2016,1,1);
Maturity = datetime(2018,1,1);
Compute the price for the American option.
Price = optstockbybaw(RateSpec,StockSpec,Settle,Maturity,OptSpec,Strike)
Price = 14.5180
See Also
assetbybls
| assetsensbybls
| cashbybls
| cashsensbybls
| chooserbybls
| gapbybls
| gapsensbybls
| impvbybls
| optstockbybls
| optstocksensbybls
| supersharebybls
| supersharesensbybls
| impvbyblk
| optstockbyblk
| optstocksensbyblk
| impvbyrgw
| optstockbyrgw
| optstocksensbyrgw
| impvbybjs
| optstockbybjs
| optstocksensbybjs
| spreadbybjs
| spreadsensbybjs
| basketbyju
| basketsensbyju
| basketstockspec
| maxassetbystulz
| maxassetsensbystulz
| minassetbystulz
| minassetsensbystulz
| spreadbykirk
| spreadsensbykirk
| asianbykv
| asiansensbykv
| asianbylevy
| asiansensbylevy
| lookbackbycvgsg
| lookbacksensbycvgsg
| basketbyls
| basketsensbyls
| basketstockspec
| asianbyls
| asiansensbyls
| lookbackbyls
| lookbacksensbyls
| spreadbyls
| spreadsensbyls
| optstockbyls
| optstocksensbyls
| optpricebysim
| optstockbybaw
| optstocksensbybaw
Related Examples
- Pricing European Call Options Using Different Equity Models
- Compute the Option Price on a Future
- Pricing European Call Options Using Different Equity Models
- Pricing Asian Options