6.2 The Implied Volatility Surface


6.2.1 Calculating the Implied Volatility

The BS formula for the price $ C_t$ of a European call at time $ t$ is given by

$\displaystyle C_t$ $\displaystyle =$ $\displaystyle S_t\Phi(d_1)-Ke^{-r\tau}\Phi(d_2),$ (6.1)
$\displaystyle d_1$ $\displaystyle =$ $\displaystyle \frac{\ln(S_t/K)+(r+\frac{1}{2}\sigma^2)\tau}{\sigma\sqrt{\tau}},$ (6.2)
$\displaystyle d_2$ $\displaystyle =$ $\displaystyle d_1-\sigma\sqrt{\tau},$ (6.3)

where $ \Phi$ denotes the cumulative distribution function of a standard normal random variable. $ r$ denotes the risk-free interest rate, $ S$ the price of the underlying, $ \tau=T-t$ the time to maturity and $ K$ the strike price. For ATM options the equality $ K=S_t$ holds.

The only parameter in the Black and Scholes formula that cannot be observed directly is the actual volatility of the underlying price process. However, we may study the volatility which is implied by option prices observed in the markets, the so called implied volatility: implied volatility is defined as the parameter $ \hat{\sigma}$ that yields the actually observed market price of a particular option when substituted into the BS formula. The implied volatility of a European put with the same strike and maturity can be deduced from the "put-call parity"

$\displaystyle C_t-P_t=S_t-Ke^{-r\tau}.$

XploRe offers a fast and convenient numerical way to invert the BS formula in order to recover $ \hat{\sigma}$ from the market prices of $ C_t$ or $ P_t$.



As numerical procedures both a bisectional method and a Newton-Raphson algorithm are available. They are selected by the option IVmethod, which can either be the bisection method IVmethod="bisect" or the default Newton-Raphson. Within arbitrage bounds on the other input parameters there exists a unique solution, since the BS formula is globally concave in $ \sigma$. The input vector x contains the data in an $ n\times6$ dimensional matrix, where the first column contains the underlying asset prices $ S$, the second the strikes $ K$, the third the interest rates $ r$ [on a yearly basis], the fourth maturities $ \tau$ [in scale of years], the fifth the observed option prices $ C_t$ and $ P_t$. The sixth column contains the type of the option, where 0 abbreviates a put and $ 1$ a call. For example, the command 12588 ImplVola (100~120~0.05~0.5~1.94~1) yields the implied volatility of a European call at strike $ K=120$ with maturity $ \tau$ of half a year, where the interest rate is assumed to be $ r=5\%$, the price of the underlying asset $ S=100$ and the option price $ C_t=1.94$: the result is $ \hat{\sigma}=24.94\%$. One may verify this result by using XploRe :



which calculates European option prices according to the Black and Scholes model, when no dividend is assumed. The first 5 input parameters follow the notation in this paper, and task specifies whether one desires to know a call price, task=1, or a put price, task=0. Indeed, for $ \sigma=24.94\%$ we reproduce the assumed option call price of $ C_t=1.94$.

12596 XFGiv00.xpl

Now we present a more complex example using option data from the German and Swiss Futures Exchange (EUREX). The data set volsurfdata2 contains the full set of option prices (settlement prices) as observed on January 4th, 1999. The first column contains the settlement price $ S$ of the DAX, the second the strike price $ K$ of the option, the third the interest rate $ r$, the fourth time to maturity $ \tau$, the fifth the option prices $ C_t$ or $ P_t$ and the last column finally the type of option, either 0, i.e. a put, or 1, i.e. a call. Hence the data set is already in the form as required by the quantlet 12603 ImplVola . We may therefore use the following code to calculate the implied volatilities:

library ("finance")
x=read("volsurfdata2.dat")      ; read the data
x=paf(x,x[,4]>0.14&&x[,4]<0.22) ; select 2 months maturity
y=ImplVola(x,"bisect")          ; calculate ImplVola
sort(x[,2]~y)                   ; sort data according to strikes

Figure 6.1: Implied volatility "smile" as observed on January 4th, 1999
\includegraphics[width=1.3\defpicwidth]{XFGiv01_fig.ps}

In Figure 6.1 we display the output for the strike dimension. The deviation from the BS model is clearly visible: implied volatilities form a convex "smile" in strikes. One finds a curved shape also across different maturities. In combination with the strike dimension this yields a surface with pronounced curvature (Figure 6.2). The discontinuity of the ATM position is related to tax effects exerting different influences on puts and calls, Hafner and Wallmeier (2001). In our case this effect is not so important, since we smooth the observations and calculate the returns of the implied volatility time series before applying the PCA.


