Module net.finmath.lib
Class BermudanOption
java.lang.Object
net.finmath.montecarlo.AbstractMonteCarloProduct
net.finmath.montecarlo.assetderivativevaluation.products.AbstractAssetMonteCarloProduct
net.finmath.montecarlo.assetderivativevaluation.products.BermudanOption
- All Implemented Interfaces:
Product
,AssetMonteCarloProduct
,MonteCarloProduct
This class implements the valuation of 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. The code "demos" the two prominent methods for the valuation of Bermudan (American) products:
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. 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.5
- Author:
- Christian Fries
-
Nested Class Summary
Nested Classes -
Constructor Summary
ConstructorsConstructorDescriptionBermudanOption(double[] exerciseDates, double[] notionals, double[] strikes)
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.BermudanOption(double[] exerciseDates, double[] notionals, double[] strikes, BermudanOption.ExerciseMethod exerciseMethod)
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.BermudanOption(double[] exerciseDates, double[] notionals, double[] strikes, BermudanOption.ExerciseMethod exerciseMethod, int numberOfBasisFunctions, boolean intrinsicValueAsBasisFunction, boolean useBinning)
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
Modifier and TypeMethodDescriptiondouble[]
double[]
double[]
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 Details
-
BermudanOption
public BermudanOption(double[] exerciseDates, double[] notionals, double[] strikes, BermudanOption.ExerciseMethod exerciseMethod, int numberOfBasisFunctions, boolean intrinsicValueAsBasisFunction, boolean useBinning)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.numberOfBasisFunctions
- The number of basis functions (if exerciseMethod == ESTIMATE_COND_EXPECTATION, otherwise ignored)intrinsicValueAsBasisFunction
- If true max(S-K,0) is used to build the basis function, otherwise S is used to build the basis function.useBinning
- If false, the basis functions are polynomials of increasing order (1, S S^2, ...). If true, the basis functions are bins.
-
BermudanOption
public BermudanOption(double[] exerciseDates, double[] notionals, double[] strikes, BermudanOption.ExerciseMethod exerciseMethod)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.
-
BermudanOption
public BermudanOption(double[] exerciseDates, double[] notionals, double[] strikes)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. The product will use ExerciseMethod.ESTIMATE_COND_EXPECTATION.- 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.
-
-
Method Details
-
getValue
public RandomVariable getValue(double evaluationTime, AssetModelMonteCarloSimulationModel model) throws CalculationExceptionThis 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.
-
getExerciseDates
public double[] getExerciseDates() -
getNotionals
public double[] getNotionals() -
getStrikes
public double[] getStrikes() -
getLastValuationExerciseTime
-
getLastValuationExerciseValueAtExerciseTime
-
getLastValuationContinuationValueAtExerciseTime
-
getLastValuationContinuationValueEstimatedAtExerciseTime
-