Volatility Surface Interpolation
Volatility Surface Interpolation
May 2004
Abstract
The volatility surface implied by option prices presents a structure that changes over
time. The aim of this study is to present a framework to model the implied volatility
of the FTSE options in real time, and to present a prototype application that
implements this framework. We adapt the parametric models presented in Dumas et
al (1998) to estimate the surfaces across moneyness instead of across strikes. We
discuss how this framework can be used in applications of option pricing and risk
management.
The latest version of this paper and the program can be downloaded from:
http://privatewww.essex.ac.uk/~aalent/
1. Introduction
According to the classic Black-Scholes option pricing model (1973), all option prices
on the same underlying asset with the same expiration date but with different exercise
prices should have the same implied volatility, and therefore, plotted as a surface, it
should be flat. However, this is not what is observed from traded option prices, and it
is well documented that it exhibits a smile across strikes, and term structure across
time to maturity (Cont and Fontseca, 2001). Regardless of the invalid constant
volatility assumption of the Black-Scholes model, in practice, the implied volatility
can be obtained by inverting the Black-Scholes formula given the market price of the
option. As presented by Rebonato (1999), the implied volatility is the ‘wrong number
to plug into the wrong formula to get the right price’. In order to obtain an implied
volatility for any given strike and maturity, it is necessary to interpolate or smooth the
discrete data from the few options actively traded. Derman & Kani (1994), Dupire
(1994) and Rubinstein (1994) have presented models where the volatility of the
underlying asset is a deterministic function of the asset price and time, and have
developed a volatility function that has the potential of fitting the observed cross-
section of option prices. More recent studies have used parametric models to fit the
implied volatilities. Ncube (1996) estimated the FTSE 100 time-varying volatility
using OLS regression on both time to maturity and strike price. The model depended
on strike and the first and second powers of time to maturity. Similarly, Dumas et al
(1998) proposed several volatility functions, as functions of both strike and time to
expiration, for S&P 500 options. In a more recent study, Peňa et al (1999) estimated
the volatility function for the Spanish index IBEX-35 with six alternative structural
forms, but only as a function of moneyness.
This paper is organized as follows: the next section contains a description of the
model, which is based on the adaptation of the parametric models from Dumas et al
(1998) to estimate the surfaces across moneyness instead of across strikes. The data
are described in Section 3. The estimation results of the volatility surfaces and implied
densities are discussed in Section 4. Section 5 presents the application specifications
and some details of our implementation of the mode. In Section 6 we explain how this
model can be used in the areas of option pricing and risk management. We finally
conclude in Section 7 and propose future extensions to our model.
-1-
2. The model
C = S 0e − qT N (d1 ) − Ke − rT N (d 2 )
where S0 is the underlying asset (in our case, the FTSE 100 index), q is the expected
dividends paid over the option’s life, X is the option’s strike price, T is the time to
expiration, r is the risk-free interest rate,
ln(S 0 / K ) + (r − q + σ 2 / 2)T
d1 = d 2 = d1 − σ T
σ T
σ is the volatility rate, and N(d) is the cumulative unit normal density function with
upper integral limit d. The implied Black-Scholes volatility can be found uniquely
from traded option prices because of the monotonicity of the Black-Scholes formula
in the volatility parameter:
∂BS
>0
∂σ
f (σ ) = BS (σ ) − C = 0 .
The Visual Basic implementation of this algorithm can be found in Appendix C. This
algorithm implementation is more efficient than the function in the MatLab Financial
toolbox, since it checks for arbitrage violations before starting the iterations. MatLab
takes especially longer when the option price violates the arbitrage condition, that is,
the price of the call is smaller than Black-Scholes price in the limit of zero volatility:
lim BS (σ ) > C ,
σ →0
-2-
2.2 Implied dividend yield and interest rate
A stock index can be considered as the price of portfolio of stocks that pay dividends.
If q is the dividend yield rate on the portfolio represented by the index during the life
of the contract (expressed with continuous compounding), the equation for the futures
price Fo is:
Fo = So e ( r −q )T
The put-call parity for an option on an index is equivalent to the one for an option on
a stock paying dividend yield at rate q:
c + Xe − rT = p + So e − qT
Theoretically, the implied dividend yield q and interest rate r can be retrieved by
simultaneously solving the above system of equations. In total, there are four prices
that need to be used: a call option and a put option with the same strike, the futures
contract with the same expiry date as the options, and the underlying index price, S0.
By using price triplets with different expiry dates, one would be able to construct the
dividend yield and interest rate curve, and extrapolate from that curve the r and q
values for any given time to maturity.
-3-
models presented in Dumas et al (1998) in the FTSE 100 index, but modifying the
parametric forms so they are a function of moneyness instead of a function of strike.
Model 0: σ ( MN , T ) = β 0 + ε
Model 1: σ ( MN , T ) = β 0 + β1MN + β 2 MN 2 + ε
Model 2: σ ( MN , T ) = β 0 + β1MN + β 2 MN 2 + β 3T + β 4T MN + ε
Model 0 is the volatility function representing the constant volatility model of Black-
Scholes, that yields a constant volatility regardless of the level of moneyness and time
to maturity. Model 1 attempts to capture the quadratic volatility smile across
moneyness, and Model 2 captures additionally the variation across the time
dimension, as well as a combined effect of time and moneyness. The moneyness is
defined according to Gross and Waltners (1995) as MN = (log( F / K ) ) / T .
In principle, call and put options should yield the same implied volatility, based on the
Call Put parity theorem. Some argue (Ncube, 1996) that since the put option is a
natural hedging instrument, investors may be willing to pay more for it, and therefore,
its implied volatility would be higher than the call counterpart. However, we will not
take into account this possible bias in our model, since we are interested in obtaining a
more generic solution, from which both call and put options can be priced.
-4-
2.4 Optimization procedure
To estimate the parameter vector β , which represents the coefficients of the models,
the nonlinear least-squares function in MatLab is used. The algorithm in this function
minimizes the sum of squares error (SSE) between observations yi and the model’s
prediction for the i-th observation prdi(w) for a given parameter vector β:
m
min SSE ( β ) = ∑ ( yi − prd i ( w)) 2
i =1
where prdi(w) is the user-defined function that implements each specific model of the
volatility surface equation. This statistic measures the total deviation of the
observations from the estimated surface. To examine the goodness of fit statistics, we
can then calculate the R2 statistic, which is a measure of how successful the fit is in
explaining the variation of the data, that is, it measures the fraction of the variance in
the data that is explained by the regression. The R2 statistic, for the nonlinear least-
squares estimation, is defined as the square of the correlation between the
observations (Greene, 2000:420), and is calculated with the following equation:
SSE ( β )
R2 = 1 − m
∑(y
i =1
i − y )2
3. The data
The data set used to calibrate the volatility surfaces is comprised of option prices,
futures prices and the FTSE 100 index for five days, between 19th of April to 23rd of
April 2004. Each price was time-stamped with the exact time when the transaction
took place, and therefore, we were able to match the option prices with the underlying
price at the time the option was traded, in order to calculate the individual implied
volatilities. The results we report in this study are for end of day prices, even though
our application is able to estimate the volatility surface in real time during the trading
day. Very few options were continuously traded, so at the end of the day, the latest
price for most options is from sometime in the middle of the day. There were, in
average, 100 different option contracts traded every day, with the ones close to
maturity and at the money being traded most frequently.
-5-
4. Results
Each of the three models was estimated for each of the five days in the data set, using
the estimator described in the section 2. Table 1 below shows the estimated constant
parameter for Model 0, and Figure 1 below shows the implied volatility surface for
19th April 2004. As expected, the volatility surface is a simple flat surface.
Nevertheless, this benchmark model will be used for comparison purposes.
Figure 1: Estimated implied volatility surface for Model 0 on 19th April 2004.
The blue circles represent the observed implied volatilities.
-6-
The estimation results for Model 1 can be found in Table 2 below. When comparing
the RMSE values of Model 0 with Model 1, we can see that Model 1, with an RMSE
of 1.63%, is a considerable improvement over Model 0, which had an average RMSE
of 3.33%, by more than halving the RMSE statistic. The RMSE values are for an
average implied volatility of 12.42%. If we look at the goodness of fit of Model 1
with the R2 statistic, the model has an average value of 0.8637, that is, it is able to
explain 75.25% of the variance on the implied volatility. The benchmark model has
an R2 of zero, since it is a constant function.
Figure 2: Estimated implied volatility surface for Model 1 on 19th April 2004.
The blue circles represent the observed implied volatilities.
-7-
And finally, the estimated parameters for Model 2, and a sample implied volatility
surface, can be found in Table 3 and Figure 2 below. The implied volatility surface
corresponding to Model 2 for each of the 5 days can be found in Appendix A. The
average RMSE for Model 2 is 1.11%, with an average R2 statistic of 88.33%. This
model, with two additional parameters to capture the term structure dependency,
results on a 30% reduction of the RMSE with respect to Model 1, and on a 13%
improvement on explaining the variance of the volatility.
Figure 3: Estimated implied volatility surface for Model 2 on 19th April 2004.
The blue circles represent the observed implied volatilities.
-8-
4.2 The implied probability density function
∂ 2C
= e −rT f Q ( K )
∂K 2
where T is the remaining time to maturity. Since we have a closed form solution for
the volatility (as a function of moneyness and time to expiration), we can compute
this derivative analytically (see Appendix D for the Mathematica notebook)
There is only one FTSE 100 futures contract that is heavily traded in LIFFE, and
therefore, we can only use the put-call parity relationship for options that expire in the
same day as the closest futures contract. The futures contract closer to expiration was
the 18th June 2004 contract. We only calculate the density function for Model 2, since
it was the one that best fitted the data. The density function, plotted across all strike
prices, becomes negative for strikes lower than 1600. However, the area of interest is
the one for which the option prices are available. In our data set, this range is from
4000 to 5000. Therefore, the density function will be truncated, and only the relevant
section, highlighted in a dashed rectangle in Figure 4, will be used.
0.003
0.002
0.001
-0.001
-0.002
-9-
To ensure that it is a consistent probability measure, we must enforce that the
K max
probabilities add up to 1, that is, ∫K min
f ( K ) = 1 . We can enforce this constraint by
dividing the density function by the area under the curve, in order to normalize it.
Figure 5 shows the final implied density function, after being truncated and
normalized.
0.0035
Implied density
0.003 Log normal density
0.0025
0.002
0.0015
0.001
0.0005
0
3800 4000 4200 4400 4600 4800 5000
The implied density function satisfies the risk neutral constraint since its mean is
4308.07 approximately equal to the futures price, 4303.58, with an error of 0.1%. We
can observe the classic stylized facts when comparing the implied density with its
equivalent normal distribution (the dashed line): the implied density has a fatter left
tails than the lognormal distribution, i.e. the implied distribution is more leptokurtic.
Additionally, the distribution is skewed to the right.
- 10 -
5. Design and Implementation
This section aims to give a very general outline of the application developed to
implement the model. The technical details regarding the implementation and
integration of the different components can be made available by the author on
request. Selected portions of the source code are included in the Appendices.
5.2 Implementation
A menu driven application with a graphical user interface that implemented the
requirements presented above was developed as part of this project. The core of the
application was developed in Visual Basic 6, but it was integrated with the following
components/environments:
- Microsoft WebBrowser control and Java RunTime to connect and download
real-time pricing data from the ww.liffe-data.com website (quoted prices are
delayed by 15 minutes).
- A database was designed in MS Access to store the pricing data for options,
futures and the index.
- Integration with MatLab via COM permitted access the Optimization Toolbox,
running custom MatLab programs to estimate the volatility surfaces, and to
generate 3D graphs.
The application automatically downloads prices from the LIFFE website via the
internet, and estimates the implied volatility surface in real time.
- 11 -
6. Applications
There are two main areas in finance where a real time application that calculates the
implied volatility surface would be useful. The first one is for live pricing of exotic
options on a trading desk, where exotic options need to be valued in consistency with
the volatility implied by liquid traded options. The second area is risk management.
- 12 -
7. Conclusions and future work
We have estimated three different models to the observed implied volatilities for the
FTSE 100 options. The model that best fitted the data was Model 2, which captured
both the smile across moneyness, as well as the term structure across time to
expiration.
A prototype application has been developed to implement the model described in this
paper, in real-time. The estimation of the volatility surface for the parametric models
is fast enough (around 2 seconds) to be done in real time. At this stage, our
application calibrates the entire surface for each new observation. However, a Kalman
filter approach could be implemented to speed up this process and use each new
observation to update the estimated parameter vector.
From the data collected, we observed that only a very small set of options are actively
traded, and those are the contracts that are both ATM and close to expirations. As a
consequence, at a given time during the day, we may only have recent prices for a
small subset of options. The last traded price for options deep in of the money is
usually from several days ago, and for options in the money, the last traded price is
from today, but from several hours ago.
- 13 -
8. References
Black, F., and M. Scholes (1973) “The Pricing of Options and Corporate Liabilities“
Journal of Political Economy, 81, 637-654
Breeden, D. T. and Litzenberger, R. H. (1978), “Price of state-contingent claims
implicit in option prices”, Journal of Business 51 no. 4, 621--651.
Cassese, G. and Guidolin, M. (2003) “Modelling the Implied Volatlity Surface: Does
Market Efficiency matter?”, University of Virginia working paper
Cont R. and Fonseca J.d. (2002) “Dynamics of implied volatility surfaces”,
Quantitative Finance 2 (February 2002) 45-60
Derman, E., and Iraj K., (1994) “The volatility smile and its implied tree”,
Quantitative Strategies Research Notes, Goldman Sachs
Derman, E., Kani, I. Chriss, N. (1996) “Implied Trinomial Trees of the Volatility
Smile”, Quantitative Strategies Research Notes, Goldman Sachs
Dumas, B., Fleming J. and Whaley R.E. “Implied Volatility Functions: Empirical
Tests (1998), The Journal of Finance, Vol LIII, No. 6, 2059-2106
Dupire B., (1994), “Pricing with a smile”, Risk 7, 18-20
Greene, W. (2000) “Econometric Analysis”. Fourth Edition. Prentice-Hall, Inc.
Gross, L., and N. Waltners, (1995) “S&P 500 Options: Put Volatility Smile and Risk
Aversion”, Salomon Brothers, mimeo
Ncube M. (1996) “Modelling implied volatility with OLS and panel data models”,
Journal of Banking and Finance 20 71-84
Peňa, I., Serna, G, and G. Rubio (1999). “Why do we smile? On the determinants of
the implied volatility function”, Journal of Banking and Finance 23 1151-1179
Rebonato R. (1999) ‘Volatility and Correlation’, John Wiley, Chichester
Rubinstein M., (1994), “Implied binomial trees”, Journal of finance, 49, 771-818
Syrdal S.A. (2002) “A Study of Implied Risk-Neutral Density Functions in the
Norwegian Option Market”, Norges Bank Working Paper, 2002/13
- 14 -
Appendix A: Implied volatility surfaces for Model 2
- 16 -
- 17 -
- 18 -
Appendix B: Newton-Raphson algorithm implementation in Visual Basic
Adapted from a C++ implementation at:
http://finance.bi.no/~bernt/gcc_prog/algoritms_v1/algoritms/node8.html
IV = -1
'calculate the price of the volatility was almost zero, to see what would be the minimum
price
Select Case sType
Case "C": Price = option_price_call_black_scholes(s, X, r, sigma_low, t, d)
Case "P": Price = option_price_put_black_scholes(s, X, r, sigma_low, t, d)
End Select
' want to bracket sigma. first find a maximum sigma by finding a sigma
' with a estimated price higher than the actual price.
Dim sigma_high As Double
sigma_high = 0.3
Select Case sType
Case "C": Price = option_price_call_black_scholes(s, X, r, sigma_high, t, d)
Case "P": Price = option_price_put_black_scholes(s, X, r, sigma_high, t, d)
End Select
- 19 -
Loop
Dim i As Integer
For i = 0 To MAX_ITERATIONS
Dim sigma As Double
sigma = (sigma_low + sigma_high) * 0.5
Select Case sType
Case "C": Price = option_price_call_black_scholes(s, X, r, sigma, t, d)
Case "P": Price = option_price_put_black_scholes(s, X, r, sigma, t, d)
End Select
ReturnValue:
If IV >= 0 Then
calculate_implied_volatility_bisections = IV
Else
'return ERROR;
'Err.Raise 702
calculate_implied_volatility_bisections = -1 'IV = -1000000
End If
End Function
- 20 -
Appendix C: Mathematica notebook to calculate the implied density function
In[39]:=
In[1]:=
In[4]:=
In[6]:=
In[7]:=
In[12]:=
In[14]:=
In[15]:=
In[29]:=
Out[29]=
In[16]:=
- 21 -
In[17]:=
Out[17]=
In[18]:=
Out[18]=
In[19]:=
Out[19]=
In[20]:=
Out[20]=
In[27]:=
In[28]:=
Out[28]=
- 22 -
Appendix D: Matlab code for estimation of volatility surfaces
figure('Name',WinTitle,'NumberTitle','off'); %,'Box','on');
set(gcf,'Color','w');
%figure(1);
plot3(MN,T,IV,'o'); hold on;
%[DM,TM] = meshgrid(-.2:.02:.6,0:.02:1.2);
[DM,TM] = meshgrid(min(MN):.02:max(MN),0:.02:max(T));
ZM = ivfitted(x, DM, TM);
surf(DM,TM,ZM,'FaceColor','flat','EdgeColor','none'); hold off;
%mesh(DM, TM, ZM); hold off;
xlabel('Moneyness');
ylabel('Years to maturity');
zlabel('Implied volatility');
title(WinTitle);
%show axis and grids
box on;
grid on;
xxx= x;
sss = RMSE;
rrr = STDERRORS;
R2 = R_square;
residuals = residual
resnoms = resnorm
- 23 -
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y = ivfitted(pars, MN, T)
% The parametrized fitted surface
%Connstant volatility model
%y = pars(1) + MN.*0;
%Dumas Model 1
%y = pars(1) + pars(2)*MN + pars(3)*MN.^2;
%Dumas Model 2
%y = pars(1) + pars(2)*MN + pars(3)*MN.^2 + pars(4)*T + pars(5) * T
.* MN;
- 24 -