Class FDMBachelierModel
- All Implemented Interfaces:
FiniteDifferenceBoundary, FiniteDifferenceEquityModel, FiniteDifferenceModel, Model
The model assumes an arithmetic Brownian motion for the underlying:
dS(t) = (r(t) - q(t)) S(t) dt + sigma dW(t)
where r(t) is the risk-free rate, q(t) is the dividend yield,
and sigma is a
constant (normal) volatility.
This class follows the same design principles as the other finite-difference
equity model implementations:
it provides drift and factor loadings via getDrift(double, double...) and
getFactorLoading(double, double...), and delegates boundary values
to a boundary implementation
created through FDBoundaryFactory.
- Author:
- Alessandro Gnoatto
-
Constructor Summary
ConstructorsConstructorDescriptionFDMBachelierModel(double initialValue, double riskFreeRate, double dividendYieldRate, double volatility, SpaceTimeDiscretization spaceTimeDiscretization) Creates a Bachelier model from constant rates (flat curves).FDMBachelierModel(double initialValue, double riskFreeRate, double volatility, SpaceTimeDiscretization spaceTimeDiscretization) Convenience constructor from a constant risk-free rate (flat curve) andq = 0.FDMBachelierModel(double initialValue, DiscountCurve riskFreeCurve, double volatility, SpaceTimeDiscretization spaceTimeDiscretization) Convenience constructor without dividend yield curve (i.e.,q = 0).FDMBachelierModel(double initialValue, DiscountCurve riskFreeCurve, DiscountCurve dividendYieldCurve, double volatility, SpaceTimeDiscretization spaceTimeDiscretization) Creates a Bachelier model from discount curves. -
Method Summary
Modifier and TypeMethodDescriptiongetBoundaryConditionsAtLowerBoundary(FiniteDifferenceEquityProduct product, double time, double... riskFactors) Returns the boundary conditions at the lower boundary.getBoundaryConditionsAtUpperBoundary(FiniteDifferenceEquityProduct product, double time, double... riskFactors) Returns the boundary conditions at the upper boundary.getCloneWithModifiedSpaceTimeDiscretization(SpaceTimeDiscretization newSpaceTimeDiscretization) Returns a clone of this model with a modified space-time discretization.Returns the dividend-yield discount curve.double[]getDrift(double time, double... stateVariables) Returns the drift vector of the model state variables.double[][]getFactorLoading(double time, double... stateVariables) Returns the factor-loading matrix of the model state variables.double[]ReturnsS(0).Returns the risk-free discount curve used for pricing.Returns the space-time discretization used by this finite difference model.doubleReturns the normal volatilitysigma.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface FiniteDifferenceEquityModel
getDividendYieldCurves, getJumpComponent
-
Constructor Details
-
FDMBachelierModel
public FDMBachelierModel(double initialValue, DiscountCurve riskFreeCurve, DiscountCurve dividendYieldCurve, double volatility, SpaceTimeDiscretization spaceTimeDiscretization) Creates a Bachelier model from discount curves.- Parameters:
initialValue- Initial underlying valueS(0).riskFreeCurve- Risk-free discount curve.dividendYieldCurve- Dividend yield discount curve.volatility- Normal volatilitysigma.spaceTimeDiscretization- Space-time discretization.
-
FDMBachelierModel
public FDMBachelierModel(double initialValue, DiscountCurve riskFreeCurve, double volatility, SpaceTimeDiscretization spaceTimeDiscretization) Convenience constructor without dividend yield curve (i.e.,q = 0).- Parameters:
initialValue- Initial underlying valueS(0).riskFreeCurve- Risk-free discount curve.volatility- Normal volatilitysigma.spaceTimeDiscretization- Space-time discretization.
-
FDMBachelierModel
public FDMBachelierModel(double initialValue, double riskFreeRate, double dividendYieldRate, double volatility, SpaceTimeDiscretization spaceTimeDiscretization) Creates a Bachelier model from constant rates (flat curves).- Parameters:
initialValue- Initial underlying valueS(0).riskFreeRate- Constant risk-free rater.dividendYieldRate- Constant dividend yieldq.volatility- Normal volatilitysigma.spaceTimeDiscretization- Space-time discretization.
-
FDMBachelierModel
public FDMBachelierModel(double initialValue, double riskFreeRate, double volatility, SpaceTimeDiscretization spaceTimeDiscretization) Convenience constructor from a constant risk-free rate (flat curve) andq = 0.- Parameters:
initialValue- Initial underlying valueS(0).riskFreeRate- Constant risk-free rater.volatility- Normal volatilitysigma.spaceTimeDiscretization- Space-time discretization.
-
-
Method Details
-
getRiskFreeCurve
Description copied from interface:FiniteDifferenceEquityModelReturns the risk-free discount curve used for pricing.- Specified by:
getRiskFreeCurvein interfaceFiniteDifferenceEquityModel- Returns:
- The risk-free discount curve.
-
getDividendYieldCurve
Description copied from interface:FiniteDifferenceEquityModelReturns 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:
getDividendYieldCurvein interfaceFiniteDifferenceEquityModel- Returns:
- The dividend-yield discount curve.
-
getInitialValue
public double[] getInitialValue()ReturnsS(0).- Specified by:
getInitialValuein interfaceFiniteDifferenceEquityModel- Returns:
- Initial underlying value.
-
getVolatility
public double getVolatility()Returns the normal volatilitysigma.- Returns:
- Normal volatility.
-
getSpaceTimeDiscretization
Description copied from interface:FiniteDifferenceModelReturns 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:
getSpaceTimeDiscretizationin interfaceFiniteDifferenceModel- Returns:
- The
SpaceTimeDiscretizationused by this model.
-
getDrift
public double[] getDrift(double time, double... stateVariables) Description copied from interface:FiniteDifferenceEquityModelReturns 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 vectormu(t, X)indX_i(t) = mu_i(t, X_t) dt + ....- Specified by:
getDriftin interfaceFiniteDifferenceEquityModel- 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:FiniteDifferenceEquityModelReturns 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 matrixb(t, X)indX_i(t) = mu_i(t, X_t) dt + sum_j b_{i,j}(t, X_t) dW_j(t).- Specified by:
getFactorLoadingin interfaceFiniteDifferenceEquityModel- Parameters:
time- The evaluation time.stateVariables- The current values of the model state variables.- Returns:
- The factor-loading matrix.
-
getBoundaryConditionsAtLowerBoundary
public BoundaryCondition[] getBoundaryConditionsAtLowerBoundary(FiniteDifferenceEquityProduct product, double time, double... riskFactors) Description copied from interface:FiniteDifferenceBoundaryReturns the boundary conditions at the lower boundary.The returned array is indexed by state-variable dimension.
- Specified by:
getBoundaryConditionsAtLowerBoundaryin interfaceFiniteDifferenceBoundary- 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:FiniteDifferenceBoundaryReturns the boundary conditions at the upper boundary.The returned array is indexed by state-variable dimension.
- Specified by:
getBoundaryConditionsAtUpperBoundaryin interfaceFiniteDifferenceBoundary- 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:FiniteDifferenceEquityModelReturns 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:
getCloneWithModifiedSpaceTimeDiscretizationin interfaceFiniteDifferenceEquityModel- Parameters:
newSpaceTimeDiscretization- The new space-time discretization.- Returns:
- A clone of this model with the modified discretization.
-