All Implemented Interfaces:
Product, AssetMonteCarloProduct, MonteCarloProduct

public class BermudanOption extends AbstractAssetMonteCarloProduct
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:
  • 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
  • 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 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 interface AssetMonteCarloProduct
      Specified by:
      getValue in class AbstractAssetMonteCarloProduct
      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 the cause() method.
    • getExerciseDates

      public double[] getExerciseDates()
    • getNotionals

      public double[] getNotionals()
    • getStrikes

      public double[] getStrikes()
    • getLastValuationExerciseTime

      public RandomVariable getLastValuationExerciseTime()
    • getLastValuationExerciseValueAtExerciseTime

      public RandomVariable[] getLastValuationExerciseValueAtExerciseTime()
    • getLastValuationContinuationValueAtExerciseTime

      public RandomVariable[] getLastValuationContinuationValueAtExerciseTime()
    • getLastValuationContinuationValueEstimatedAtExerciseTime

      public RandomVariable[] getLastValuationContinuationValueEstimatedAtExerciseTime()