Class FDMSabrModel
- All Implemented Interfaces:
FiniteDifferenceBoundary, FiniteDifferenceEquityModel, FiniteDifferenceModel, Model
The state variables are (S, alpha) where
Sis the spot,alphais the stochastic volatility factor.
Under the risk-neutral dynamics with dividend yield, the model is given by
dS = (r - q) S dt + alpha S^beta dW_1 d alpha = nu alpha ( rho dW_1 + sqrt(1-rho^2) dW_2 ).
The methods getDrift(double, double...) and
getFactorLoading(double, double...) follow the conventions used in
FiniteDifferenceEquityModel.
Although one may formulate the PDE in transformed coordinates such as
log(S), this class deliberately works in the variables (S,
alpha)
so that payoff functions can continue to use the spot directly.
Boundary conditions are delegated through FDBoundaryFactory.
- Author:
- Alessandro Gnoatto
-
Constructor Summary
ConstructorsConstructorDescriptionFDMSabrModel(double initialSpot, double initialAlpha, double riskFreeRate, double dividendYieldRate, double beta, double nu, double rho, SpaceTimeDiscretization spaceTimeDiscretization) Constructs a SABR finite difference model from constant rates.FDMSabrModel(double initialSpot, double initialAlpha, double riskFreeRate, double beta, double nu, double rho, SpaceTimeDiscretization spaceTimeDiscretization) Constructs a SABR finite difference model from a constant risk-free rate and zero dividend yield.FDMSabrModel(double initialSpot, double initialAlpha, DiscountCurve riskFreeCurve, double beta, double nu, double rho, SpaceTimeDiscretization spaceTimeDiscretization) Constructs a SABR finite difference model with zero dividend yield.FDMSabrModel(double initialSpot, double initialAlpha, DiscountCurve riskFreeCurve, DiscountCurve dividendYieldCurve, double beta, double nu, double rho, SpaceTimeDiscretization spaceTimeDiscretization) Constructs a SABR finite difference model from discount curves. -
Method Summary
Modifier and TypeMethodDescriptiondoublegetBeta()Returns the SABR elasticity parameter.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.double[][]getCovariance(double time, double... stateVariables) Convenience method returning the covariance matrixa = B B^T, derived fromgetFactorLoading(double, double...).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.doubleReturns the initial volatility factor.doubleReturns the initial spot.double[]Returns the initial value of the state vector(S, alpha).doublegetNu()Returns the SABR volatility-of-volatility parameter.doublegetRho()Returns the correlation between spot and volatility Brownian motions.Returns the risk-free discount curve used for pricing.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
-
FDMSabrModel
public FDMSabrModel(double initialSpot, double initialAlpha, DiscountCurve riskFreeCurve, DiscountCurve dividendYieldCurve, double beta, double nu, double rho, SpaceTimeDiscretization spaceTimeDiscretization) Constructs a SABR finite difference model from discount curves.- Parameters:
initialSpot- Initial spot price.initialAlpha- Initial volatility factor.riskFreeCurve- Risk-free discount curve.dividendYieldCurve- Dividend yield discount curve.beta- SABR elasticity parameter.nu- SABR volatility-of-volatility parameter.rho- Correlation between spot and volatility Brownian motions.spaceTimeDiscretization- Space-time discretization.
-
FDMSabrModel
public FDMSabrModel(double initialSpot, double initialAlpha, DiscountCurve riskFreeCurve, double beta, double nu, double rho, SpaceTimeDiscretization spaceTimeDiscretization) Constructs a SABR finite difference model with zero dividend yield.- Parameters:
initialSpot- Initial spot price.initialAlpha- Initial volatility factor.riskFreeCurve- Risk-free discount curve.beta- SABR elasticity parameter.nu- SABR volatility-of-volatility parameter.rho- Correlation between spot and volatility Brownian motions.spaceTimeDiscretization- Space-time discretization.
-
FDMSabrModel
public FDMSabrModel(double initialSpot, double initialAlpha, double riskFreeRate, double dividendYieldRate, double beta, double nu, double rho, SpaceTimeDiscretization spaceTimeDiscretization) Constructs a SABR finite difference model from constant rates.- Parameters:
initialSpot- Initial spot price.initialAlpha- Initial volatility factor.riskFreeRate- Constant risk-free rate.dividendYieldRate- Constant dividend yield rate.beta- SABR elasticity parameter.nu- SABR volatility-of-volatility parameter.rho- Correlation between spot and volatility Brownian motions.spaceTimeDiscretization- Space-time discretization.
-
FDMSabrModel
public FDMSabrModel(double initialSpot, double initialAlpha, double riskFreeRate, double beta, double nu, double rho, SpaceTimeDiscretization spaceTimeDiscretization) Constructs a SABR finite difference model from a constant risk-free rate and zero dividend yield.- Parameters:
initialSpot- Initial spot price.initialAlpha- Initial volatility factor.riskFreeRate- Constant risk-free rate.beta- SABR elasticity parameter.nu- SABR volatility-of-volatility parameter.rho- Correlation between spot and volatility Brownian motions.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()Returns the initial value of the state vector(S, alpha).- Specified by:
getInitialValuein interfaceFiniteDifferenceEquityModel- Returns:
- The initial state vector.
-
getInitialSpot
public double getInitialSpot()Returns the initial spot.- Returns:
- The initial spot.
-
getInitialAlpha
public double getInitialAlpha()Returns the initial volatility factor.- Returns:
- The initial volatility factor.
-
getBeta
public double getBeta()Returns the SABR elasticity parameter.- Returns:
- The parameter
beta.
-
getNu
public double getNu()Returns the SABR volatility-of-volatility parameter.- Returns:
- The parameter
nu.
-
getRho
public double getRho()Returns the correlation between spot and volatility Brownian motions.- Returns:
- The parameter
rho.
-
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.
-
getCovariance
public double[][] getCovariance(double time, double... stateVariables) Convenience method returning the covariance matrixa = B B^T, derived fromgetFactorLoading(double, double...).- Parameters:
time- Evaluation time.stateVariables- State variables.- Returns:
- The covariance 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.
-