Class ShoutOption
- All Implemented Interfaces:
FiniteDifferenceEquityProduct, FiniteDifferenceProduct<FiniteDifferenceEquityModel>, Product
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 Summary
ConstructorsConstructorDescriptionShoutOption(double maturity, double initialStrike, double[] strikeGrid, int maximumNumberOfShouts, CallOrPut callOrPut) Creates a shout option with zero shout cash adjustment.ShoutOption(String underlyingName, double maturity, double initialStrike, double[] strikeGrid, int maximumNumberOfShouts, CallOrPut callOrPut, double shoutCashAdjustment) Creates a shout option. -
Method Summary
Modifier and TypeMethodDescriptionReturns the call/put flag.doubleReturns the initial strike.doubleReturns the maturity.intReturns the maximum number of shouts.doubleReturns the constant shout cash adjustment.double[]Returns the strike grid.Returns the underlying name.double[]getValue(double evaluationTime, FiniteDifferenceEquityModel model) Returns the value at the specified evaluation time.double[][]Returns the full value surface.toString()Returns a string representation.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface FiniteDifferenceEquityProduct
getModelClassMethods inherited from interface FiniteDifferenceProduct
getValue
-
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 benull.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
Returns the value at the specified evaluation time.- Specified by:
getValuein interfaceFiniteDifferenceProduct<FiniteDifferenceEquityModel>- Parameters:
evaluationTime- Evaluation time.model- The finite-difference model.- Returns:
- The value vector on the model space grid.
-
getValues
Returns the full value surface.- Specified by:
getValuesin interfaceFiniteDifferenceProduct<FiniteDifferenceEquityModel>- Parameters:
model- The finite-difference model.- Returns:
- The value surface indexed by space point and time index.
-
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
-
getShoutCashAdjustment
public double getShoutCashAdjustment()Returns the constant shout cash adjustment.- Returns:
- The shout cash adjustment.
-
toString
-