# blsimpv

Black-Scholes implied volatility

## Syntax

``Volatility = blsimpv(Price,Strike,Rate,Time,Value)``
``Volatility = blsimpv(___,Name,Value)``

## Description

example

````Volatility = blsimpv(Price,Strike,Rate,Time,Value)` using a Black-Scholes model computes the implied volatility of an underlying asset from the market value of European options. If the `Class` name-value argument is empty or unspecified, the default is a call option NoteThe input arguments `Price`, `Strike`, `Rate`, `Time`, `Value`, `Yield`, and `Class` can be scalars, vectors, or matrices. If scalars, then that value is used to compute the implied volatility from all options. If more than one of these inputs is a vector or matrix, then the dimensions of all non-scalar inputs must be the same.Also, ensure that `Rate`, `Time`, and `Yield` are expressed in consistent units of time. ```

example

````Volatility = blsimpv(___,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 for a European call option trading at \$10 with an exercise price of \$95 and three months until expiration. Assume that the underlying stock pays no dividend and trades at \$100. The risk-free rate is 7.5% per annum. Furthermore, assume that you are interested in implied volatilities no greater than 0.5 (50% per annum). Under these conditions, the following statements all compute an implied volatility of 0.3130, or 31.30% per annum.

```Volatility = blsimpv(100, 95, 0.075, 0.25, 10, 'Limit', 0.5); Volatility = blsimpv(100, 95, 0.075, 0.25, 10, 'Limit',0.5,'Yield',0,'Class', {'Call'}); Volatility = blsimpv(100, 95, 0.075, 0.25, 10, 'Limit',0.5,'Yield',0, 'Class', true); Volatility = blsimpv(100, 95, 0.075, 0.25, 10, 'Limit',0.5,'Yield',0, 'Class', true,'Method','jackel2016')```
```Volatility = 0.3130 ```

## Input Arguments

collapse all

Current price of the underlying asset, specified as a scalar numeric.

Data Types: `double`

Exercise price of the option, specified as a scalar numeric.

Data Types: `double`

Annualized continuously compounded risk-free rate of return over the life of the option, specified as a scalar positive decimal.

Data Types: `double`

Time to expiration of the option, specified as the number of years using a scalar numeric.

Data Types: `double`

Price of a European option from which the implied volatility of the underlying asset is derived, specified as a scalar numeric.

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 = blsimpv(Yield,CouponRate,Settle,Maturity,'Method','jackel2016')```

Upper bound of the implied volatility search interval, specified as the comma-separated pair consisting of `'Limit'` and a positive scalar numeric. If `Limit` is empty or unspecified, the default is `10`, or 1000% per annum.

Note

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

Data Types: `double`

Annualized continuously compounded yield of the underlying asset over the life of the option,specified as the comma-separated pair consisting of `'Yield'` and a decimal number. If `Yield` is empty or missing, the default value is `0`.

For example, for options written on stock indices, `Yield` could represent the dividend yield. For currency options, `Yield` could be the foreign risk-free interest rate.

Note

`blsimpv` can handle other types of underlies like Futures and Currencies. When pricing Futures (Black model), enter the input argument `Yield` as:

`Yield = Rate`
When pricing currencies (Garman-Kohlhagen model), enter the input argument `Yield` as:
`Yield = ForeignRate`
where `ForeignRate` is the continuously compounded, annualized risk-free interest rate in the foreign country.

Data Types: `double`

Implied volatility termination tolerance, specified as the comma-separated pair consisting of `'Tolerance'` and a positive scalar numeric. If empty or missing, the default is `1e6`.

Note

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

Data Types: `double`

Option class indicating option type (call or put) from which implied volatility is derived, specified as the comma-separated pair consisting of `'Class'` and a logical indicator, cell array of character vectors, or string array.

To specify call options, set `Class` = `true` or `Class` = `{'call'}`. To specify put options, set `Class` = `false` or `Class` = `{'put'}` or `Class` = `["put"]`. If `Class` is empty or unspecified, the default is a call option.

Data Types: `logical` | `cell` | `string`

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

Implied volatility of the underlying asset derived from European option prices, returned as a decimal. If no solution is found, `blsimpv` returns `NaN`.

 Hull, John C. Options, Futures, and Other Derivatives. 5th edition, Prentice Hall, 2003.

 Jäckel, Peter. "Let's Be Rational." Wilmott Magazine., January, 2015 (https://onlinelibrary.wiley.com/doi/abs/10.1002/wilm.10395).

 Luenberger, David G. Investment Science. Oxford University Press, 1998.