net.finmath.montecarlo.interestrate.products
Class SwaptionAnalyticApproximationRebonato
- java.lang.Object
-
- net.finmath.montecarlo.AbstractMonteCarloProduct
-
- net.finmath.montecarlo.interestrate.products.AbstractLIBORMonteCarloProduct
-
- net.finmath.montecarlo.interestrate.products.SwaptionAnalyticApproximationRebonato
-
- All Implemented Interfaces:
- ProductInterface
public class SwaptionAnalyticApproximationRebonato 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 of \[ \frac{d log(S(t))}{d log(L(t))} \] according to Rebonato (1999). 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. In this implementation we use the weights as specified by Rebonato (1998) and not the one derived by Hull and White (1999/2000).
-
-
Nested Class Summary
Nested Classes Modifier and Type Class and Description static classSwaptionAnalyticApproximationRebonato.ValueUnit
-
Constructor Summary
Constructors Constructor and Description SwaptionAnalyticApproximationRebonato(double swaprate, double[] swapTenor, SwaptionAnalyticApproximationRebonato.ValueUnit valueUnit)Create an analytic swaption approximation product for log normal forward rate model.SwaptionAnalyticApproximationRebonato(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)static java.util.Map<java.lang.String,double[]>getLogSwaprateDerivative(TimeDiscretizationInterface liborPeriodDiscretization, DiscountCurveInterface discountCurveInterface, ForwardCurveInterface forwardCurveInterface, double[] swapTenor)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
-
SwaptionAnalyticApproximationRebonato
public SwaptionAnalyticApproximationRebonato(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.
-
SwaptionAnalyticApproximationRebonato
public SwaptionAnalyticApproximationRebonato(double swaprate, double[] swapTenor, SwaptionAnalyticApproximationRebonato.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 static java.util.Map<java.lang.String,double[]> getLogSwaprateDerivative(TimeDiscretizationInterface liborPeriodDiscretization, DiscountCurveInterface discountCurveInterface, ForwardCurveInterface forwardCurveInterface, double[] swapTenor)
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.swapTenor- The swap tenor.- 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