# impvbybls

Determine implied volatility using Black-Scholes option pricing model

## Syntax

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

## Description

example

````Volatility = impvbybls(RateSpec,StockSpec,Settle,Maturity,OptSpec,Strike,OptPrice)` computes implied volatility using the Black-Scholes option pricing model.```

example

````Volatility = impvbybls(___,Name,Value)` specifies options using one or more name-value pair arguments in addition to the input arguments in the previous syntax.```

## Examples

collapse all

This example shows how to compute the implied volatility using the Black-Scholes option pricing model. Consider a European call and put options with an exercise price of \$40 that expires on June 1, 2008. The underlying stock is trading at \$45 on January 1, 2008 and the risk-free rate is 5% per annum. The option price is \$7.10 for the call and \$2.85 for the put. Using this data, calculate the implied volatility of the European call and put using the Black-Scholes option pricing model.

```AssetPrice = 45; Settlement = 'Jan-01-2008'; Maturity = 'June-01-2008'; Strike = 40; Rates = 0.05; OptionPrice = [7.10; 2.85]; OptSpec = {'call';'put'}; % define the RateSpec and StockSpec RateSpec = intenvset('ValuationDate', Settlement, 'StartDates', Settlement,... 'EndDates', Maturity, 'Rates', Rates, 'Compounding', -1, 'Basis', 1); StockSpec = stockspec(NaN, AssetPrice); ImpvVol = impvbybls(RateSpec, StockSpec, Settlement, Maturity, OptSpec,... Strike, OptionPrice,'Method','jackel2016')```
```ImpvVol = 2×1 0.3175 0.4878 ```

The implied volatility is 31.75% for the call and 48.78% for the put.

## 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, `impvbybls` 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, `impvbybls` 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 prices. Each row is the schedule for one option.

Data Types: `double`

European 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 = impvbybls(RateSpec,StockSpec,Settle,Maturity,OptSpec,Strike,OptPrice,'Limit',5,'Tolerance',1e-5)`

Upper bound of implied volatility search interval, specified as the comma-separated pair consisting of `'Limit'` and a positive scalar.

Note

If you are using `Method` with a value of `'jackel2016'`, the `Limit` argument is ignored.

Data Types: `double`

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

Note

If you are using `Method` with a value of `'jackel2016'`, the `Tolerance` argument is ignored.

Data Types: `double`

Method for computing implied volatility, specified as the comma-separated pair consisting of `'Method'` and a character vector with a value of `'search'` or `'jackel2016'` or a string with a value of `"search"` or `"jackel2016"`.

Data Types: `char` | `string`

## 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] Jäckel, Peter. "Let's Be Rational." Wilmott Magazine., January, 2015 (https://onlinelibrary.wiley.com/doi/abs/10.1002/wilm.10395).

## Version History

Introduced in R2008b

expand all