Class BatesModel

  • All Implemented Interfaces:
    CharacteristicFunctionModel, Model

    public class BatesModel
    extends Object
    implements CharacteristicFunctionModel
    Implements the characteristic function of a Bates model. The Bates model for an underlying \( S \) is given by \[ dS(t) = r^{\text{c}} S(t) dt + \sqrt{V(t)} S(t) dW_{1}(t) + S dJ, \quad S(0) = S_{0}, \] \[ dV(t) = \kappa ( \theta - V(t) ) dt + \xi \sqrt{V(t)} dW_{2}(t), \quad V(0) = \sigma^2, \] \[ dW_{1} dW_{2} = \rho dt \] \[ dN(t) = r^{\text{d}} N(t) dt, \quad N(0) = N_{0}, \] where \( W \) is Brownian motion and \( J \) is a jump process (compound Poisson process). The free parameters of this model are:
    \( S_{0} \)
    spot - initial value of S
    \( r \)
    the risk free rate
    \( \sigma \)
    the initial volatility level
    \( \xi \)
    the volatility of volatility
    \( \theta \)
    the mean reversion level of the stochastic volatility
    \( \kappa \)
    the mean reversion speed of the stochastic volatility
    \( \rho \)
    the correlation of the Brownian drivers
    \( a \)
    the jump size mean
    \( b \)
    the jump size standard deviation
    The process \( J \) is given by \( J(t) = \sum_{i=1}^{N(t)} (Y_{i}-1) \), where \( \log(Y_{i}) \) are i.i.d. normals with mean \( a - \frac{1}{2} b^{2} \) and standard deviation \( b \). Here \( a \) is the jump size mean and \( b \) is the jump size std. dev. The model can be rewritten as \( S = \exp(X) \), where \[ dX = \mu dt + \sqrt{V(t)} dW + dJ^{X}, \quad X(0) = \log(S_{0}), \] with \[ J^{X}(t) = \sum_{i=1}^{N(t)} \log(Y_{i}) \] with \( \mu = r - \frac{1}{2} \sigma^2 - (exp(a)-1) \lambda \).
    Version:
    1.0
    Author:
    Christian Fries, Andy Graf, Lorenzo Toricelli
    • Constructor Detail

      • BatesModel

        public BatesModel​(LocalDate referenceDate,
                          double initialValue,
                          DiscountCurve discountCurveForForwardRate,
                          DiscountCurve discountCurveForDiscountRate,
                          double[] volatility,
                          double[] alpha,
                          double[] beta,
                          double[] sigma,
                          double[] rho,
                          double[] lambda,
                          double k,
                          double delta)
        Create a two factor Bates model.
        Parameters:
        referenceDate - The date representing the time t = 0. All other double times are following FloatingpointDate.
        initialValue - Initial value of S.
        discountCurveForForwardRate - The curve specifying \( t \mapsto exp(- r^{\text{c}}(t) \cdot t) \) - with \( r^{\text{c}}(t) \) the risk free rate
        discountCurveForDiscountRate - The curve specifying \( t \mapsto exp(- r^{\text{d}}(t) \cdot t) \) - with \( r^{\text{d}}(t) \) the discount rate
        volatility - Square root of initial value of the stochastic variance process V.
        alpha - The parameter alpha/beta is the mean reversion level of the variance process V.
        beta - Mean reversion speed of variance process V.
        sigma - Volatility of volatility.
        rho - Correlations of the Brownian drives (underlying, variance).
        lambda - Coefficients of for the jump intensity.
        k - Jump size mean.
        delta - Jump size variance.
      • BatesModel

        public BatesModel​(double initialValue,
                          DiscountCurve discountCurveForForwardRate,
                          DiscountCurve discountCurveForDiscountRate,
                          double[] volatility,
                          double[] alpha,
                          double[] beta,
                          double[] sigma,
                          double[] rho,
                          double[] lambda,
                          double k,
                          double delta)
        Create a two factor Bates model.
        Parameters:
        initialValue - Initial value of S.
        discountCurveForForwardRate - The curve specifying \( t \mapsto exp(- r^{\text{c}}(t) \cdot t) \) - with \( r^{\text{c}}(t) \) the risk free rate
        discountCurveForDiscountRate - The curve specifying \( t \mapsto exp(- r^{\text{d}}(t) \cdot t) \) - with \( r^{\text{d}}(t) \) the discount rate
        volatility - Square root of initial value of the stochastic variance process V.
        alpha - The parameter alpha/beta is the mean reversion level of the variance process V.
        beta - Mean reversion speed of variance process V.
        sigma - Volatility of volatility.
        rho - Correlations of the Brownian drives (underlying, variance).
        lambda - Coefficients of for the jump intensity.
        k - Jump size mean.
        delta - Jump size variance.
      • BatesModel

        public BatesModel​(double initialValue,
                          double riskFreeRate,
                          double discountRate,
                          double[] volatility,
                          double[] alpha,
                          double[] beta,
                          double[] sigma,
                          double[] rho,
                          double[] lambda,
                          double k,
                          double delta)
        Create a two factor Bates model.
        Parameters:
        initialValue - Initial value of S.
        riskFreeRate - Risk free rate.
        discountRate - The rate used for discounting.
        volatility - Square root of initial value of the stochastic variance process V.
        alpha - The parameter alpha/beta is the mean reversion level of the variance process V.
        beta - Mean reversion speed of variance process V.
        sigma - Volatility of volatility.
        rho - Correlations of the Brownian drives (underlying, variance).
        lambda - Coefficients of for the jump intensity.
        k - Jump size mean.
        delta - Jump size variance.
      • BatesModel

        public BatesModel​(double initialValue,
                          double riskFreeRate,
                          double volatility,
                          double alpha,
                          double beta,
                          double sigma,
                          double rho,
                          double lambdaZero,
                          double lambdaOne,
                          double k,
                          double delta)
        Create a one factor Bates model.
        Parameters:
        initialValue - Initial value of S.
        riskFreeRate - Risk free rate.
        volatility - Square root of initial value of the stochastic variance process V.
        alpha - The parameter alpha/beta is the mean reversion level of the variance process V.
        beta - Mean reversion speed of variance process V.
        sigma - Volatility of volatility.
        rho - Correlations of the Brownian drives (underlying, variance).
        lambdaZero - Constant part of the jump intensity.
        lambdaOne - Coefficients of the jump intensity, linear in variance.
        k - Jump size mean.
        delta - Jump size variance.
    • Method Detail

      • getReferenceDate

        public LocalDate getReferenceDate()
        Returns:
        the referenceDate
      • getInitialValue

        public double getInitialValue()
        Returns:
        the initialValue
      • getRiskFreeRate

        public double getRiskFreeRate()
        Returns:
        the riskFreeRate
      • getVolatility

        public double[] getVolatility()
        Returns:
        the volatility
      • getDiscountRate

        public double getDiscountRate()
        Returns:
        the discountRate
      • getAlpha

        public double[] getAlpha()
        Returns:
        the alpha
      • getBeta

        public double[] getBeta()
        Returns:
        the beta
      • getSigma

        public double[] getSigma()
        Returns:
        the sigma
      • getRho

        public double[] getRho()
        Returns:
        the rho
      • getLambda

        public double[] getLambda()
        Returns:
        the lambda
      • getK

        public double getK()
        Returns:
        the k
      • getDelta

        public double getDelta()
        Returns:
        the delta
      • getNumberOfFactors

        public int getNumberOfFactors()
        Returns:
        the numberOfFactors