Discussion:
[Quantlib-users] Volatility surfaces
info@d-metrics.de
2017-04-01 10:34:50 UTC
Permalink
Hello guys,

i'm currently diving into volatility surfaces and I have some questions.

My first experiment is the creation of a simple BlackVarianceSurface
from a set of given Call-Options.
That is straight forward, the surface is build from solved implied
volatilities.

Now i have the situation that i structured my calls for a range of
strikes and dates, say:

strikes: {10,15,20,25,30}
maturities: {31.12.2017,31.12.2018, 31.12.2019,31.12.2020,31.12.2020}

These lists span the volatility matrix passed into the variance surface.
Given the nature of liquid option availability it is very likely that a
point in the matrix is missing
(eg. strike 15 has no call with maturity 31.12.2019).

The effect on the surface is, that especially at this vola point a value
of 0 is returned by surface.blackVol().
My thought was, that this missing vola point will be interpolated with
the integrated 2d-interpolation,
which obviously is not the case. Am I missing something here?

To get around that issue I took a look into the HestonVolSurface
structure. That one seems to be very handy
with respect to missing volapoints. It builds the Heston model and
accurately interpolates the missing strike/maturity
pairs.

The point here is that given you have the quoted call premiums from the
market you first have to
derive the implied volatilities and then put them into the
HestonModelHelpers that will represent the particular
Volapoint in the HestonVolSurface. In the surface then the projected
market premium of the call is calculated
with the HestonEngine. So you go from market quote to implied vola and
then again to market quote and finally to
surface implied vola.
Is that really the methodology needed for Heston Surfaces?

What is your experience / best practice to setup a plain vanilla surface
derived from liquid option quotes?

Regards,

Michael
Luigi Ballabio
2017-04-06 09:50:23 UTC
Permalink
Hello,
the current implementation of bilinear interpolation requires a
complete grid. Adding missing points is not straightforward; from a quick
search it seems there are different methods, none of which simple. They
might be added as functions to be called before passing the data to the
BlackVarianceSurface; if you do, please consider contributing the code.

About the Heston surface: as far as I can see, it's not based on a grid.
It takes a Heston model (which doesn't contain the volatility points used
for its calibration, but only the resulting model parameters) and extracts
the volatility at a given maturity and strike by calculating the Heston
price and solving for the corresponding Black volatility. So yes, you go
from prices to volatilities once during the calibration, and you go from
prices to volatility again in the Heston surface, but you don't do it twice
each time you ask for a volatility; the model calibration is only performed
at the beginning, before creating the surface.

Later,
Luigi
Post by ***@d-metrics.de
Hello guys,
i'm currently diving into volatility surfaces and I have some questions.
My first experiment is the creation of a simple BlackVarianceSurface
from a set of given Call-Options.
That is straight forward, the surface is build from solved implied
volatilities.
Now i have the situation that i structured my calls for a range of
strikes: {10,15,20,25,30}
maturities: {31.12.2017,31.12.2018, 31.12.2019,31.12.2020,31.12.2020}
These lists span the volatility matrix passed into the variance surface.
Given the nature of liquid option availability it is very likely that a
point in the matrix is missing
(eg. strike 15 has no call with maturity 31.12.2019).
The effect on the surface is, that especially at this vola point a value
of 0 is returned by surface.blackVol().
My thought was, that this missing vola point will be interpolated with
the integrated 2d-interpolation,
which obviously is not the case. Am I missing something here?
To get around that issue I took a look into the HestonVolSurface
structure. That one seems to be very handy
with respect to missing volapoints. It builds the Heston model and
accurately interpolates the missing strike/maturity
pairs.
The point here is that given you have the quoted call premiums from the
market you first have to
derive the implied volatilities and then put them into the
HestonModelHelpers that will represent the particular
Volapoint in the HestonVolSurface. In the surface then the projected
market premium of the call is calculated
with the HestonEngine. So you go from market quote to implied vola and
then again to market quote and finally to
surface implied vola.
Is that really the methodology needed for Heston Surfaces?
What is your experience / best practice to setup a plain vanilla surface
derived from liquid option quotes?
Regards,
Michael
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
QuantLib-users mailing list
https://lists.sourceforge.net/lists/listinfo/quantlib-users
Peter Caspers
2017-04-06 12:55:03 UTC
Permalink
I wonder whether Laplace Interpolation would work? There is an implementation in ql/experimental/math, possibly one would have to generalise it to non-equidistant grids before.
Peter
Post by Luigi Ballabio
Hello,
the current implementation of bilinear interpolation requires a complete grid. Adding missing points is not straightforward; from a quick search it seems there are different methods, none of which simple. They might be added as functions to be called before passing the data to the BlackVarianceSurface; if you do, please consider contributing the code.
About the Heston surface: as far as I can see, it's not based on a grid. It takes a Heston model (which doesn't contain the volatility points used for its calibration, but only the resulting model parameters) and extracts the volatility at a given maturity and strike by calculating the Heston price and solving for the corresponding Black volatility. So yes, you go from prices to volatilities once during the calibration, and you go from prices to volatility again in the Heston surface, but you don't do it twice each time you ask for a volatility; the model calibration is only performed at the beginning, before creating the surface.
Later,
Luigi
Hello guys,
i'm currently diving into volatility surfaces and I have some questions.
My first experiment is the creation of a simple BlackVarianceSurface
from a set of given Call-Options.
That is straight forward, the surface is build from solved implied
volatilities.
Now i have the situation that i structured my calls for a range of
strikes: {10,15,20,25,30}
maturities: {31.12.2017,31.12.2018, 31.12.2019,31.12.2020,31.12.2020}
These lists span the volatility matrix passed into the variance surface.
Given the nature of liquid option availability it is very likely that a
point in the matrix is missing
(eg. strike 15 has no call with maturity 31.12.2019).
The effect on the surface is, that especially at this vola point a value
of 0 is returned by surface.blackVol().
My thought was, that this missing vola point will be interpolated with
the integrated 2d-interpolation,
which obviously is not the case. Am I missing something here?
To get around that issue I took a look into the HestonVolSurface
structure. That one seems to be very handy
with respect to missing volapoints. It builds the Heston model and
accurately interpolates the missing strike/maturity
pairs.
The point here is that given you have the quoted call premiums from the
market you first have to
derive the implied volatilities and then put them into the
HestonModelHelpers that will represent the particular
Volapoint in the HestonVolSurface. In the surface then the projected
market premium of the call is calculated
with the HestonEngine. So you go from market quote to implied vola and
then again to market quote and finally to
surface implied vola.
Is that really the methodology needed for Heston Surfaces?
What is your experience / best practice to setup a plain vanilla surface
derived from liquid option quotes?
Regards,
Michael
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot <http://sdm.link/slashdot>
_______________________________________________
QuantLib-users mailing list
https://lists.sourceforge.net/lists/listinfo/quantlib-users <https://lists.sourceforge.net/lists/listinfo/quantlib-users>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot_______________________________________________
QuantLib-users mailing list
https://lists.sourceforge.net/lists/listinfo/quantlib-users
Continue reading on narkive:
Loading...