Class ShoutOption

java.lang.Object
net.finmath.finitedifference.assetderivativevaluation.products.ShoutOption
All Implemented Interfaces:
FiniteDifferenceEquityProduct, FiniteDifferenceProduct<FiniteDifferenceEquityModel>, Product

public class ShoutOption extends Object implements FiniteDifferenceEquityProduct
Finite-difference valuation of a shout option.

A shout option is a path-dependent extension of a vanilla option allowing the holder to lock in intrinsic value a finite number of times before maturity. In this implementation, the locked level is represented by a reset strike K*, and the standard shout rule

K* = S

is used at each shout time. The contract considered here has fixed maturity T, a finite maximum number of shouts, continuous shout right, optional constant shout cash adjustment, and no maturity extension or yearly counter reset.

For a fixed locked strike K, the terminal payoff is that of a vanilla option, namely

Φ(S(T);K) = max(ω(S(T)-K),0),

where ω = 1 for a call and ω = -1 for a put.

Let V(u)(t,S;K) denote the value when u shouts have already been used and the current locked strike is K. The shout feature induces the obstacle recursion

V(u)(t,S;K) = max( continuation, V(u+1)(t,S;S) + c ),

where c is the constant shout cash adjustment. Hence the valuation proceeds backward over planes indexed by the number of used shouts and, inside each plane, over slices corresponding to fixed strike values taken from a strike grid.

The implementation adapts to the present framework the ideas of H. Windcliff, K.R. Vetzal, P.A. Forsyth, A. Verma, T.F. Coleman, An object-oriented framework for valuing shout options on high-performance computer architectures, JEDC.

The recursion is performed over planes of used shout count and slices of fixed strike. Each slice is a standard PDE solve with a continuous obstacle interpolated from the next shout plane.

Author:
Alessandro Gnoatto
  • Constructor Details

    • ShoutOption

      public ShoutOption(String underlyingName, double maturity, double initialStrike, double[] strikeGrid, int maximumNumberOfShouts, CallOrPut callOrPut, double shoutCashAdjustment)
      Creates a shout option.
      Parameters:
      underlyingName - Name of the underlying. May be null.
      maturity - Option maturity.
      initialStrike - Initial strike.
      strikeGrid - Grid of strikes used for the locked-strike recursion.
      maximumNumberOfShouts - Maximum number of shouts.
      callOrPut - Call/put flag.
      shoutCashAdjustment - Constant cash adjustment added upon shout.
    • ShoutOption

      public ShoutOption(double maturity, double initialStrike, double[] strikeGrid, int maximumNumberOfShouts, CallOrPut callOrPut)
      Creates a shout option with zero shout cash adjustment.
      Parameters:
      maturity - Option maturity.
      initialStrike - Initial strike.
      strikeGrid - Grid of strikes used for the locked-strike recursion.
      maximumNumberOfShouts - Maximum number of shouts.
      callOrPut - Call/put flag.
  • Method Details

    • getValue

      public double[] getValue(double evaluationTime, FiniteDifferenceEquityModel model)
      Returns the value at the specified evaluation time.
      Specified by:
      getValue in interface FiniteDifferenceProduct<FiniteDifferenceEquityModel>
      Parameters:
      evaluationTime - Evaluation time.
      model - The finite-difference model.
      Returns:
      The value vector on the model space grid.
    • getValues

      public double[][] getValues(FiniteDifferenceEquityModel model)
      Returns the full value surface.
      Specified by:
      getValues in interface FiniteDifferenceProduct<FiniteDifferenceEquityModel>
      Parameters:
      model - The finite-difference model.
      Returns:
      The value surface indexed by space point and time index.
    • getUnderlyingName

      public String getUnderlyingName()
      Returns the underlying name.
      Returns:
      The underlying name, possibly null.
    • getMaturity

      public double getMaturity()
      Returns the maturity.
      Returns:
      The maturity.
    • getInitialStrike

      public double getInitialStrike()
      Returns the initial strike.
      Returns:
      The initial strike.
    • getStrikeGrid

      public double[] getStrikeGrid()
      Returns the strike grid.
      Returns:
      A defensive copy of the strike grid.
    • getMaximumNumberOfShouts

      public int getMaximumNumberOfShouts()
      Returns the maximum number of shouts.
      Returns:
      The maximum number of shouts.
    • getCallOrPut

      public CallOrPut getCallOrPut()
      Returns the call/put flag.
      Returns:
      The call/put flag.
    • getShoutCashAdjustment

      public double getShoutCashAdjustment()
      Returns the constant shout cash adjustment.
      Returns:
      The shout cash adjustment.
    • toString

      public String toString()
      Returns a string representation.
      Overrides:
      toString in class Object
      Returns:
      A string representation of the product parameters.