Class FDMMertonModel
- All Implemented Interfaces:
FiniteDifferenceBoundary, FiniteDifferenceEquityModel, FiniteDifferenceModel, 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 Summary
ConstructorsConstructorDescriptionFDMMertonModel(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.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.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.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.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.FDMMertonModel(double initialValue, DiscountCurve riskFreeCurve, double volatility, MertonJumpComponent jumpComponent, SpaceTimeDiscretization spaceTimeDiscretization) Creates a finite-difference Merton model assuming zero dividend yield.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.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. -
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[]Returns the initial state vector of the model.Returns the optional jump component of the infinitesimal generator.Returns the Merton jump component.Returns the risk-free discount curve used for pricing.Returns the space-time discretization used by this finite difference model.doubleReturns the diffusion volatility.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface FiniteDifferenceEquityModel
getDividendYieldCurves
-
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
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()Description copied from interface:FiniteDifferenceEquityModelReturns 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 belog(S0)rather thanS0.- Specified by:
getInitialValuein interfaceFiniteDifferenceEquityModel- Returns:
- The initial state vector.
-
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.
-
getJumpComponent
Description copied from interface:FiniteDifferenceEquityModelReturns the optional jump component of the infinitesimal generator.The default implementation returns
Optional.empty(), corresponding to a purely diffusive model.If present, the returned
JumpComponentprovides the data needed to assemble the non-local jump part of the generator. The local coefficients returned byFiniteDifferenceEquityModel.getDrift(double, double...)andFiniteDifferenceEquityModel.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 formintegral [ 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:
getJumpComponentin interfaceFiniteDifferenceEquityModel- Returns:
- An
Optionalcontaining the jump component of the infinitesimal generator, orOptional.empty()if the model has no jump part.
-
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.
-
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.
-
getVolatility
public double getVolatility()Returns the diffusion volatility.- Returns:
- The diffusion volatility.
-
getMertonJumpComponent
Returns the Merton jump component.- Returns:
- The Merton jump component.
-