Module net.finmath.lib
Class SwaptionAnalyticApproximation
- java.lang.Object
-
- net.finmath.montecarlo.AbstractMonteCarloProduct
-
- net.finmath.montecarlo.interestrate.products.AbstractLIBORMonteCarloProduct
-
- net.finmath.montecarlo.interestrate.products.SwaptionAnalyticApproximation
-
- All Implemented Interfaces:
Product
,Swaption
,TermStructureMonteCarloProduct
,MonteCarloProduct
public class SwaptionAnalyticApproximation extends AbstractLIBORMonteCarloProduct implements Swaption
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.- Version:
- 1.0
- Author:
- Christian Fries
- Date:
- 17.05.2007.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface net.finmath.modelling.products.Swaption
Swaption.ValueUnit
-
-
Constructor Summary
Constructors Constructor Description SwaptionAnalyticApproximation(double swaprate, double[] swapTenor, Swaption.ValueUnit valueUnit)
Create an analytic swaption approximation product for log normal forward rate model.SwaptionAnalyticApproximation(double swaprate, TimeDiscretization swapTenor)
Create an analytic swaption approximation product for log normal forward rate model.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Map<String,double[]>
getLogSwaprateDerivative(TimeDiscretization liborPeriodDiscretization, DiscountCurve discountCurve, ForwardCurve forwardCurve)
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).RandomVariable
getValue(double evaluationTime, LIBORModelMonteCarloSimulationModel model)
This method returns the value random variable of the product within the specified model, evaluated at a given evalutationTime.RandomVariable
getValues(double evaluationTime, TimeDiscretization timeDiscretization, LIBORMarketModel 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, getValues, getValuesForModifiedData, getValuesForModifiedData, getValuesForModifiedData, getValuesForModifiedData, toString
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface net.finmath.montecarlo.MonteCarloProduct
getCurrency, getValue, getValue, getValues, getValues, getValues, getValuesForModifiedData, getValuesForModifiedData, getValuesForModifiedData, getValuesForModifiedData
-
-
-
-
Constructor Detail
-
SwaptionAnalyticApproximation
public SwaptionAnalyticApproximation(double swaprate, TimeDiscretization 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, Swaption.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 RandomVariable getValue(double evaluationTime, LIBORModelMonteCarloSimulationModel model)
Description copied from interface:TermStructureMonteCarloProduct
This 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:
getValue
in interfaceTermStructureMonteCarloProduct
- Specified by:
getValue
in 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 RandomVariable getValues(double evaluationTime, TimeDiscretization timeDiscretization, LIBORMarketModel 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.timeDiscretization
- The time discretization used for integrating the covariance.model
- A model implementing the LIBORModelMonteCarloSimulationModel- 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).
- To dos:
- make initial values an arg and use evaluation time.
-
getLogSwaprateDerivative
public Map<String,double[]> getLogSwaprateDerivative(TimeDiscretization liborPeriodDiscretization, DiscountCurve discountCurve, ForwardCurve forwardCurve)
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.discountCurve
- The discount curve. If this parameter is null, the discount curve will be calculated from the forward curve.forwardCurve
- The forward curve.- Returns:
- A map containing the partial derivatives (key "value"), the discount factors (key "discountFactors") and the annuities (key "annuities") as vectors of double[] (indexed by forward rate tenor index starting at swap start)
-
-