Class FDMBlackScholesModel

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

public class FDMBlackScholesModel extends Object implements FiniteDifferenceEquityModel
Finite difference model for option pricing under the Black-Scholes framework for European and American options.

The model supports both the classical constant-volatility Black-Scholes case and the local-volatility case. Constant volatility is represented internally as a ConstantLocalVolatility.

Author:
Alessandro Gnoatto (this version), Christian Fries, Ralph Rudd, Jorg Kienitz (original version)
  • Constructor Details

    • FDMBlackScholesModel

      public FDMBlackScholesModel(double initialValue, DiscountCurve riskFreeCurve, DiscountCurve dividendYieldCurve, double volatility, SpaceTimeDiscretization spaceTimeDiscretization)
      Constructs a Black-Scholes finite difference model for option pricing.
      Parameters:
      initialValue - Initial spot price.
      riskFreeCurve - Risk-free discount curve.
      dividendYieldCurve - Dividend yield discount curve.
      volatility - Constant volatility of the underlying asset.
      spaceTimeDiscretization - Grid object defining the spatial discretization.
    • FDMBlackScholesModel

      public FDMBlackScholesModel(double initialValue, DiscountCurve riskFreeCurve, DiscountCurve dividendYieldCurve, LocalVolatility volatility, SpaceTimeDiscretization spaceTimeDiscretization)
      Constructs a local-volatility finite difference model for option pricing.
      Parameters:
      initialValue - Initial spot price.
      riskFreeCurve - Risk-free discount curve.
      dividendYieldCurve - Dividend yield discount curve.
      volatility - Local volatility function.
      spaceTimeDiscretization - Grid object defining the spatial discretization.
    • FDMBlackScholesModel

      public FDMBlackScholesModel(double initialValue, DiscountCurve riskFreeCurve, double volatility, SpaceTimeDiscretization spaceTimeDiscretization)
      Constructs a Black-Scholes finite difference model for option pricing without dividend yield.
      Parameters:
      initialValue - Initial spot price.
      riskFreeCurve - Risk-free discount curve.
      volatility - Constant volatility of the underlying asset.
      spaceTimeDiscretization - Grid object defining the spatial discretization.
    • FDMBlackScholesModel

      public FDMBlackScholesModel(double initialValue, DiscountCurve riskFreeCurve, LocalVolatility volatility, SpaceTimeDiscretization spaceTimeDiscretization)
      Constructs a local-volatility finite difference model for option pricing without dividend yield.
      Parameters:
      initialValue - Initial spot price.
      riskFreeCurve - Risk-free discount curve.
      volatility - Local volatility function.
      spaceTimeDiscretization - Grid object defining the spatial discretization.
    • FDMBlackScholesModel

      public FDMBlackScholesModel(double initialValue, double riskFreeRate, double dividendYieldRate, double volatility, SpaceTimeDiscretization spaceTimeDiscretization)
      Constructs a Black-Scholes finite difference model for option pricing.
      Parameters:
      initialValue - Initial spot price.
      riskFreeRate - Constant risk-free rate.
      dividendYieldRate - Constant dividend yield rate.
      volatility - Constant volatility of the underlying asset.
      spaceTimeDiscretization - Grid object defining the spatial discretization.
    • FDMBlackScholesModel

      public FDMBlackScholesModel(double initialValue, double riskFreeRate, double dividendYieldRate, LocalVolatility volatility, SpaceTimeDiscretization spaceTimeDiscretization)
      Constructs a local-volatility finite difference model for option pricing.
      Parameters:
      initialValue - Initial spot price.
      riskFreeRate - Constant risk-free rate.
      dividendYieldRate - Constant dividend yield rate.
      volatility - Local volatility function.
      spaceTimeDiscretization - Grid object defining the spatial discretization.
    • FDMBlackScholesModel

      public FDMBlackScholesModel(double initialValue, double riskFreeRate, double volatility, SpaceTimeDiscretization spaceTimeDiscretization)
      Constructs a Black-Scholes finite difference model for option pricing without dividend yield.
      Parameters:
      initialValue - Initial spot price.
      riskFreeRate - Constant risk-free rate.
      volatility - Constant volatility of the underlying asset.
      spaceTimeDiscretization - Grid object defining the spatial discretization.
    • FDMBlackScholesModel

      public FDMBlackScholesModel(double initialValue, double riskFreeRate, LocalVolatility volatility, SpaceTimeDiscretization spaceTimeDiscretization)
      Constructs a local-volatility finite difference model for option pricing without dividend yield.
      Parameters:
      initialValue - Initial spot price.
      riskFreeRate - Constant risk-free rate.
      volatility - Local volatility function.
      spaceTimeDiscretization - Grid object defining the spatial 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.
    • getInitialValue

      public double[] getInitialValue()
      Returns the initial value, i.e. the spot value, of the underlying.
      Specified by:
      getInitialValue in interface FiniteDifferenceEquityModel
      Returns:
      The initial value.
    • 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.
    • getVolatility

      public LocalVolatility getVolatility()
      Returns the volatility function.
      Returns:
      The local volatility function.
    • getConstantVolatility

      public double getConstantVolatility()
      Returns the constant volatility if the model has been constructed with a constant volatility.
      Returns:
      The constant volatility.
    • 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.
    • 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.