Class BermudanOption

  • 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.4
    Author:
    Christian Fries
    • Constructor Detail

      • 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 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 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.
      • getLastValuationExerciseTime

        public RandomVariable getLastValuationExerciseTime()
      • getExerciseDates

        public double[] getExerciseDates()
      • getNotionals

        public double[] getNotionals()
      • getStrikes

        public double[] getStrikes()