Class FDMCevModel
- All Implemented Interfaces:
FiniteDifferenceBoundary, FiniteDifferenceEquityModel, FiniteDifferenceModel, Model
Under the risk-neutral measure the CEV dynamics are typically written as
dS_t = (r(t) - q(t)) S_t dt + sigma * S_t^beta dW_t.
In this class, getDrift(double, double...) returns the
absolute drift,
and getFactorLoading(double, double...) returns the absolute
factor loading.
Hence, for CEV we return
sigma * S^(beta).
- Author:
- Alessandro Gnoatto
-
Constructor Summary
ConstructorsConstructorDescriptionFDMCevModel(double initialValue, double riskFreeRate, double dividendYieldRate, double sigma, double beta, SpaceTimeDiscretization spaceTimeDiscretization) Creates a CEV model instance using constant ratesrandq.FDMCevModel(double initialValue, double riskFreeRate, double sigma, double beta, SpaceTimeDiscretization spaceTimeDiscretization) Creates a CEV model instance using constantrand assuming zero dividend yield (q = 0).FDMCevModel(double initialValue, DiscountCurve riskFreeCurve, double sigma, double beta, SpaceTimeDiscretization spaceTimeDiscretization) Creates a CEV model instance assuming zero dividend yield (q = 0), consistent with the constructor style ofFDMBlackScholesModel.FDMCevModel(double initialValue, DiscountCurve riskFreeCurve, DiscountCurve dividendYieldCurve, double sigma, double beta, SpaceTimeDiscretization spaceTimeDiscretization) Creates a CEV model instance using explicit discount curves forrandq. -
Method Summary
Modifier and TypeMethodDescriptiondoublegetBeta()Returns the CEV elasticity parameterbeta.getBoundaryConditionsAtLowerBoundary(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[]Returns the initial spotS(0).Returns the risk-free discount curve used for pricing.doublegetSigma()Returns the CEV volatility scale parametersigma.Returns the space-time discretization used by this finite difference model.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface FiniteDifferenceEquityModel
getDividendYieldCurves, getJumpComponent
-
Constructor Details
-
FDMCevModel
public FDMCevModel(double initialValue, DiscountCurve riskFreeCurve, DiscountCurve dividendYieldCurve, double sigma, double beta, SpaceTimeDiscretization spaceTimeDiscretization) Creates a CEV model instance using explicit discount curves forrandq.- Parameters:
initialValue- Initial spotS(0).riskFreeCurve- Risk-free discount curve.dividendYieldCurve- Dividend yield discount curve.sigma- CEV volatility scale parametersigma.beta- CEV elasticity parameterbeta.spaceTimeDiscretization- The space-time discretization.
-
FDMCevModel
public FDMCevModel(double initialValue, DiscountCurve riskFreeCurve, double sigma, double beta, SpaceTimeDiscretization spaceTimeDiscretization) Creates a CEV model instance assuming zero dividend yield (q = 0), consistent with the constructor style ofFDMBlackScholesModel.- Parameters:
initialValue- Initial spotS(0).riskFreeCurve- Risk-free discount curve.sigma- CEV volatility scale parametersigma.beta- CEV elasticity parameterbeta.spaceTimeDiscretization- The space-time discretization.
-
FDMCevModel
public FDMCevModel(double initialValue, double riskFreeRate, double dividendYieldRate, double sigma, double beta, SpaceTimeDiscretization spaceTimeDiscretization) Creates a CEV model instance using constant ratesrandq.- Parameters:
initialValue- Initial spotS(0).riskFreeRate- Constant risk-free rater.dividendYieldRate- Constant dividend yieldq.sigma- CEV volatility scale parametersigma.beta- CEV elasticity parameterbeta.spaceTimeDiscretization- The space-time discretization.
-
FDMCevModel
public FDMCevModel(double initialValue, double riskFreeRate, double sigma, double beta, SpaceTimeDiscretization spaceTimeDiscretization) Creates a CEV model instance using constantrand assuming zero dividend yield (q = 0).- Parameters:
initialValue- Initial spotS(0).riskFreeRate- Constant risk-free rater.sigma- CEV volatility scale parametersigma.beta- CEV elasticity parameterbeta.spaceTimeDiscretization- The 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()Returns the initial spotS(0).- Specified by:
getInitialValuein interfaceFiniteDifferenceEquityModel- Returns:
- The initial spot.
-
getSigma
public double getSigma()Returns the CEV volatility scale parametersigma.- Returns:
sigma.
-
getBeta
public double getBeta()Returns the CEV elasticity parameterbeta.- Returns:
beta.
-
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.
-