Class FDMMertonModel

java.lang.Object
net.finmath.finitedifference.assetderivativevaluation.models.FDMMertonModel
All Implemented Interfaces:
FiniteDifferenceBoundary, FiniteDifferenceEquityModel, FiniteDifferenceModel, Model

public class FDMMertonModel extends Object implements FiniteDifferenceEquityModel
Finite-difference model for option pricing under the Merton jump-diffusion model.

The local part of the dynamics is identical to Black-Scholes:

dS_t = (r(t) - q(t)) S_t dt + sigma S_t dW_t + jump part.

In line with the jump-interface convention adopted in this framework, getDrift(double, double...) returns only the local drift (r-q)S, getFactorLoading(double, double...) returns the local diffusion loading sigma S, and the non-local jump contribution is supplied separately through getJumpComponent().

The jump component is represented by a MertonJumpComponent, acting on the first state variable through multiplicative jumps of the form S -> S exp(Y).

Author:
Alessandro Gnoatto
  • Constructor Details

    • FDMMertonModel

      public FDMMertonModel(double initialValue, DiscountCurve riskFreeCurve, DiscountCurve dividendYieldCurve, double volatility, MertonJumpComponent jumpComponent, SpaceTimeDiscretization spaceTimeDiscretization)
      Creates a finite-difference Merton model from discount curves and an explicit jump component.
      Parameters:
      initialValue - Initial spot value.
      riskFreeCurve - Risk-free discount curve.
      dividendYieldCurve - Dividend yield discount curve.
      volatility - Diffusion volatility.
      jumpComponent - Merton jump component.
      spaceTimeDiscretization - Space-time discretization.
    • FDMMertonModel

      public FDMMertonModel(double initialValue, DiscountCurve riskFreeCurve, DiscountCurve dividendYieldCurve, double volatility, double jumpIntensity, double jumpMean, double jumpStdDev, double lowerIntegrationBound, double upperIntegrationBound, SpaceTimeDiscretization spaceTimeDiscretization)
      Creates a finite-difference Merton model from discount curves and jump parameters.
      Parameters:
      initialValue - Initial spot value.
      riskFreeCurve - Risk-free discount curve.
      dividendYieldCurve - Dividend yield discount curve.
      volatility - Diffusion volatility.
      jumpIntensity - Jump intensity.
      jumpMean - Mean of the log-jump size.
      jumpStdDev - Standard deviation of the log-jump size.
      lowerIntegrationBound - Lower integration bound for the log-jump variable.
      upperIntegrationBound - Upper integration bound for the log-jump variable.
      spaceTimeDiscretization - Space-time discretization.
    • FDMMertonModel

      public FDMMertonModel(double initialValue, DiscountCurve riskFreeCurve, double volatility, MertonJumpComponent jumpComponent, SpaceTimeDiscretization spaceTimeDiscretization)
      Creates a finite-difference Merton model assuming zero dividend yield.
      Parameters:
      initialValue - Initial spot value.
      riskFreeCurve - Risk-free discount curve.
      volatility - Diffusion volatility.
      jumpComponent - Merton jump component.
      spaceTimeDiscretization - Space-time discretization.
    • FDMMertonModel

      public FDMMertonModel(double initialValue, DiscountCurve riskFreeCurve, double volatility, double jumpIntensity, double jumpMean, double jumpStdDev, double lowerIntegrationBound, double upperIntegrationBound, SpaceTimeDiscretization spaceTimeDiscretization)
      Creates a finite-difference Merton model assuming zero dividend yield.
      Parameters:
      initialValue - Initial spot value.
      riskFreeCurve - Risk-free discount curve.
      volatility - Diffusion volatility.
      jumpIntensity - Jump intensity.
      jumpMean - Mean of the log-jump size.
      jumpStdDev - Standard deviation of the log-jump size.
      lowerIntegrationBound - Lower integration bound for the log-jump variable.
      upperIntegrationBound - Upper integration bound for the log-jump variable.
      spaceTimeDiscretization - Space-time discretization.
    • FDMMertonModel

      public FDMMertonModel(double initialValue, double riskFreeRate, double dividendYieldRate, double volatility, MertonJumpComponent jumpComponent, SpaceTimeDiscretization spaceTimeDiscretization)
      Creates a finite-difference Merton model from flat rates and an explicit jump component.
      Parameters:
      initialValue - Initial spot value.
      riskFreeRate - Constant risk-free rate.
      dividendYieldRate - Constant dividend yield rate.
      volatility - Diffusion volatility.
      jumpComponent - Merton jump component.
      spaceTimeDiscretization - Space-time discretization.
    • FDMMertonModel

      public FDMMertonModel(double initialValue, double riskFreeRate, double dividendYieldRate, double volatility, double jumpIntensity, double jumpMean, double jumpStdDev, double lowerIntegrationBound, double upperIntegrationBound, SpaceTimeDiscretization spaceTimeDiscretization)
      Creates a finite-difference Merton model from flat rates and jump parameters.
      Parameters:
      initialValue - Initial spot value.
      riskFreeRate - Constant risk-free rate.
      dividendYieldRate - Constant dividend yield rate.
      volatility - Diffusion volatility.
      jumpIntensity - Jump intensity.
      jumpMean - Mean of the log-jump size.
      jumpStdDev - Standard deviation of the log-jump size.
      lowerIntegrationBound - Lower integration bound for the log-jump variable.
      upperIntegrationBound - Upper integration bound for the log-jump variable.
      spaceTimeDiscretization - Space-time discretization.
    • FDMMertonModel

      public FDMMertonModel(double initialValue, double riskFreeRate, double volatility, MertonJumpComponent jumpComponent, SpaceTimeDiscretization spaceTimeDiscretization)
      Creates a finite-difference Merton model from a flat risk-free rate and zero dividend yield.
      Parameters:
      initialValue - Initial spot value.
      riskFreeRate - Constant risk-free rate.
      volatility - Diffusion volatility.
      jumpComponent - Merton jump component.
      spaceTimeDiscretization - Space-time discretization.
    • FDMMertonModel

      public FDMMertonModel(double initialValue, double riskFreeRate, double volatility, double jumpIntensity, double jumpMean, double jumpStdDev, double lowerIntegrationBound, double upperIntegrationBound, SpaceTimeDiscretization spaceTimeDiscretization)
      Creates a finite-difference Merton model from a flat risk-free rate and zero dividend yield.
      Parameters:
      initialValue - Initial spot value.
      riskFreeRate - Constant risk-free rate.
      volatility - Diffusion volatility.
      jumpIntensity - Jump intensity.
      jumpMean - Mean of the log-jump size.
      jumpStdDev - Standard deviation of the log-jump size.
      lowerIntegrationBound - Lower integration bound for the log-jump variable.
      upperIntegrationBound - Upper integration bound for the log-jump variable.
      spaceTimeDiscretization - Space-time discretization.
  • Method Details

    • getRiskFreeCurve

      public DiscountCurve getRiskFreeCurve()
      Description copied from interface: FiniteDifferenceEquityModel
      Returns the risk-free discount curve used for pricing.
      Specified by:
      getRiskFreeCurve in interface FiniteDifferenceEquityModel
      Returns:
      The risk-free discount curve.
    • getDividendYieldCurve

      public DiscountCurve getDividendYieldCurve()
      Description copied from interface: FiniteDifferenceEquityModel
      Returns the dividend-yield discount curve.

      This is the legacy single-asset accessor and remains part of the interface to preserve backward compatibility with the current code base.

      For true multi-asset models with one dividend curve per underlying, prefer FiniteDifferenceEquityModel.getDividendYieldCurves(). Such models may override this method with a convention suitable for backward compatibility.

      Specified by:
      getDividendYieldCurve in interface FiniteDifferenceEquityModel
      Returns:
      The dividend-yield discount curve.
    • getInitialValue

      public double[] getInitialValue()
      Description copied from interface: FiniteDifferenceEquityModel
      Returns the initial state vector of the model.

      The returned values must be consistent with the state variables used by the PDE. For example, if the first spatial coordinate is log(S), then the first component should be log(S0) rather than S0.

      Specified by:
      getInitialValue in interface FiniteDifferenceEquityModel
      Returns:
      The initial state vector.
    • getDrift

      public double[] getDrift(double time, double... stateVariables)
      Description copied from interface: FiniteDifferenceEquityModel
      Returns the drift vector of the model state variables.

      The returned coefficients must be expressed in the same coordinates as the PDE state variables used by the finite-difference solver.

      If the state vector is X = (X1, ..., Xn), then this method returns the vector mu(t, X) in

      dX_i(t) = mu_i(t, X_t) dt + ....

      Specified by:
      getDrift in interface FiniteDifferenceEquityModel
      Parameters:
      time - The evaluation time.
      stateVariables - The current values of the model state variables.
      Returns:
      The drift vector.
    • getFactorLoading

      public double[][] getFactorLoading(double time, double... stateVariables)
      Description copied from interface: FiniteDifferenceEquityModel
      Returns the factor-loading matrix of the model state variables.

      The returned coefficients must be expressed in the same coordinates as the PDE state variables used by the finite-difference solver.

      If the state vector is X = (X1, ..., Xn), then this method returns the matrix b(t, X) in

      dX_i(t) = mu_i(t, X_t) dt + sum_j b_{i,j}(t, X_t) dW_j(t).

      Specified by:
      getFactorLoading in interface FiniteDifferenceEquityModel
      Parameters:
      time - The evaluation time.
      stateVariables - The current values of the model state variables.
      Returns:
      The factor-loading matrix.
    • getJumpComponent

      public Optional<JumpComponent> getJumpComponent()
      Description copied from interface: FiniteDifferenceEquityModel
      Returns the optional jump component of the infinitesimal generator.

      The default implementation returns Optional.empty(), corresponding to a purely diffusive model.

      If present, the returned JumpComponent provides the data needed to assemble the non-local jump part of the generator. The local coefficients returned by FiniteDifferenceEquityModel.getDrift(double, double...) and FiniteDifferenceEquityModel.getFactorLoading(double, double...) keep their current meaning and should remain consistent with the PDE state variables used by the finite-difference discretization.

      In particular, under the stock-coordinate convention intended for jump models in this framework, FiniteDifferenceEquityModel.getDrift(double, double...) should continue to return the drift of the local first-order term, while the jump component defines the non-local operator in compensated form.

      For a one-dimensional spot variable S, the jump contribution is understood in the form

      integral [ f(S exp(y)) - f(S) - S (exp(y) - 1) f'(S) ] nu(dy).
      

      The interpretation of the jump data must remain consistent with the chosen PDE state variables.

      Specified by:
      getJumpComponent in interface FiniteDifferenceEquityModel
      Returns:
      An Optional containing the jump component of the infinitesimal generator, or Optional.empty() if the model has no jump part.
    • getSpaceTimeDiscretization

      public SpaceTimeDiscretization getSpaceTimeDiscretization()
      Description copied from interface: FiniteDifferenceModel
      Returns the space-time discretization used by this finite difference model.

      The discretization defines the grid in both time and space on which the PDE approximation is constructed.

      Specified by:
      getSpaceTimeDiscretization in interface FiniteDifferenceModel
      Returns:
      The SpaceTimeDiscretization used by this model.
    • getBoundaryConditionsAtLowerBoundary

      public BoundaryCondition[] getBoundaryConditionsAtLowerBoundary(FiniteDifferenceEquityProduct product, double time, double... riskFactors)
      Description copied from interface: FiniteDifferenceBoundary
      Returns the boundary conditions at the lower boundary.

      The returned array is indexed by state-variable dimension.

      Specified by:
      getBoundaryConditionsAtLowerBoundary in interface FiniteDifferenceBoundary
      Parameters:
      product - The product being valued.
      time - The running time.
      riskFactors - The state variables specifying the boundary location.
      Returns:
      The lower-boundary conditions by dimension.
    • getBoundaryConditionsAtUpperBoundary

      public BoundaryCondition[] getBoundaryConditionsAtUpperBoundary(FiniteDifferenceEquityProduct product, double time, double... riskFactors)
      Description copied from interface: FiniteDifferenceBoundary
      Returns the boundary conditions at the upper boundary.

      The returned array is indexed by state-variable dimension.

      Specified by:
      getBoundaryConditionsAtUpperBoundary in interface FiniteDifferenceBoundary
      Parameters:
      product - The product being valued.
      time - The running time.
      riskFactors - The state variables specifying the boundary location.
      Returns:
      The upper-boundary conditions by dimension.
    • getCloneWithModifiedSpaceTimeDiscretization

      public FiniteDifferenceEquityModel getCloneWithModifiedSpaceTimeDiscretization(SpaceTimeDiscretization newSpaceTimeDiscretization)
      Description copied from interface: FiniteDifferenceEquityModel
      Returns a clone of this model with a modified space-time discretization.

      The returned model should represent the same stochastic dynamics and market data as the original one, but on the provided discretization.

      Specified by:
      getCloneWithModifiedSpaceTimeDiscretization in interface FiniteDifferenceEquityModel
      Parameters:
      newSpaceTimeDiscretization - The new space-time discretization.
      Returns:
      A clone of this model with the modified discretization.
    • getVolatility

      public double getVolatility()
      Returns the diffusion volatility.
      Returns:
      The diffusion volatility.
    • getMertonJumpComponent

      public MertonJumpComponent getMertonJumpComponent()
      Returns the Merton jump component.
      Returns:
      The Merton jump component.