Main Content

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

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.

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.

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.

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

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 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).

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.

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 = 'Jan-1-2016'; EndDate = 'jan-1-2018'; 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 = 'Jan-1-2016'; Maturity = 'jan-1-2018';

Compute the price for the American option.

Price = optstockbybaw(RateSpec,StockSpec,Settle,Maturity,OptSpec,Strike)

Price = 14.5180

`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`

- 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