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?

Quantitative Finance Asked on August 3, 2020

1 AnswersThis 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)
```

Correct answer by StackG on August 3, 2020

1 Asked on November 27, 2020 by therealcode

implied volatility monte carlo simulations volatility surface

0 Asked on November 26, 2020 by mr-sandwich

1 Asked on November 19, 2020 by john-smith

1 Asked on November 12, 2020 by mbz0

1 Asked on October 21, 2020 by kiann

1 Asked on October 14, 2020 by johncena12345678

1 Asked on October 9, 2020 by lampshadesdrifter

1 Asked on September 27, 2020 by jan-stuller

cmg theorem girsanov numeraire radon nikodym risk neutral measure

1 Asked on September 18, 2020 by dum03

1 Asked on August 21, 2020 by abnv

1 Asked on August 13, 2020 by monicam

Get help from others!

Recent Answers

© 2021 InsideDarkWeb.com. All rights reserved.