Module net.finmath.lib
Class BermudanDigitalOption
- java.lang.Object
-
- net.finmath.montecarlo.AbstractMonteCarloProduct
-
- net.finmath.montecarlo.assetderivativevaluation.products.AbstractAssetMonteCarloProduct
-
- net.finmath.montecarlo.assetderivativevaluation.products.BermudanDigitalOption
-
- All Implemented Interfaces:
Product
,AssetMonteCarloProduct
,MonteCarloProduct
public class BermudanDigitalOption extends AbstractAssetMonteCarloProduct
This class implements the valuation of a Bermudan digital option paying
\( N_{i} \cdot \mathbb{1}(S(T_{i}) - K_{i}) \) at \( T_{i} \),
when exercised in \( T_{i} \), where \( N_{i} \) is the notional, \( \mathbb{1} \) is the indicator function, \( S \) is the underlying, \( K_{i} \) is the strike and \( T_{i} \) the exercise date. The code "demos" the two prominent methods for the valuation of Bermudan (American) products:- The valuation may be performed using an estimation of the conditional expectation to determine the exercise criteria. Apart from a possible foresight bias induced by the Monte-Carlo errors, this give a lower bound for the Bermudan value.
- The valuation may be performed using the dual method based on a minimization problem, which gives an upper bound.
- Version:
- 1.4
- Author:
- Christian Fries
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
BermudanDigitalOption.ExerciseMethod
-
Constructor Summary
Constructors Constructor Description BermudanDigitalOption(double[] exerciseDates, double[] notionals, double[] strikes, BermudanDigitalOption.ExerciseMethod exerciseMethod, Map<String,Object> properties)
Create a Bermudan option paying N(i) * (S(T(i)) - K(i)) at T(i), when exercised in T(i), where N(i) is the notional, S is the underlying, K(i) is the strike and T(i) the exercise date.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description RandomVariable
getValue(double evaluationTime, AssetModelMonteCarloSimulationModel model)
This method returns the value random variable of the product within the specified model, evaluated at a given evalutationTime.-
Methods inherited from class net.finmath.montecarlo.assetderivativevaluation.products.AbstractAssetMonteCarloProduct
getValue
-
Methods inherited from class net.finmath.montecarlo.AbstractMonteCarloProduct
getCurrency, getValue, getValue, getValues, getValues, getValues, getValuesForModifiedData, getValuesForModifiedData, getValuesForModifiedData, getValuesForModifiedData, toString
-
-
-
-
Constructor Detail
-
BermudanDigitalOption
public BermudanDigitalOption(double[] exerciseDates, double[] notionals, double[] strikes, BermudanDigitalOption.ExerciseMethod exerciseMethod, Map<String,Object> properties)
Create a Bermudan option paying N(i) * (S(T(i)) - K(i)) at T(i), when exercised in T(i), where N(i) is the notional, S is the underlying, K(i) is the strike and T(i) the exercise date.- Parameters:
exerciseDates
- The exercise dates (T(i)), given as doubles.notionals
- The notionals (N(i)) for each exercise date.strikes
- The strikes (K(i)) for each exercise date.exerciseMethod
- The exercise method to be used for the estimation of the exercise boundary.properties
- Use this map to specify special product parameters, e.g. "orderOfRegressionPolynomial" (Integer).
-
-
Method Detail
-
getValue
public RandomVariable getValue(double evaluationTime, AssetModelMonteCarloSimulationModel model) throws CalculationException
This method returns the value random variable of the product within the specified model, evaluated at a given evalutationTime. Cash-flows prior evaluationTime are not considered.- Specified by:
getValue
in interfaceAssetMonteCarloProduct
- Specified by:
getValue
in classAbstractAssetMonteCarloProduct
- 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.
- Throws:
CalculationException
- Thrown if the valuation fails, specific cause may be available via thecause()
method.
-
-