Module net.finmath.lib
Class ForwardRateVolatilitySurfaceCurvature
java.lang.Object
net.finmath.montecarlo.AbstractMonteCarloProduct
net.finmath.montecarlo.interestrate.products.AbstractTermStructureMonteCarloProduct
net.finmath.montecarlo.interestrate.products.ForwardRateVolatilitySurfaceCurvature
- All Implemented Interfaces:
Product
,TermStructureMonteCarloProduct
,MonteCarloProduct
This class implements the calculation of the curvature of the volatility surface of the forward rates.
The value returned by the
While this is not a common financial product, this class can be helpful in calibration procedures, e.g. to put an additional constrain on the smoothness / curvature of the model surface.
A rough interpretation of this product is a follows: If the value 0.25 is returned, then - on average - the variance of the forward rate oscillates by 0.25 per year, i.e. it moves up by 0.25 and back. This corresponds to a movement of 0.5 and back per year for the volatility. Given that you have 100 other calibrations products, and the weight of all (including this one) is 1.0, then 0.1% deviation of the other calibration products is considered as severe as 0.1 movement per year in the variance (0.3 movement in volatility). Note: You can control the relation of these by weights.
The value returned by the
getValue(double, TermStructureMonteCarloSimulationModel)
method is calculated as follows:
For each forward rate's instantaneous volatility σ(t) we calculate
\[ \sqrt{ \frac{1}{t_{n} - t_{1}} \sum_{i=1}^{n-1} ( f(t_{i}) )^{2} \cdot (t_{i+1} - t_{i}) } \]
(this is the root mean square / L2 norm of f) where
\[ f(t_{i}) = \frac{ x_{i+2} - 2 x_{i+1} + x_{i} }{ (t_{i+2} - t_{i+1}) (t_{i+1} - t_{i}) } \]
and where
xi = σ2(ti)
is the
instantaneous variance of a specific forward rate.
The value returned is then calculated as the average of all those curvatures for all forward rates.
Note: A tolerance level can be specified. See the documentation of the constructor ForwardRateVolatilitySurfaceCurvature(double)
.
While this is not a common financial product, this class can be helpful in calibration procedures, e.g. to put an additional constrain on the smoothness / curvature of the model surface.
A rough interpretation of this product is a follows: If the value 0.25 is returned, then - on average - the variance of the forward rate oscillates by 0.25 per year, i.e. it moves up by 0.25 and back. This corresponds to a movement of 0.5 and back per year for the volatility. Given that you have 100 other calibrations products, and the weight of all (including this one) is 1.0, then 0.1% deviation of the other calibration products is considered as severe as 0.1 movement per year in the variance (0.3 movement in volatility). Note: You can control the relation of these by weights.
- Version:
- 1.0
- Author:
- Christian Fries
- Date:
- 12.04.2014.
-
Constructor Summary
ConstructorsConstructorDescriptionCreate the calculation of the curvature of the volatility surface of the forward ratesForwardRateVolatilitySurfaceCurvature(double tolerance)
Create the calculation of the curvature of the volatility surface of the forward rates. -
Method Summary
Modifier and TypeMethodDescriptiongetValue(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, LIBORMarketModel model)
Calculates the squared curvature of the LIBOR instantaneous variance.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
-
ForwardRateVolatilitySurfaceCurvature
public ForwardRateVolatilitySurfaceCurvature()Create the calculation of the curvature of the volatility surface of the forward rates -
ForwardRateVolatilitySurfaceCurvature
public ForwardRateVolatilitySurfaceCurvature(double tolerance)Create the calculation of the curvature of the volatility surface of the forward rates. A tolerance level may be specified. In that case, the curvature calculated by the getValue method is approximately
max(curvature
-tolerance
, 0).
A rough interpretation of the tolerance is as follows: With a tolerance = 0.04, then- the variance can oscillate once from 0.0 to 0.04 and back within a year without generating a penalty term (i.e., the volatility is allowed to oscillate once from 0.0 to 0.2 and back within a year), or
- the variance can oscillate twice from 0.0 to 0.02 and back within a year without generating a penalty term (i.e., the volatility is allowed to oscillate twice from 0.0 to 0.14 (sqrt(0.02)) and back).
- Parameters:
tolerance
- The tolerance level.
-
-
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
Calculates the squared curvature of the LIBOR instantaneous variance.- Parameters:
evaluationTime
- Time at which the product is evaluated.model
- A model implementing the LIBORModelMonteCarloSimulationModel- Returns:
- The squared curvature of the LIBOR instantaneous variance (reduced a possible tolerance). The return value is ≥ 0.
-