How Heston Parameters Shape the Term Structure of Implied Volatility
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.