Documentation |
On this page… |
---|
Bjerksund-Stensland 2002 Model Pricing Using the Black-Scholes Model |
Financial Instruments Toolbox™ software 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
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:
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.
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.
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.
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.
Consider a European stock option with an exercise price of $40 on January 1, 2008 that expires on July 1, 2008. Assume 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 strings, 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 strings 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
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
Consider two American call options, with exercise prices of $110 and $100 on June 1, 2008, that expire on June 1, 2009. Assume 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).
Consider four American stock options (two calls and two puts) with an exercise price of $100 that expire on July 1, 2008. Assume 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 strings, 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 strings 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 will be 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.