Volatility surfaces

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Volatility surfaces

info@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 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

------------------------------------------------------------------------------
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
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users
Reply | Threaded
Open this post in threaded view
|

Re: Volatility surfaces

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


On Sat, Apr 1, 2017 at 12:37 PM [hidden email] <[hidden email]> wrote:
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

------------------------------------------------------------------------------
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
[hidden email]
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
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users
Reply | Threaded
Open this post in threaded view
|

Re: Volatility surfaces

Peter Caspers-4
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

On 06 Apr 2017, at 11:50, Luigi Ballabio <[hidden email]> wrote:

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


On Sat, Apr 1, 2017 at 12:37 PM [hidden email] <[hidden email]> wrote:
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

------------------------------------------------------------------------------
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
[hidden email]
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
[hidden email]
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
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users