Skip to content
All library documents

Adding Independent Jumps to Heston Option Pricing

Article Quant Q&A · Author: antonino

Summary

The document explains how to extend a Heston stochastic volatility option model with jumps in the underlying asset. It recommends first considering a jump diffusion such as Merton’s model, which uses lognormally distributed jump sizes, or Kou’s model, which uses a double exponential distribution. The Bates model combines Heston dynamics with Merton style asset jumps. Under the stated independence assumption, the characteristic function for log price is formed by multiplying the stochastic volatility and jump characteristic functions; the existing Fourier integration formulas for the two option probabilities can then be retained.

The answer gives a Kou characteristic function and its drift adjustment as an illustration, and mentions Fourier pricing alternatives. It does not show the requested MATLAB implementation or derive a characteristic function for exponential jumps in variance. Its guidance therefore covers asset jumps more fully than variance jumps, and assumes jump and diffusion components are independent.

Key ideas

  • Independent asset jump and stochastic volatility components can be combined by multiplying their characteristic functions.
  • Merton jump diffusion models lognormally distributed asset jump sizes.
  • Kou’s model uses double exponential asset jump sizes.
  • The Bates model combines Heston stochastic volatility with Merton style asset jumps.
  • The Fourier probability integration approach can remain unchanged after replacing the characteristic function.

Tags

Full text
# Heston model with jumps in both variance and underlying dynamic


# Heston model with jumps in both variance and underlying dynamic












How can I build on Matlab a Heston model using characteristic function adding jumps in both variance and underlying dynamic ? Suppose that the number of jumps is Poisson-distributed but the jump size is log-normal for the underlying jumps and exponential for the variance. This is the current code in Matlab, so how can I add jumps?

```
function y = call_heston_cf(s0, v0, vbar, a, vvol, r, rho, t, k) 

%   Heston call value using characteristic functions.   
%   y = call_heston_cf(s0, v0, vbar, a, vvol, r, rho, t, k) 

%   Inputs:  
    %   s0: stock price 
    %   v0: initial volatility (v0^2 initial variance) 
    %   vbar: long-term variance mean 
    %   a: variance mean-reversion speed 
    %   vvol: volatility of the variance process 
    %   r: risk-free rate  
    %   rho: correlation between the Weiner processes of the stock price and its variance 
    %   t: time to maturity 
    %   k: option strike 
    %   chfun_heston: Heston characteristic function 

%  1st step: calculate pi1 and pi2  
%  Inner integral 1
int1 = @(w, s0, v0, vbar, a, vvol, r, rho, t, k) real(exp(-i.*w*log(k)).*chfun_heston(s0, v0, vbar, a, vvol, r, rho, t, w-i)./(i*w.*chfun_heston(s0, v0, vbar, a, vvol, r, rho, t, -i))); 

% inner integral1
int1 = integral(@(w)int1(w,s0, v0, vbar, a, vvol, r, rho, t, k),0,100); 

% numerical integration
pi1 = int1/pi+0.5; %final pi1

%  Inner integral 2:
int2 = @(w, s0, v0, vbar, a, vvol, r, rho, t, k) real(exp(-i.*w*log(k)).*chfun_heston(s0, v0, vbar, a, vvol, r, rho, t, w)./(i*w));

int2 = integral(@(w)int2(w,s0, v0, vbar, a, vvol, r, rho, t, k),0,100);
int2 = real(int2);

pi2 = int2/pi+0.5; % final pi2 

%  2rd step: calculate call value
y = s0*pi1-exp(-r*t)*k*pi2; 

end
```

## Answer by Kevin (score 1)

https://quant.stackexchange.com/a/49665

The first step is to include jumps in the stock price. Then, you can easily add jumps into the variance process. If you only consider seldom, large jumps, you may want to use a jump-diffusion like the models from Merton (1976) and Kou (2002). The former uses a log-normal distribution for the jump size whilst Kou employs a double exponential distribution.

A model that directly combines Heston (1993) and Merton (1976) was developed by Bates (1996).

You typically assume that the jump component and the diffusion (sto vol) component are independent. This means that the characteristic function of the log stock price $\ln(S_t)$ is given by \begin{align*} \varphi_{\ln(S_t)}(u) = \varphi_{StoVol}(u) \cdot \varphi_{Jumps}(u). \end{align*}

You can simply look up the characteristic functions of the Merton and the Kou model. For example, \begin{align*} \varphi_t^\text{Kou}(u) &= \exp\left( \ln\left(S_0e^{(r-q+\omega)t}\right)iu\right) \cdot \varphi_{\sigma W_t}(u) \cdot \varphi_{N_t}(u) \\ &= \exp\left( \ln\left(S_0e^{(r-q+\omega)t}\right)iu-\frac{1}{2}\sigma^2u^2t+t\lambda\left(\frac{p\zeta}{\zeta-iu}+\frac{q\eta}{\eta+iu}-1\right)\right), \end{align*} where \begin{align*} \omega &= -\frac{1}{2}\sigma^2-\lambda\left(\frac{p\zeta}{\zeta-1}+\frac{q\eta}{\eta+1}-1\right). \end{align*}

The formula for integrating the characteristic function $\Pi_1$ and $\Pi_2$ remain unchanged. And you can then get the option price in a 'Black-Scholes-style'. Fourier methods can be sped up using the Carr Madan (1999) approach, by controlling for auxiliary models and making use of the cosine representation of the density function.

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.