Class BatesModel

java.lang.Object
net.finmath.fouriermethod.models.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 Summary

    Constructors
    Constructor
    Description
    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.
    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.
    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.
    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.
  • Method Summary

    Modifier and Type
    Method
    Description
    apply(double time)
    Returns the characteristic function of X(t), where X is this stochastic process.
    double[]
     
    double[]
     
    double
     
    double
     
    double
     
    double
     
    double[]
     
    int
     
     
    double[]
     
    double
     
    double[]
     
    double[]
     
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • 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 Details

    • apply

      public CharacteristicFunction apply(double time)
      Description copied from interface: CharacteristicFunctionModel
      Returns the characteristic function of X(t), where X is this stochastic process.
      Specified by:
      apply in interface CharacteristicFunctionModel
      Parameters:
      time - The time at which the stochastic process is observed.
      Returns:
      The characteristic function of X(t).
    • 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
    • toString

      public String toString()
      Overrides:
      toString in class Object