Steven R. Dunbar
Department of Mathematics
203 Avery Hall
Lincoln, NE 68588-0130
http://www.math.unl.edu
Voice: 402-472-3731
Fax: 402-472-8466

Stochastic Processes and

__________________________________________________________________________

Implied Volatility

_______________________________________________________________________

Note: These pages are prepared with MathJax. MathJax is an open source JavaScript display engine for mathematics that works in all browsers. See http://mathjax.org for details on supported browsers, accessibility, copy-and-paste, and other features.

_______________________________________________________________________________________________

### Rating

Mathematically Mature: may contain mathematics beyond calculus with proofs.

_______________________________________________________________________________________________

### Section Starter Question

What are some methods you could use to ﬁnd the solution of $f\left(x\right)=c$ for $x$ where $f$ is a function that is so complicated that you cannot use elementary functions and algebraic operations to isolate $x$ ?

_______________________________________________________________________________________________

### Key Concepts

1. We estimate historical volatility by applying the standard deviation estimator from statistics to the observations $ln\left({S}_{i}∕{S}_{i-1}\right)$.
2. We deduce implied volatility by numerically solving the Black-Scholes formula for $\sigma$.

__________________________________________________________________________

### Vocabulary

1. Historical volatility of a security is the variance of the changes in the logarithm of the price of the underlying asset, obtained from past data.
2. Implied volatility of a security is the numerical value of the volatility parameter that makes the market price of an option equal to the value from the Black-Scholes formula.

__________________________________________________________________________

### Mathematical Ideas

#### Historical volatility

Estimates of historical volatility of security prices use statistical estimators, usually one of the estimators of variance. A main problem for historical volatility is to select the sample size, or window of observations, used to estimate ${\sigma }^{2}$. Diﬀerent time-windows usually give diﬀerent volatility estimates. Furthermore, for some customized “over the counter” derivatives the necessary price data may not exist.

Another problem with historical volatility is that it assumes future market performance is the same as past market data. Although this is a natural scientiﬁc assumption, it does not take into account historical anomalies such as the October 1987 stock market drop that may be unusual. That is, computing historical volatility has the usual statistical diﬃculty of how to handle outliers. The assumption that future market performance is the same as past performance also does not take into account underlying changes in the market such as new economic conditions.

To estimate the volatility of a security price empirically observe the security price at regular intervals, such as every day, every week, or every month. Deﬁne:

• the number of observations $n+1$;
• the security price at the end of the $i$th interval ${S}_{i}$, $i=0,1,2,3,\dots ,n$;
• the length of each of the time intervals (say in years) item $\tau$; and
• the increment of the logarithms of the security prices
${u}_{i}=ln\left({S}_{i}\right)-ln\left({S}_{i-1}\right)=ln\left(\frac{{S}_{i}}{{S}_{i-1}}\right)$

for $i=1,2,3,\dots$.

We are modeling the security price as a Geometric Brownian Motion, so that $ln\left({S}_{i}\right)-ln\left({S}_{i-1}\right)\sim N\left(r\tau ,{\sigma }^{2}\tau \right)$.

Inverting ${u}_{i}=ln\left({S}_{i}∕{S}_{i-1}\right)$ to obtain ${S}_{i}={S}_{i-1}{e}^{{u}_{i}}$, we see that ${u}_{i}$ is the continuously compounded return (not annualized) in the $i$th interval. Then the usual estimate $s$ of the standard deviation of the ${u}_{i}$s is

$s=\sqrt{\frac{1}{n-1}\sum _{i=1}^{n}{\left({u}_{i}-ū\right)}^{2}}$

where $ū$ is the mean of the ${u}_{i}$’s. Sometimes it is more convenient to use the equivalent formula

$s=\sqrt{\frac{1}{n-1}\sum _{i=1}^{n}{u}_{i}^{2}-\frac{1}{n\left(n-1\right)}{\left(\sum _{i=1}^{n}{u}_{i}\right)}^{2}}.$

We assume the security price varies as a Geometric Brownian Motion. That means that the logarithm of the security price is a Wiener process with some drift and on the period of time $\tau$, would have a variance ${\sigma }^{2}\tau$. Therefore, $s$ is an estimate of $\sigma \sqrt{\tau }$. It follows that $\sigma$ can be estimated as

$\sigma \approx \frac{s}{\sqrt{\tau }}.$

Choosing an appropriate value for $n$ is not obvious. Remember the variance expression for Geometric Brownian Motion is an increasing function of time. If we model security prices with Geometric Brownian Motion, then $\sigma$ does change over time, and data that are too old may not be relevant for the present or the future. A compromise that seems to work reasonably well is to use closing prices from daily data over the most recent $90$ to $180$ days. Empirical research indicates that only trading days should be used, so days when the exchange is closed should be ignored for the purposes of the volatility calculation [2, page 215].

