Is call/put wing volatility smile calibration approach used in practice? To calibrate an index (SPY) using only more liquid OTM calls/puts, to kind of use an "if" condition on K to S0 to determine whether to use call or put formular? More details;
literature I found on the internet usually calibrate vol smiles/skews to call options (Euro SPY), (assuming put-call parity),
but in practice as I know calibration (index) is done to OTM puts and calls, due to more liquidity. Also, looking at IV (BBG terminal option chain data) of puts and calls with same strike, the IV wont be the same, small differences I have observed.
I am looking at the calibration code provided here Heston model SPY calibration
It would require a few changes (hopefully) to the code,like changing the option param payoff argument to:
if K>S0 payoff 'call' elif K<S0 payoff 'put' else...
# Unconstrained problem
def f_Hest(x, rho, sigma, theta, kappa, v0):
Heston_param = Heston_process(mu=r, rho=rho, sigma=sigma, theta=theta, kappa=kappa)
opt_param = Option_param(S0=S0, K=K, T=T, v0=v0, exercise="European", payoff=payoff)
Hest = Heston_pricer(opt_param, Heston_param)
return Hest.FFT(x)
init_vals = [-0.6, 1.0, 0.04, 2.5, 0.04]
bounds = ([-1, 1e-15, 1e-15, 1e-15, 1e-15], [1, np.inf, 2, np.inf, 2])
params_Hest = scpo.curve_fit(
f_Hest, strikes, prices, p0=init_vals, bounds=bounds, sigma=spreads, xtol=1e-4, max_nfev=1000
)
I believe I would get something like this;
