Module net.finmath.lib
Class SwaptionSingleCurveAnalyticApproximation
java.lang.Object
net.finmath.montecarlo.AbstractMonteCarloProduct
net.finmath.montecarlo.interestrate.products.AbstractTermStructureMonteCarloProduct
net.finmath.montecarlo.interestrate.products.SwaptionSingleCurveAnalyticApproximation
- All Implemented Interfaces:
Product
,Swaption
,TermStructureMonteCarloProduct
,MonteCarloProduct
public class SwaptionSingleCurveAnalyticApproximation
extends AbstractTermStructureMonteCarloProduct
implements Swaption
This class implements an analytic swaption valuation formula under
a LIBOR market model. The algorithm implemented here is
taken from ISBN 0470047224.
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 d log(S(t))/d log(L(t)) = d log(S(0))/d log(L(0)).
The valuation can be performed in terms of value or implied
volatility.
- Version:
- 1.0
- Author:
- Christian Fries
-
Nested Class Summary
Nested classes/interfaces inherited from interface net.finmath.modelling.products.Swaption
Swaption.ValueUnit
-
Constructor Summary
ConstructorsConstructorDescriptionSwaptionSingleCurveAnalyticApproximation(double swaprate, double[] swapTenor, Swaption.ValueUnit valueUnit)
Create an analytic swaption approximation product for log normal forward rate model.SwaptionSingleCurveAnalyticApproximation(double swaprate, TimeDiscretization swapTenor)
Create an analytic swaption approximation product for log normal forward rate model. -
Method Summary
Modifier and TypeMethodDescriptiongetLogSwaprateDerivative(TimeDiscretization liborPeriodDiscretization, ForwardCurve forwardCurve, 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).getValue(double evaluationTime, TermStructureMonteCarloSimulationModel model)
This method returns the value random variable of the product within the specified model, evaluated at a given evalutationTime.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.AbstractTermStructureMonteCarloProduct
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 Details
-
SwaptionSingleCurveAnalyticApproximation
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.
-
SwaptionSingleCurveAnalyticApproximation
public SwaptionSingleCurveAnalyticApproximation(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 Details
-
getValue
public RandomVariable getValue(double evaluationTime, TermStructureMonteCarloSimulationModel 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 classAbstractTermStructureMonteCarloProduct
- 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 static Map<String,double[]> getLogSwaprateDerivative(TimeDiscretization liborPeriodDiscretization, ForwardCurve forwardCurve, 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 discount factors and swap annuities.- Parameters:
liborPeriodDiscretization
- The libor period discretization.forwardCurve
- The forward curve.swapTenor
- The swap tenor.- 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)
-