Quantitative Finance Asked on August 3, 2020
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?
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)) 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
4 Asked on October 27, 2021
1 Asked on October 27, 2021 by gorlomi
1 Asked on October 27, 2021 by arshdeep
0 Asked on October 27, 2021 by whatamisaying
1 Asked on October 27, 2021
2 Asked on October 27, 2021 by user1131338
10 Asked on October 27, 2021 by mountainclimber11
2 Asked on October 27, 2021 by little
3 Asked on October 27, 2021 by kch
2 Asked on October 27, 2021 by user40929
3 Asked on October 27, 2021 by jorget
2 Asked on October 27, 2021 by gauthier-golin
2 Asked on October 27, 2021 by tim-kim
2 Asked on October 27, 2021 by maths-student-g
1 Asked on October 27, 2021 by j-swartz
3 Asked on October 27, 2021 by syed-riaz-mahmood-ali
0 Asked on October 27, 2021 by user165494
1 Asked on October 27, 2021 by lopo
1 Asked on October 27, 2021
Get help from others!