6.2.2 Surface smoothing

Calculation of implied volatilities at different strikes and maturities yields a surface. The quantlet 12872 volsurf estimates the implied volatility surface on a specified grid using a bi-dimensional kernel smoothing procedure. A Nadaraya-Watson estimator with a quartic kernel is employed, Aït-Sahalia, and Lo (1998), Aït-Sahalia and Lo (2000), Härdle (1990), Härdle, Müller, Sperlich, and Werwatz (2002).

More technically, given a partition of explanatory variables $ (x_{1},x_{2})=\left(K,\tau
\right)$, i.e. of strikes and maturities, the two-dimensional Nadaraya-Watson kernel estimator is

$\displaystyle \hat{\sigma }(x_1,x_2)=\frac{\sum_{i=1}^{n}K_{1}(\frac{x_{1}-x_{1...
..._{i=1}^{n}K_{1}( \frac{x_{1}-x_{1i}}{h_{1}})K_{2}(\frac{x_{2}-x_{2i}}{h_{2}})},$ (6.4)

where $ \hat{\sigma} _{i}$ is the volatility implied by the observed option prices $ C_{ti}$ or $ P_{ti}$. $ K_{1}$ and $ K_{2}$ are univariate kernel functions, and $ h_{1}$ and $ h_{2}$ are bandwidths. The order 2 quartic kernel is given by

$\displaystyle K_i(u)=\frac{15}{16}\left( 1-u^2\right)^2 \boldsymbol{1}(\vert u\vert\leq1).$    



The basic structure of 12876 volsurf is given by



As input parameters we first have the $ n\times6$ matrix x which has been explained in section 6.2.1. The remaining parameters concern the surface: stepwidth is a $ 2\times1$ vector determining the stepwidth in the grid of the surface; the first entry relates to the strike dimension, the second to the dimension across time to maturity. firstXF, lastXF, firstMat, lastMat are scalar constants giving the lowest limit and the highest limit in the strike dimension, and the lowest and the highest limit of time to maturity in the volatility surface. The option metric gives the choice whether to compute the surface in a moneyness or in a strike metric. Setting metric = 0 will generate a surface computed in a moneyness metric $ K/F$, i.e. strike divided by the (implied) forward price of the underlying, where the forward price is computed by $ F_t=S_te^{r\tau}$. If metric = 1, the surface is computed in the original strike dimension in terms of $ K$. bandwidth is a $ 2\times1$ vector determining the width of the bins for the kernel estimator. p determines whether for computation a simple Nadaraya-Watson estimator, p = 0, or a local polynomial regression, p $ \neq$ 0, is used. The last and optional parameter IVmethod has the same meaning as in the 12879 ImplVola quantlet. It tells XploRe which method to use for calculating the implied volatilities, default again is Newton-Raphson.

The output are two variables. IVsurf is an $ N\times 3$ matrix containing the coordinates of the points computed for the implied volatility surface, where the first column contains the values of the strike dimension, the second those of time to maturity, the third estimated implied volatilities. $ N$ is the number of grid points. IVpoints is a $ M\times 3$ matrix containing the coordinates of the $ M$ options used to estimate the surface. As before, the first column contains the values for the strike dimension, the second the maturity, the third the implied volatilities.

Before presenting an example we briefly introduce a graphical tool for displaying the volatility surface. The following quantlet plots the implied surface:



As input parameters we have the output of 12886 volsurf , i.e. the volatility surface IVsurf, and the original observations IVpoints. An optional parameter AdjustToSurface determines whether the surface plot is shown based on the surface data given in IVsurf, or on the basis of the original observations IVpoints. This option might be useful in a situation where one has estimated a smaller part of the surface than would be possible given the data. By default, or AdjustToSurface$ =1$, the graph is adjusted according to the estimated surface.

12890 XFGiv02.xpl

12895 XFGiv02.xpl computes an implied volatility surface with the Nadaraya-Watson estimator and displays it (Figure 6.2). The parameters are determined in order to suit the example best, then 12898 volsurfplot is used to create the graphic. The output matrix IVsurf contains now all surface values on a grid at the given stepwidth. Doing this for a sequential number of dates produces a time series $ \{\hat{\sigma}_t\}$ of implied volatility surfaces. Empirical evidence shows that this surface changes its shape and characteristics as time goes on. This is what we analyze in the subsequent sections.

Figure 6.2: Implied volatility surface as observed on January 4th, 1999
\includegraphics[width=1.3\defpicwidth]{figvsurface.ps}