This paper describes a method of overcoming this problem by manipulating a symbolic parameter in a numeric scheme for option valuation. This parameter characterises the option price at any stage in its lifetime as a function of its state when it expires. This parameterisation can be expressed as a function of, for example, the price history of the underlying asset. This enables 'path-dependent' options to be valued by established numerical techniques, which has hitherto been very difficult or impossible.
Explanation of the purpose of an option.
Definitions to be supplied:
Option, Put option, Call option, Exercise price, European option, American option
Payoff, cash-or-nothing.
D[f, t] + r S D[f, S] + (sigma S)^2 D[f, {S, 2}]/2 == r f;
f(t, 0) == X E^(-r(T-t);
f(t, Infinity) == 0;
f(T, S) == Max(0,X-S)
Many parabolic linear forms, such as the Black-Scholes equation above, can be transformed into a standardised diffusion equation D[U, tau] == D[U, {x, 2}], where U, x and tau are functions of f, S, t, r, X and sigma. If this can be done, a finite difference scheme becomes purely numeric and it is not possible to inject a path dependent element into the analysis. In practice, untransformed Black-Scholes equations are used more often than not because more complicated Black-Scholes models cannot be standardised in this way. The following analysis is therefore used with an untransformed Black-Scholes equation.
An arbitrary payoff function, PayOff[P, m, v] is used in place of
the standard ramp payoff, Max[0, X-S]. The parameter P can be used to
specify the strike price a posteriori, m represents the asset price at any
stage in the iteration, and v is a parameter list which is reserved for any
particular use. In this analysis v is used to specify a cut-off point in
time. The used of the unresolved function PayOff[P, m, v] results in
increasingly complex, but unnested, symbolic expressions. The number of
terms in each one is limited by the asset price grid spacing. The cases
considered here use an (M+1) by (NN+1) grid with M=NN=20. This gives asset
prices ranging from 0 to 100 time steps, each of 1/48 years. At the final
time step, the Valuation Profile (i.e. the option value for given asset
prices) is obtained.
PayOffRamp[P_, m_ ] := P-5m /; 0 <= m <= P/5
PayOffRamp[P_,m_]:= 0 /; P/5 < m <= 20
ValuationProfile /. { PayOff[P_, m_, v___ ] -> PayOffRamp[ StrikePrice, m ], a_. P -> StrikePrice a }
In the case of a Cash or Nothing payoff, the corresponding substitution is:
PayOffCashOrNothing[ P_, m_ ] := P /; 0<= m <= 10
PayOffCashOrNothing[ P_ ,m_ ] := 0 /; 10 < m <= 20
ValuationProfile /. { PayOff[ P_ , m_, v___ ] -> PayOffCashOrNothing[ StrikePrice, m ], a_. P -> StrikePrice a };
In both cases, the results agree with purely numeric analyses.In order to demonstrate that the method can include a path dependent facility and make effective use of the symbolic nature of the formulation, the analysis above is extended to the case of a switching option. Suppose that half way through the option's life, the option switches from a cash or nothing option to a ramped payoff option if the asset price is 30 or less (m <= 6), and remains a cash or nothing option otherwise. This is of interest to a buyer who bets that the asset price will stay near the money, and looks for a higher payout than a ramped option would give, but does not wish to pay the relatively high price of a pure cash or nothing option. The task for the writer of the option is to construct the option so that the valuation is not too sensitive to changes to S, particularly near the money. This is good hedging practice. It amounts to choosing the cash or nothing payout such the valuation profile is monotonic decreasing.
Parameters representing the strike price, P[[1]], and the cash or nothing
payout, P[[2]], are respectively declared in the list P.
The parameter v is used to associate the time position of each option
valuation in the grid with the option valuation itself. The payoff
function is then replaced with a switching payoff function, which depends
on the asset price at a given time step. In this way the path dependency
is introduced after the finite differences have been computed and a
symbolic valuation results.
PayOffSwitch[ P_List, m_, v_ ] := PayOffCashOrNothing[ P[[2]], m ] /; ( v < NN/2 )
PayOffSwitch[ P_List, m_, v_ ] := PayOffCashOrNothing[ P[[2]], m ] /; ( v >= NN/2 && 6 < m <= M )
PayOffSwitch[ P_List ,m_ ,v_] := PayOffRamp[ P[[ 1 ]], m ] /; ( v>= NN/2 && 0 <= m<= 6 )
OptionPriceHistory /. { PayOff[ P_, m_, v___ ]-> PayOffSwitch[ {StrikePrice, CashOrNothingValue}, m, v ] };
OptionPriceHistorySwitched = Partition[ % /. a_. + b_. P -> a + b StrikePrice, M+1 ];
This method is successful in injecting a symbolic element into an explicit finite difference scheme for valuation of a European option. The problem of how to value the cash or nothing payout of the switching ramped/cash or nothing option involves very simple, but effective, manipulation of the symbolic valuation profile. It proved to be much harder to implement an implicit finite difference scheme because solving a system of linear equations containing symbolic expressions takes much longer than a purely numeric system of linear equations. More memory is also required. Using TridiagonalSolve from the LinearAlgebra`Tridiagonal` package did not improve matters sufficiently.
It remains to value an American option using this method. If, at any given stage of the iteration, a comparison with the payoff function must be made, and the symbolic nature of the problem is such that these comparisons cannot be simplified sufficiently, a combinatorially explosive situation results. The size and level of nestedness of terms in the finite difference schemes grows beyond reasonable memory capacity.