Economists and ﬁnancial analysts often estimate historical volatility with more sophisticated statistical time series methods.

#### Implied Volatility

The implied volatility is the parameter $\sigma$ in the Black-Scholes formula that would give the option price that is observed in the market, all other parameters being known.

The Black-Scholes formula is too complicated to “invert” to explicitly express $\sigma$ as a function of the other parameters. Therefore, we use numerical techniques to implicitly solve for $\sigma$. A simple idea is to use the method of bisection search to ﬁnd $\sigma$.

Example.

Suppose the value $C$ of a call on a non-dividend-paying security is $1.85$ when $S=21$, $K=20$, $r=0.10$, and $T-t=0.25$ and $\sigma$ is unknown. We start by arbitrarily guessing $\sigma =0.20$. The Black-Scholes formula gives $C=1.7647$, which is too low. Since $C$ is a increasing function of $\sigma$, this suggests we try a value of $\sigma =0.30$. This gives $C=2.1010$, too high, so we bisect the interval $\left[0.20,0.30\right]$ and try $\sigma =0.25$. This value of $\sigma$ gives a value of $C=1.9268$, still too high. Bisect the interval $\left[0.20,0.25\right]$ and try a value of $\sigma =0.225$, which yields $C=1.8438$, slightly too low. Try $\sigma =0.2375$, giving $C=1.8849$. Finally try $\sigma =0.23125$ giving $C=1.8642$. To $2$ signiﬁcant digits, the signiﬁcance of the data, $\sigma =0.23$, with a predicted value of $C=1.86$.

Another procedure is to use Newton’s method which is also iterative. Essentially we are trying to solve

$f\left(\sigma ,S,K,r,T-t\right)-C=0,$

so from an initial guess ${\sigma }_{0}$, we form the Newton iterates

${\sigma }_{i+1}={\sigma }_{i}-f\left({\sigma }_{i}\right)∕\left(df\left({\sigma }_{i}\right)∕d\sigma \right).$

See Figure 1. Using Newton’s method means one has to diﬀerentiate the Black-Scholes formula with respect to $\sigma$. This derivative is one of the “greeks” known as vega which we will look at more extensively in the next section. A formula for vega for a European call option is

$\frac{df}{d\sigma }=S\sqrt{T-t}{\Phi }^{\prime }\left({d}_{1}\right)exp\left(-r\left(T-t\right)\right).$

A natural way to do the iteration is with a computer program rather than by hand.

Implied volatility is a “forward-looking” estimation technique, in contrast to the “backward-looking” historical volatility. That is, it incorporates the market’s expectations about the prices of securities and their derivatives, or more concisely, market expectations about risk. More sophisticated combinations and weighted averages combining estimates from several diﬀerent derivative claims can be developed.

#### Sources

This section is adapted from: Quantitative modeling of Derivative Securities by Marco Avellaneda, and Peter Laurence, Chapman and Hall, Boca Raton, 2000, page 66; and Options, Futures, and other Derivative Securities second edition, by John C. Hull, Prentice Hall, 1993, pages 229–230.

_______________________________________________________________________________________________

### Algorithms, Scripts, Simulations

#### Algorithm

First deﬁne the function $f={V}_{C}-C$ as a function of $\sigma$ and parameters $S$, $K$, $r$, $T-t$, and $C$. Next deﬁne the derivative of $f$ with respect to $\sigma$. For given numerical values for ${\sigma }_{0}$, the guess for the volatility; $S$, the current security price; $K$, the strike price; $r$, the risk-free interest rate; $T-t$, the time to expiration; and $C$, the current call option price, the script uses Newton’s method to ﬁnd the implied volatility with error tolerance $𝜖$. The implied volatility is the value of $\sigma$ which makes $f\approx 0$ to within $𝜖$. The Newton’s method iteration uses a “repeat–until” loop construction which means that at least one iteration of the loop is computed.

#### Scripts

