Skip to content
All library documents

How Heston Parameters Shape the Term Structure of Implied Volatility

Article Quant Q&A · Author: Daniel

Summary

The document explains why a Heston model does not always produce lower implied volatility at longer maturities. Its variance process is mean reverting toward the long-run variance level, so the relationship between current variance and that target influences the direction of the term structure. When initial variance is below the long-run level, the model can produce higher long-dated implied volatility than short-dated implied volatility; the reverse pattern is not universal.

A QuantLib example specifies model parameters and constructs a volatility surface across strikes and maturities to illustrate one configuration. This is a model-based demonstration, not market evidence or a business explanation for a particular observed surface. The shape also depends on the other Heston parameters and market inputs, so the example should not be treated as a general forecast or calibration result.

Key ideas

  • Heston variance mean reverts toward its long-run variance parameter.
  • The relation between initial variance and long-run variance can influence whether implied volatility rises or falls with maturity.
  • A volatility surface generated from chosen Heston parameters illustrates one possible shape.
  • A model example does not establish the business cause of a market volatility surface.

Tags

Full text
# Implied Volatility from Heston Model


# Implied Volatility from Heston Model












When one construct surface for Implied volatilities using `Heston model` from different Strike prices and Maturities, we get a surface where long dated volatilities are smaller than the short dated ones.

Is there any business reason for such shape?

## Answer by StackG (score 1, accepted)

https://quant.stackexchange.com/a/55925

This is definitely not generally true

`HestonModel`'s behaviour is controlled by several parameters, but looking at the equation for variance in the Heston model we see that the long term vol is determined by the $\theta$ term, variance will tend to equal this because if it goes above the drift pulls it back down, and vice versa (ie. it's mean-reverting).

So, if initial variance `v0` is lover than $\theta$, long term IV will be higher than short-term IV. Below is a snippet that generates a vol surface demonstrating this

```
import QuantLib as ql
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def plot_vol_surface(vol_surface, plot_years=np.arange(0.1, 2, 0.1), plot_strikes=np.arange(80, 120, 1)):
    fig = plt.figure()
    ax = fig.gca(projection='3d')

    X, Y = np.meshgrid(plot_strikes, plot_years)
    Z = np.array([vol_surface.blackVol(float(y), float(x)) 
                  for xr, yr in zip(X, Y) 
                      for x, y in zip(xr,yr) ]
                 ).reshape(len(X), len(X[0]))

    surf = ax.plot_surface(X,Y,Z, rstride=1, cstride=1, linewidth=0.1)

    fig.colorbar(surf, shrink=0.5, aspect=5)

spot = 100
rate = 0.0

today = ql.Date(1, 7, 2020)

calendar = ql.NullCalendar()
day_count = ql.Actual365Fixed()
spot_quote = ql.QuoteHandle(ql.SimpleQuote(spot))

# Set up the flat risk-free curves
riskFreeCurve = ql.FlatForward(today, rate, day_count)
flat_ts = ql.YieldTermStructureHandle(riskFreeCurve)
dividend_ts = ql.YieldTermStructureHandle(riskFreeCurve)

# Create new heston model
v0 = 0.01; kappa = 1.0; theta = 0.04; rho = -0.3; sigma = 0.4

heston_process = ql.HestonProcess(flat_ts, dividend_ts, spot_quote, v0, kappa, theta, sigma, rho)
heston_model = ql.HestonModel(heston_process)

# How does the vol surface look at the moment?
heston_handle = ql.HestonModelHandle(heston_model)
heston_vol_surface = ql.HestonBlackVolSurface(heston_handle)

# Plot the vol surface ...
plot_vol_surface(heston_vol_surface)
```

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.