I have implemented a Levenberg-Marquardt(LM) based method to calibrate the Heston model against market data by minimizing a weighted $L^2$-norm of differences of market vs model prices. Pretty standard stuff. The calibration works pretty well and fits the market data as good as could be expected.

As a reference, the Heston model is given by the processes: $$ dS_t = \mu \cdot S_t dt + \sqrt{\nu_t} \cdot S_t dW^S_t$$ $$ d\nu_t = \kappa \cdot (\theta - \nu_t) dt + \xi \sqrt{\nu_t} dW^{\nu}_t $$ where $$ dW^S_t \cdot dW^{\nu}_t = \rho dt$$ and $v_t$ has initial value $= \nu_0.$
The Heston parameters are given by the tuple $(\kappa, \rho, \xi, \theta, \nu_0).$

The parameters of the model have some natural boundaries. The correlation, $\rho$, for example, should be in the interval $[-1, 1]$ and the rest of the parameters should be non-negative.
My problem is that the LM minimizer sometimes end up hitting the boundary of the allowed parameter space and "wants" to go further in that direction. So the calibration then ends up with say $\rho = -1$ or some other parameter equal or close to zero.
This might not be a huge problem when it comes to fitting the market data, but it will affect the quality of the stochastic behavior of the calibrated Heston model if used in Monte Carlo simulations for example.

To make a simple example, let us say that the vol-vol, $\xi$, is calibrated to some value very close to or equal to zero. Then we practically have a deterministic volatility model, which probably will not be very useful. In this case we would probably have been more satisfied with a slightly worse fit to market data, but with no degenerate values of the model parameters.

My question is to get some advice on methods to prevent degenerate model values in the calibration.
A read a bit about penalty functions to prevent the minimizer to search too close to the boundary of the parameter space. Could this be a way to go? What forms of penalty functions are appropriate then? My worry here is that the penalty function might affect the calibration too much even when we are not close to the boundary?

This question is, of course, not specific to the Heston model. This seems to be a reoccurring problem in most model calibrations.

  • 1
    $\begingroup$ Hey Jesper - have you tried convert the option prices (both market and model) into implied volatilities and L2 norm those diffs? Another idea is to pull in market prices (where possible) for other related quantities like fair varswap strikes at diff expiries to help anchor the model to more than just European prices. Presume you have multiple expiries of European in there, not just one slice? $\endgroup$ Nov 18, 2022 at 13:53
  • $\begingroup$ Yes, I have tried comparing volatilites as well. Typically I use inverse vega weights when comparing option prices to somewhat emulate the volatility comparing case. Seems to work well. Yes, using data for several maturities is more or less necessary in the Heston model to capture the model time dependency, so I never use just one maturity. $\endgroup$ Nov 18, 2022 at 14:15
  • 1
    $\begingroup$ You could penalise parameters as they near the boundaries of reasonableness I.e. |rho|<0.99 but do it in a smooth way. I often use sigmoid functions to activate incrementally as I near regions which will cause degeneracy or numerical issues with my chosen method to generate model prices. Ita all a bit science and a bit of art... $\endgroup$ Nov 18, 2022 at 14:39
  • 1
    $\begingroup$ What initial guesses do you use? Do you have the same problems if you use a different optimiser? Perhaps even a global optimisation routine? Have you tried minimising relative pricing errors rather than absolute/squared pricing errors? Finally, choose some Heston parameters, calculate corresponding option prices and try to calibrate the model. Do you recover your original parameter values? $\endgroup$
    – Alex
    Nov 18, 2022 at 15:12
  • 1
    $\begingroup$ Can you perhaps share some implied volatilities (with strike, interest rate, dividend yield, underlying value, maturity, etc.) that you failed to calibrate properly? Then we can try whether can replicate that failure or try out different ways of fixing it? $\endgroup$
    – Kevin
    Nov 18, 2022 at 17:10


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.