Geogebra
R
1
2f <- function(sigma, S, K, r, Tminust, C) {
3  d1 <- (log(S/K) + ( (r + sigma^2/2)*(Tminust)))/(sigma*sqrt(Tminust));
4  d2 <- (log(S/K) + ( (r - sigma^2/2)*(Tminust)))/(sigma*sqrt(Tminust));
5  part1 <- pnorm(d1) * S;
6  part2 <- K*exp(-r*(Tminust)) * pnorm(d2);
7  VC <- part1 - part2;
8  f <- VC - C;
9  f
10}
11
12fprime <- function(sigma, S, K, r, Tminust, C) {
13  d1 <- (log(S/K) + ( (r + sigma^2/2)*(Tminust)))/(sigma*sqrt(Tminust));
14  fprime <- S*sqrt(Tminust)*dnorm(d1)*exp(-r*Tminust);
15  fprime
16}
17
18S <- 21;
19K <- 20;
20Tminust <- 0.25;
21r <- 0.10;
22C <- 1.85;
23
24sigmaNew <- 0.20;
25epsilon <- 10^(-5);
26
27repeat {
28  sigmaOld <- sigmaNew;
29  sigmaNew <- sigmaOld - f(sigmaOld, S, K, r, Tminust, C)/fprime(sigmaOld, S, K, r, Tminust);
30  if ( abs( sigmaNew - sigmaOld ) < epsilon ) {
31    break;
32  }
33}
34
35cat(sprintf("%f\n", sigmaNew));
Octave
1# Prevent Octave from thinking that this
2# is a function file:
3
41;
5
6function retval = f(sigma, S, K, r, Tminust, C)
7  d1 = (log(S/K) + ( (r + sigma.^2/2)*(Tminust)))./(sigma*sqrt(Tminust));
8  d2 = (log(S/K) + ( (r - sigma.^2/2)*(Tminust)))./(sigma*sqrt(Tminust));
9  part1 = normcdf(d1) * S;
10  part2 = K*exp(-r*(Tminust)) * normcdf(d2);
11  VC = part1 - part2;
12  retval = VC - C;
13endfunction
14
15function retval = fprime(sigma, S, K, r, Tminust, C)
16  d1 = (log(S/K) + ( (r + sigma^2/2)*(Tminust)))./(sigma*sqrt(Tminust));
17  retval = S*sqrt(Tminust)*normpdf(d1)*exp(-r*Tminust);
18endfunction
19
20S = 21;
21K = 20;
22Tminust = 0.25;
23r = 0.10;
24C = 1.85;
25
26
27sigmaNew = 0.20;
28epsilon = 10^(-5);
29
30do
31  sigmaOld = sigmaNew;
32  sigmaNew = sigmaOld - f(sigmaOld, S, K, r, Tminust, C)/fprime(sigmaOld, S, K, r, Tminust);
33until ( abs( sigmaNew - sigmaOld ) < epsilon )
34
35sigmaNew
Perl
1
2use PDL::NiceSlice;
3use PDL::Constants qw(PI);
4
5sub pnorm {
6    my ( $x,$sigma, $mu ) = @_; 7$sigma = 1 unless defined($sigma); 8$mu    = 0 unless defined($mu); 9 10 return 0.5 * ( 1 + erf( ($x - $mu ) / ( sqrt(2) *$sigma ) ) );
11}
12
13sub dnorm {
14    my ( $x ) = @_; 15 return (1/sqrt(2*PI))*exp(-$x**2/2);
16}
17
18sub f {
19  my ($sigma,$S, $K,$r, $Tminust,$C) = @_;
20  $d1 = (log($S/$K) + ( ($r + $sigma**2/2)*($Tminust)))/($sigma*sqrt($Tminust));
21  $d2 = (log($S/$K) + ( ($r - $sigma**2/2)*($Tminust)))/($sigma*sqrt($Tminust));
22  $part1 = pnorm($d1) * $S; 23$part2 = $K*exp(-$r*($Tminust)) * pnorm($d2);
24  $VC =$part1 - $part2; 25 26 return$VC - $C; 27} 28 29sub fprime{ 30 my ($sigma, $S,$K, $r,$Tminust, $C) = @_; 31$d1 = (log($S/$K) + ( ($r +$sigma**2/2)*($Tminust)))/($sigma*sqrt($Tminust)); 32 33 return$S*sqrt($Tminust)*dnorm($d1)*exp(-$r*$Tminust);
34}
35
36$S = 21; 37$K = 20;
38$Tminust = 0.25; 39$r = 0.10;
40$C = 1.85; 41 42$sigmaNew = 0.10;
43$epsilon = 10**(-5); 44 45do { 46$sigmaOld = $sigmaNew; 47$sigmaNew = $sigmaOld - f($sigmaOld, $S,$K, $r,$Tminust, $C)/fprime($sigmaOld, $S,$K, $r,$Tminust);
48} until ( abs( $sigmaNew -$sigmaOld ) < $epsilon ); 49 50print$sigmaNew, "\n";
SciPy
1
2import scipy
3
4from scipy.stats import norm
5
6def f(sigma, S, K, r, Tminust, C):
7
8    logSoverK = scipy.log(S/K)
9    n12 = ((r + sigma**2/2)*Tminust)
10    n22 = ((r - sigma**2/2)*Tminust)
11    numerd1 = logSoverK + n12
12    numerd2 = logSoverK + n22
13    d1 = numerd1/(sigma*scipy.sqrt(Tminust))
14    d2 = numerd2/(sigma*scipy.sqrt(Tminust))
15    part1 = norm.cdf(d1) * S
16    part2 = K*scipy.exp(-r*(Tminust)) * norm.cdf(d2)
17    VC = part1 - part2
18    return VC - C
19
20def fprime(sigma, S, K, r, Tminust, C):
21
22    logSoverK = scipy.log(S/K)
23    n12 = ((r + sigma**2/2)*Tminust)
24    numerd1 = logSoverK + n12
25    d1 = numerd1/(sigma*scipy.sqrt(Tminust))
26    return S*scipy.sqrt(Tminust)*norm.pdf(d1)*scipy.exp(-r*Tminust)
27
28S = 21.
29K = 20.
30Tminust = 0.25
31r = 0.10
32C = 1.85
33
34sigmaNew = 0.20
35epsilon = 10.**(-5)
36
37while( True ):
38    sigmaOld = sigmaNew
39    sigmaNew = sigmaOld - f(sigmaOld, S, K, r, Tminust, C)/fprime(sigmaOld, S, K, r, Tminust, C)
40    if ( scipy.absolute( sigmaNew - sigmaOld ) < epsilon ):
41        break
42
43print sigmaNew

