impvbybjs

Determine implied volatility using Bjerksund-Stensland 2002 option pricing model

Syntax

``Volatility = impvbybjs(RateSpec,StockSpec,Settle,Maturity,OptSpec,Strike,OptPrice)``
``Volatility = impvbybjs(___,Name,Value)``

Description

example

````Volatility = impvbybjs(RateSpec,StockSpec,Settle,Maturity,OptSpec,Strike,OptPrice)` computes implied volatility using the Bjerksund-Stensland 2002 pricing model. Note`impvbybjs` computes implied volatility of American options with continuous dividend yield using the Bjerksund-Stensland option pricing model. ```

example

````Volatility = impvbybjs(___,Name,Value)` adds optional name-value pair arguments.```

Examples

collapse all

This example shows how to compute implied volatility using the Bjerksund-Stensland 2002 option pricing model. Consider three American call options with exercise prices of \$100 that expire on July 1, 2008. The underlying stock is trading at \$100 on January 1, 2008 and pays a continuous dividend yield of 10%. The annualized continuously compounded risk-free rate is 10% per annum and the option prices are \$4.063, \$6.77 and \$9.46. Using this data, calculate the implied volatility of the stock using the Bjerksund-Stensland 2002 option pricing model.

```AssetPrice = 100; Settle = datetime(2008,1,1); Maturity = datetime(2008,6,1); Strike = 100; DivAmount = 0.1; Rate = 0.1; % define the RateSpec and StockSpec RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle,... 'EndDates', Maturity, 'Rates', Rate, 'Compounding', -1, 'Basis', 1); StockSpec = stockspec(NaN, AssetPrice, {'continuous'}, DivAmount); OptSpec = {'call'}; OptionPrice = [4.063;6.77;9.46]; ImpVol = impvbybjs(RateSpec, StockSpec, Settle, Maturity, OptSpec,... Strike, OptionPrice)```
```ImpVol = 3×1 0.1633 0.2723 0.3810 ```

The implied volatility is 15% for the first call, and 25% and 35% for the second and third call options.

Input Arguments

collapse all

Interest-rate term structure (annualized and continuously compounded), specified by the `RateSpec` obtained from `intenvset`. For information on the interest-rate specification, see `intenvset`.

Data Types: `struct`

Stock specification for the underlying asset. For information on the stock specification, see `stockspec`.

`stockspec` handles several types of underlying assets. For example, for physical commodities the price is `StockSpec.Asset`, the volatility is `StockSpec.Sigma`, and the convenience yield is `StockSpec.DividendAmounts`.

Data Types: `struct`

Settlement date, specified as a `NINST`-by-`1` vector using a datetime array, string array, or date character vectors.

To support existing code, `impvbybjs` also accepts serial date numbers as inputs, but they are not recommended.

Maturity date for the American option, specified as a `NINST`-by-`1` vector using a datetime array, string array, or date character vectors.

To support existing code, `impvbybjs` also accepts serial date numbers as inputs, but they are not recommended.

Definition of the option from which the implied volatility is derived, specified as a `NINST`-by-`1` cell array of character vectors with a value of `'call'` or `'put'`.

Data Types: `char` | `cell`

Option strike price value, specified as a nonnegative scalar or `NINST`-by-`1` vector of strike price values. Each row is the schedule for one option.

Data Types: `double`

American option prices from which the implied volatility of the underlying asset is derived, specified as a nonnegative scalar or `NINST`-by-`1` vector.

Data Types: `double`

Name-Value Arguments

Specify optional pairs of arguments as `Name1=Value1,...,NameN=ValueN`, where `Name` is the argument name and `Value` is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose `Name` in quotes.

Example: ```Volatility = impvbybjs(RateSpec,StockSpec,Settle,Maturity,OptSpec,Strike,OptPrice,'Limit',[0.2 20],'Tolerance',1e-5)```

Lower and upper bound of implied volatility search interval, specified as the comma-separated pair consisting of `'Limit'` and a `1`-by-`2` positive vector.

Data Types: `double`

Implied volatility search termination tolerance, specified as the comma-separated pair consisting of `'Tolerance'` and a positive scalar.

Data Types: `double`

Output Arguments

collapse all

Expected implied volatility values, returned as a `NINST`-by-`1` vector. If no solution can be found, a `NaN` is returned.

References

[1] Bjerksund, P. and G. Stensland. “Closed-Form Approximation of American Options.” Scandinavian Journal of Management. Vol. 9, 1993, Suppl., pp. S88–S99.

[2] Bjerksund, P. and G. Stensland. “Closed Form Valuation of American Options.” Discussion paper, 2002.

Version History

Introduced in R2008b

expand all