java.lang.Object
net.finmath.montecarlo.model.AbstractProcessModel
net.finmath.montecarlo.assetderivativevaluation.models.VarianceGammaModel
All Implemented Interfaces:
ProcessModel

public class VarianceGammaModel extends AbstractProcessModel
This class implements a Variance Gamma Model, that is, it provides the drift and volatility specification and performs the calculation of the numeraire (consistent with the dynamics, i.e. the drift). The model is \[ dS_t = r S dt + S dL, \quad S(0) = S_{0}, \] \[ dN = r N dt, \quad N(0) = N_{0}, \] where the process L is a VarianceGammaProcess.
Version:
1.0
Author:
Alessandro Gnoatto
See Also:
  • Constructor Details

    • VarianceGammaModel

      public VarianceGammaModel(RandomVariable initialValue, DiscountCurve discountCurveForForwardRate, DiscountCurve discountCurveForDiscountRate, RandomVariable sigma, RandomVariable theta, RandomVariable nu, RandomVariableFactory randomVariableFactory)
      Construct a Variance Gamma model with discount curves for the forward price (i.e. repo rate minus dividend yield) and for discounting.
      Parameters:
      initialValue - \( S_{0} \) - spot - 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
      sigma - The parameter \( \sigma \).
      theta - The parameter \( \theta \).
      nu - The parameter \( \nu \).
      randomVariableFactory - The factory to be used to construct random variables.
    • VarianceGammaModel

      public VarianceGammaModel(RandomVariable initialValue, RandomVariable riskFreeRate, RandomVariable discountRate, RandomVariable sigma, RandomVariable theta, RandomVariable nu, RandomVariableFactory randomVariableFactory)
      Construct a Variance Gamma model with constant rates for the forward price (i.e. repo rate minus dividend yield) and for the discount curve.
      Parameters:
      initialValue - \( S_{0} \) - spot - initial value of S
      riskFreeRate - The constant risk free rate for the drift (repo rate of the underlying).
      discountRate - The constant rate used for discounting.
      sigma - The parameter \( \sigma \).
      theta - The parameter \( \theta \).
      nu - The parameter \( \nu \).
      randomVariableFactory - The factory to be used to construct random variables.
    • VarianceGammaModel

      public VarianceGammaModel(VarianceGammaModelDescriptor descriptor)
      Create the model from a descriptor.
      Parameters:
      descriptor - A descriptor of the model.
    • VarianceGammaModel

      public VarianceGammaModel(double initialValue, DiscountCurve discountCurveForForwardRate, DiscountCurve discountCurveForDiscountRate, double sigma, double theta, double nu, RandomVariableFactory randomVariableFactory)
      Construct a Variance Gamma model with discount curves for the forward price (i.e. repo rate minus dividend yield) and for discounting.
      Parameters:
      initialValue - \( S_{0} \) - spot - 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
      sigma - The parameter \( \sigma \).
      theta - The parameter \( \theta \).
      nu - The parameter \( \nu \).
      randomVariableFactory - The factory to be used to construct random variables.
    • VarianceGammaModel

      public VarianceGammaModel(double initialValue, DiscountCurve discountCurveForForwardRate, DiscountCurve discountCurveForDiscountRate, double sigma, double theta, double nu)
      Construct a Variance Gamma model with discount curves for the forward price (i.e. repo rate minus dividend yield) and for discounting.
      Parameters:
      initialValue - \( S_{0} \) - spot - 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
      sigma - The parameter \( \sigma \).
      theta - The parameter \( \theta \).
      nu - The parameter \( \nu \).
    • VarianceGammaModel

      public VarianceGammaModel(double initialValue, double riskFreeRate, double discountRate, double sigma, double theta, double nu)
      Construct a Variance Gamma model with constant rates for the forward price (i.e. repo rate minus dividend yield) and for the discount curve.
      Parameters:
      initialValue - \( S_{0} \) - spot - initial value of S
      riskFreeRate - The constant risk free rate for the drift (repo rate of the underlying).
      discountRate - The constant rate used for discounting.
      sigma - The parameter \( \sigma \).
      theta - The parameter \( \theta \).
      nu - The parameter \( \nu \).
    • VarianceGammaModel

      public VarianceGammaModel(double initialValue, double riskFreeRate, double sigma, double theta, double nu)
      Construct a Variance Gamma model with constant rates for the forward price (i.e. repo rate minus dividend yield) and for the discount curve.
      Parameters:
      initialValue - \( S_{0} \) - spot - initial value of S
      riskFreeRate - The constant risk free rate for the drift (repo rate of the underlying).
      sigma - The parameter \( \sigma \).
      theta - The parameter \( \theta \).
      nu - The parameter \( \nu \).
  • Method Details

    • applyStateSpaceTransform

      public RandomVariable applyStateSpaceTransform(MonteCarloProcess process, int timeIndex, int componentIndex, RandomVariable randomVariable)
      Description copied from interface: ProcessModel
      Applies the state space transform fi to the given state random variable such that Yi → fi(Yi) =: Xi.
      Parameters:
      process - The discretization process generating this model. The process provides call backs for TimeDiscretization and allows calls to getProcessValue for timeIndices less or equal the given one.
      timeIndex - The time index (related to the model times discretization).
      componentIndex - The component index i.
      randomVariable - The state random variable Yi.
      Returns:
      New random variable holding the result of the state space transformation.
    • applyStateSpaceTransformInverse

      public RandomVariable applyStateSpaceTransformInverse(MonteCarloProcess process, int timeIndex, int componentIndex, RandomVariable randomVariable)
      Description copied from interface: ProcessModel
      Applies the inverse state space transform f-1i to the given random variable such that Xi → f-1i(Xi) =: Yi.
      Parameters:
      process - The discretization process generating this model. The process provides call backs for TimeDiscretization and allows calls to getProcessValue for timeIndices less or equal the given one.
      timeIndex - The time index (related to the model times discretization).
      componentIndex - The component index i.
      randomVariable - The state random variable Xi.
      Returns:
      New random variable holding the result of the state space transformation.
    • getInitialState

      public RandomVariable[] getInitialState(MonteCarloProcess process)
      Description copied from interface: ProcessModel
      Returns the initial value of the state variable of the process Y, not to be confused with the initial value of the model X (which is the state space transform applied to this state value.
      Parameters:
      process - The discretization process generating this model. The process provides call backs for TimeDiscretization and allows calls to getProcessValue for timeIndices less or equal the given one.
      Returns:
      The initial value of the state variable of the process Y(t=0).
    • getNumeraire

      public RandomVariable getNumeraire(MonteCarloProcess process, double time)
      Description copied from interface: ProcessModel
      Return the numeraire at a given time index. Note: The random variable returned is a defensive copy and may be modified.
      Parameters:
      process - The discretization process generating this model. The process provides call backs for TimeDiscretization and allows calls to getProcessValue for timeIndices less or equal the given one.
      time - The time t for which the numeraire N(t) should be returned.
      Returns:
      The numeraire at the specified time as RandomVariable
    • getDrift

      public RandomVariable[] getDrift(MonteCarloProcess process, int timeIndex, RandomVariable[] realizationAtTimeIndex, RandomVariable[] realizationPredictor)
      Description copied from interface: ProcessModel
      This method has to be implemented to return the drift, i.e. the coefficient vector
      μ = (μ1, ..., μn) such that X = f(Y) and
      dYj = μj dt + λ1,j dW1 + ... + λm,j dWm
      in an m-factor model. Here j denotes index of the component of the resulting process. Since the model is provided only on a time discretization, the method may also (should try to) return the drift as \( \frac{1}{t_{i+1}-t_{i}} \int_{t_{i}}^{t_{i+1}} \mu(\tau) \mathrm{d}\tau \).
      Parameters:
      process - The discretization process generating this model. The process provides call backs for TimeDiscretization and allows calls to getProcessValue for timeIndices less or equal the given one.
      timeIndex - The time index (related to the model times discretization).
      realizationAtTimeIndex - The given realization at timeIndex
      realizationPredictor - The given realization at timeIndex+1 or null if no predictor is available.
      Returns:
      The drift or average drift from timeIndex to timeIndex+1, i.e. \( \frac{1}{t_{i+1}-t_{i}} \int_{t_{i}}^{t_{i+1}} \mu(\tau) \mathrm{d}\tau \) (or a suitable approximation).
    • getFactorLoading

      public RandomVariable[] getFactorLoading(MonteCarloProcess process, int timeIndex, int componentIndex, RandomVariable[] realizationAtTimeIndex)
      Description copied from interface: ProcessModel
      This method has to be implemented to return the factor loadings, i.e. the coefficient vector
      λj = (λ1,j, ..., λm,j) such that X = f(Y) and
      dYj = μj dt + λ1,j dW1 + ... + λm,j dWm
      in an m-factor model. Here j denotes index of the component of the resulting process.
      Parameters:
      process - The discretization process generating this model. The process provides call backs for TimeDiscretization and allows calls to getProcessValue for timeIndices less or equal the given one.
      timeIndex - The time index (related to the model times discretization).
      componentIndex - The index j of the driven component.
      realizationAtTimeIndex - The realization of X at the time corresponding to timeIndex (in order to implement local and stochastic volatlity models).
      Returns:
      The factor loading for given factor and component.
    • getNumberOfComponents

      public int getNumberOfComponents()
      Description copied from interface: ProcessModel
      Returns the number of components
      Returns:
      The number of components
    • getNumberOfFactors

      public int getNumberOfFactors()
      Description copied from interface: ProcessModel
      Returns the number of factors m, i.e., the number of independent Brownian drivers.
      Returns:
      The number of factors.
    • getRandomVariableForConstant

      public RandomVariable getRandomVariableForConstant(double value)
      Description copied from interface: ProcessModel
      Return a random variable initialized with a constant using the models random variable factory.
      Parameters:
      value - The constant value.
      Returns:
      A new random variable initialized with a constant value.
    • getCloneWithModifiedData

      public ProcessModel getCloneWithModifiedData(Map<String,Object> dataModified) throws CalculationException
      Description copied from interface: ProcessModel
      Returns a clone of this model where the specified properties have been modified. Note that there is no guarantee that a model reacts on a specification of a properties in the parameter map dataModified. If data is provided which is ignored by the model no exception may be thrown.
      Parameters:
      dataModified - Key-value-map of parameters to modify.
      Returns:
      A clone of this model (or this model if no parameter was modified).
      Throws:
      CalculationException - Thrown when the model could not be created.
    • getDiscountCurveForForwardRate

      public DiscountCurve getDiscountCurveForForwardRate()
      Returns:
      the discountCurveForForwardRate
    • getRiskFreeRate

      public RandomVariable getRiskFreeRate()
      Returns:
      the riskFreeRate
    • getDiscountCurveForDiscountRate

      public DiscountCurve getDiscountCurveForDiscountRate()
      Returns:
      the discountCurveForDiscountRate
    • getDiscountRate

      public RandomVariable getDiscountRate()
      Returns:
      the discountRate
    • getSigma

      public RandomVariable getSigma()
      Returns:
      the sigma
    • getTheta

      public RandomVariable getTheta()
      Returns:
      the theta
    • getNu

      public RandomVariable getNu()
      Returns:
      the nu
    • toString

      public String toString()
      Overrides:
      toString in class Object