__________________________________________________________________________

### Problems to Work for Understanding

1. Suppose that the observations on a security price (in dollars) at the end of each of 15 consecutive weeks are as follows: 30.25, 32, 31.125, 30.25, 30.375, 30.625, 33, 32.875, 33, 33.5, 33.5 33.75, 33.5, 33.25. Estimate the security price volatility.
2. Pick a publicly traded security, obtain a record of the last 90 days of that security’s prices, and compute the historical volatility of the security.
3. A call option on a non-dividend paying security has a market price of $2.50. The security price is$15, the exercise price is $13, the time to maturity is 3 months, and the risk-free interest rate is 5% per year. Using repeated bisection, what is the implied volatility? 4. For a particular scripting language of your choice, create a script within that language that will compute implied volatility by repeated bisection. 5. A call option on a non-dividend paying security has a market price of$2.50. The security price is $15, the exercise price is$13, the time to maturity is 3 months, and the risk-free interest rate is 5% per year. Using Newton’s method, what is the implied volatility?
6. Sources of ﬁnancial data on options typically provide information on the current security price on a quote date, a variety of strike prices, the current quote date and the expiration date, the option price and the implied volatility. (Some even provide additional data on the values of the greeks.) However, the risk-free interest rate is not provided. For a particular scripting language of your choice, create a script within that language that will compute the risk-free interest rate by repeated bisection. Compare that computed rate to historical interest rate on U.S. Treasury bonds. For example, on October 1, 2010, a call option on Google stock valued at $525.62 with a strike price of$620 on the expiration date of January 22, 2011 had a price of \$4.75 and an implied volatility of $0.2529$. What was the risk-free interest rate on that date? What was the interest rate on U.S. Treasury bonds on that date?

__________________________________________________________________________

### References

[1]   Marco Allavenada and Peter Laurence. Quantitative Modeling of Derivative Securities. Chapman and Hall, 2000. HG 6024 A3A93 2000.

[2]   John C. Hull. Options, Futures, and other Derivative Securities. Prentice-Hall, second edition, 1993. economics, ﬁnance, HG 6024 A3H85.

__________________________________________________________________________

1. Peter Hoadley, Options Strategy Analysis Tools. has a Historic Volatility Calculator that calculates and graphs historic volatility using historical price data retrieved from Yahoo.com. Submitted by Bashar Al-Salim, Dec. 2, 2003.
2. Analysis of asset allocation. A calculator to compute implied volatility using Black and Scholes. Submitted by Bashar Al-Salim, Dec. 2, 2003.
3. MindXpansion,a Tool for Option Traders. This option calculator packages an enormous amount of functionality onto one screen, calculating implied volatility or historical volatility with Midas Touch. Submitted by Chun Fan, Dec. 3, 2003.

__________________________________________________________________________

I check all the information on each page for correctness and typographical errors. Nevertheless, some errors may occur and I would be grateful if you would alert me to such errors. I make every reasonable eﬀort to present current and accurate information for public use, however I do not guarantee the accuracy or timeliness of information on this website. Your use of the information from this website is strictly voluntary and at your risk.

I have checked the links to external sites for usefulness. Links to external websites are provided as a convenience. I do not endorse, control, monitor, or guarantee the information contained in any external website. I don’t guarantee that the links are active at all times. Use the links here with the same caution as you would all information on the Internet. This website reﬂects the thoughts, interests and opinions of its author. They do not explicitly represent oﬃcial positions or policies of my employer.

Information on this website is subject to change without notice.