Main Content

blsimpv

Black-Scholes implied volatility

Description

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

Note

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

example

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.

References

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

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

[3] Luenberger, David G. Investment Science. Oxford University Press, 1998.

Version History

Introduced before R2006a