net.finmath.montecarlo.interestrate.products
Class SwaptionAnalyticApproximation
- java.lang.Object
-
- net.finmath.montecarlo.AbstractMonteCarloProduct
-
- net.finmath.montecarlo.interestrate.products.AbstractLIBORMonteCarloProduct
-
- net.finmath.montecarlo.interestrate.products.SwaptionAnalyticApproximation
-
- All Implemented Interfaces:
- ProductInterface
public class SwaptionAnalyticApproximation extends AbstractLIBORMonteCarloProduct
This class implements an analytic swaption valuation formula under a LIBOR market model. The algorithm implemented here is the OIS discounting version of the algorithm described in ISBN 0470047224 (seeSwaptionSingleCurveAnalyticApproximation). The approximation assumes that the forward rates (LIBOR) follow a log normal model and that the model provides the integrated instantaneous covariance of the log-forward rates. The getValue method calculates the approximated integrated instantaneous variance of the swap rate, using the approximation \[ \frac{d log(S(t))}{d log(L(t))} \approx \frac{d log(S(0))}{d log(L(0))} = : w. \] Since \( L \) is a vector, \( w \) is a gradient (vector). The class then approximates the Black volatility of a swaption via \[ \sigma_S^{2} T := \sum_{i,j} w_{i} \gamma_{i,j} w_{j} \] where \( (\gamma_{i,j})_{i,j = 1,...,m} \) is the covariance matrix of the forward rates. The valuation can be performed in terms of value or implied Black volatility.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class and Description static classSwaptionAnalyticApproximation.ValueUnit
-
Constructor Summary
Constructors Constructor and Description SwaptionAnalyticApproximation(double swaprate, double[] swapTenor, SwaptionAnalyticApproximation.ValueUnit valueUnit)Create an analytic swaption approximation product for log normal forward rate model.SwaptionAnalyticApproximation(double swaprate, TimeDiscretizationInterface swapTenor)Create an analytic swaption approximation product for log normal forward rate model.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method and Description static double[][][]getIntegratedLIBORCovariance(LIBORMarketModel model)java.util.Map<java.lang.String,double[]>getLogSwaprateDerivative(TimeDiscretizationInterface liborPeriodDiscretization, DiscountCurveInterface discountCurveInterface, ForwardCurveInterface forwardCurveInterface)This function calculate the partial derivative d log(S) / d log(Lk) for a given swap rate with respect to a vector of forward rates (on a given forward rate tenor).RandomVariableInterfacegetValue(double evaluationTime, LIBORModelMonteCarloSimulationInterface model)This method returns the value random variable of the product within the specified model, evaluated at a given evalutationTime.RandomVariableInterfacegetValues(double evaluationTime, LIBORMarketModelInterface model)Calculates the approximated integrated instantaneous variance of the swap rate, using the approximation d log(S(t))/d log(L(t)) = d log(S(0))/d log(L(0)).-
Methods inherited from class net.finmath.montecarlo.interestrate.products.AbstractLIBORMonteCarloProduct
getFactorDrift, getValue, getValueForModifiedData, getValues
-
Methods inherited from class net.finmath.montecarlo.AbstractMonteCarloProduct
getCurrency, getValue, getValue, getValues, getValues, getValuesForModifiedData, getValuesForModifiedData, getValuesForModifiedData, getValuesForModifiedData, toString
-
-
-
-
Constructor Detail
-
SwaptionAnalyticApproximation
public SwaptionAnalyticApproximation(double swaprate, TimeDiscretizationInterface swapTenor)Create an analytic swaption approximation product for log normal forward rate model. Note: It is implicitly assumed that swapTenor.getTime(0) is the exercise date (no forward starting).- Parameters:
swaprate- The strike swap rate of the swaption.swapTenor- The swap tenor in doubles.
-
SwaptionAnalyticApproximation
public SwaptionAnalyticApproximation(double swaprate, double[] swapTenor, SwaptionAnalyticApproximation.ValueUnit valueUnit)Create an analytic swaption approximation product for log normal forward rate model. Note: It is implicitly assumed that swapTenor[0] is the exercise date (no forward starting).- Parameters:
swaprate- The strike swap rate of the swaption.swapTenor- The swap tenor in doubles.valueUnit- The unit of the quantity returned by the getValues method.
-
-
Method Detail
-
getValue
public RandomVariableInterface getValue(double evaluationTime, LIBORModelMonteCarloSimulationInterface model)
Description copied from class:AbstractLIBORMonteCarloProductThis method returns the value random variable of the product within the specified model, evaluated at a given evalutationTime. Note: For a lattice this is often the value conditional to evalutationTime, for a Monte-Carlo simulation this is the (sum of) value discounted to evaluation time. Cashflows prior evaluationTime are not considered.- Specified by:
getValuein classAbstractLIBORMonteCarloProduct- Parameters:
evaluationTime- The time on which this products value should be observed.model- The model used to price the product.- Returns:
- The random variable representing the value of the product discounted to evaluation time
-
getValues
public RandomVariableInterface getValues(double evaluationTime, LIBORMarketModelInterface model)
Calculates the approximated integrated instantaneous variance of the swap rate, using the approximation d log(S(t))/d log(L(t)) = d log(S(0))/d log(L(0)).- Parameters:
evaluationTime- Time at which the product is evaluated.model- A model implementing the LIBORModelMonteCarloSimulationInterface- Returns:
- Depending on the value of value unit, the method returns either the approximated integrated instantaneous variance of the swap rate (ValueUnit.INTEGRATEDVARIANCE) or the value using the Black formula (ValueUnit.VALUE).
-
getLogSwaprateDerivative
public java.util.Map<java.lang.String,double[]> getLogSwaprateDerivative(TimeDiscretizationInterface liborPeriodDiscretization, DiscountCurveInterface discountCurveInterface, ForwardCurveInterface forwardCurveInterface)
This function calculate the partial derivative d log(S) / d log(Lk) for a given swap rate with respect to a vector of forward rates (on a given forward rate tenor). It also returns some useful other quantities like the corresponding discout factors and swap annuities.- Parameters:
liborPeriodDiscretization- The libor period discretization.discountCurveInterface- The discount curve. If this parameter is null, the discount curve will be calculated from the forward curve.forwardCurveInterface- The forward curve.- Returns:
- A map containing the partial derivatives (key "value"), the discount factors (key "disocuntFactors") and the annuities (key "annuities") as vectors of double[] (indexed by forward rate tenor index starting at swap start)
-
getIntegratedLIBORCovariance
public static double[][][] getIntegratedLIBORCovariance(LIBORMarketModel model)
-
-
DataMelt 3.0 © DataMelt by jWork.ORG