optSensByMertonFD

Option price and sensitivities by Merton76 model using finite differences

Syntax

``[PriceSens,PriceGrid,AssetPrices,Times] = optSensByMertonFD(Rate,AssetPrice,Settle,ExerciseDates,OptSpec,Strike,Sigma,MeanJ,JumpVol,JumpFreq)``
``[PriceSens,PriceGrid,AssetPrices,Times] = optSensByMertonFD(___,Name,Value)``

Description

example

````[PriceSens,PriceGrid,AssetPrices,Times] = optSensByMertonFD(Rate,AssetPrice,Settle,ExerciseDates,OptSpec,Strike,Sigma,MeanJ,JumpVol,JumpFreq)` computes a vanilla European or American option price and sensitivities by the Merton76 model, using the Crank-Nicolson Adams-Bashforth (CNAB) IMEX method. NoteAlternatively, you can use the `Vanilla` object to calculate price or sensitivities for vanilla options. For more information, see Get Started with Workflows Using Object-Based Framework for Pricing Financial Instruments. ```

example

````[PriceSens,PriceGrid,AssetPrices,Times] = optSensByMertonFD(___,Name,Value)` specifies options using one or more name-value pair arguments in addition to the input arguments in the previous syntax. ```

Examples

collapse all

Define the option variables and Merton model parameters.

```AssetPrice = 90; Strike = 100; Rate = 0.06; DividendYield = 0.1; Settle = datetime(2018,1,1); ExerciseDates = datetime(2018,4,2); Sigma = 0.40; MeanJ = -0.10; JumpVol = 0.01; JumpFreq = 1.00;```

Compute the American call option price and sensitivities using the finite differences method.

```OptSpec = 'Call'; [Price, Delta, Gamma, Rho, Theta, Vega] = optSensByMertonFD(Rate, AssetPrice, Settle, ExerciseDates, OptSpec, Strike,... Sigma, MeanJ, JumpVol, JumpFreq, 'DividendYield', DividendYield, 'AmericanOpt', 1,... 'OutSpec', ["Price" "Delta" "Gamma" "Rho" "Theta" "Vega"])```
```Price = 3.4551 ```
```Delta = 0.3211 ```
```Gamma = 0.0195 ```
```Rho = 5.6610 ```
```Theta = -11.9877 ```
```Vega = 15.5156 ```

Input Arguments

collapse all

Continuously compounded risk-free interest rate, specified as a scalar decimal value.

Data Types: `double`

Current underlying asset price, specified as a scalar numeric.

Data Types: `double`

Option settlement date, specified as a scalar datetime, string, or date character vector.

To support existing code, `optSensByMertonFD` also accepts serial date numbers as inputs, but they are not recommended.

Option exercise dates, specified as a datetime array, string array, or date character vectors:

• For a European option, use a scalar date. For a European option, `ExerciseDates` contains only one value: the option expiry date.

• For an American option, use a `1`-by-`2` vector of dates to specify the exercise date boundaries. An American option can be exercised on any date between or including the pair of dates. If only one non-`NaN` date is listed, then the option can be exercised between `Settle` date and the single listed value in `ExerciseDates`.

To support existing code, `optSensByMertonFD` also accepts serial date numbers as inputs, but they are not recommended.

Definition of the option, specified as a scalar using a character vector or string array with a value of `'call'` or `'put'`.

Data Types: `cell` | `string`

Option strike price value, specified as a scalar numeric.

Data Types: `double`

Volatility of the underling asset, specified as a scalar numeric.

Data Types: `double`

Mean of the random percentage jump size (J), specified as a scalar decimal value where `log`(1+J) is normally distributed with the mean (`log`(1+`MeanJ`)-0.5*`JumpVol`^2) and the standard deviation `JumpVol`.

Data Types: `double`

Standard deviation of `log`(1+J) where `J` is the random percentage jump size, specified as a scalar decimal.

Data Types: `double`

Annual frequency of the Poisson jump process, specified as a scalar numeric.

Data Types: `double`

Name-Value Arguments

Specify optional pairs of arguments as `Name1=Value1,...,NameN=ValueN`, where `Name` is the argument name and `Value` is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose `Name` in quotes.

Example: ```[Price,PriceGrid] = optByMertonFD(Rate,AssetPrice,Settle,ExerciseDates,OptSpec,Strike,MeanJ,JumpVol,JumpFreq,'Basis',7,'OutSpec','delta')```

Day-count basis of the instrument, specified as the comma-separated pair consisting of `'Basis'` and a scalar using a supported value:

• 0 = actual/actual

• 1 = 30/360 (SIA)

• 2 = actual/360

• 3 = actual/365

• 4 = 30/360 (PSA)

• 5 = 30/360 (ISDA)

• 6 = 30/360 (European)

• 7 = actual/365 (Japanese)

• 8 = actual/actual (ICMA)

• 9 = actual/360 (ICMA)

• 10 = actual/365 (ICMA)

• 11 = 30/360E (ICMA)

• 12 = actual/365 (ISDA)

• 13 = BUS/252

Data Types: `double`

Continuously compounded underlying asset yield, specified as the comma-separated pair consisting of `'DividendYield'` and a scalar numeric.

Note

If you enter a value for `DividendYield`, then set `DividendAmounts` and `ExDividendDates` = `[ ]` or do not enter them. If you enter values for `DividendAmounts` and `ExDividendDates`, then set `DividendYield` = `0`.

Data Types: `double`

Cash dividend amounts, specified as the comma-separated pair consisting of `'DividendAmounts'` and an `NDIV`-by-`1` vector.

Note

Each dividend amount must have a corresponding ex-dividend date. If you enter values for `DividendAmounts` and `ExDividendDates`, then set `DividendYield` = `0`.

Data Types: `double`

Ex-dividend dates, specified as the comma-separated pair consisting of `'ExDividendDates'` and an `NDIV`-by-`1` vector using a datetime array, string array, or date character vectors.

To support existing code, `optSensByMertonFD` also accepts serial date numbers as inputs, but they are not recommended.

Maximum price for the price grid boundary, specified as the comma-separated pair consisting of `'AssetPriceMax'` and a positive scalar numeric.

Data Types: `double`

Size of the asset grid for finite difference grid, specified as the comma-separated pair consisting of `'AssetGridSize'` and a scalar numeric.

Data Types: `double`

Number of nodes of the time grid for finite difference grid, specified as the comma-separated pair consisting of `'TimeGridSize'` and a positive numeric scalar.

Data Types: `double`

Option type, specified as the comma-separated pair consisting of `'AmericanOpt'` and a scalar flag with one of these values:

• `0` — European

• `1` — American

Data Types: `double`

Define outputs, specified as the comma-separated pair consisting of `'OutSpec'` and a `NOUT`- by-`1` or a `1`-by-`NOUT` string array or cell array of character vectors with supported values.

Example: ```OutSpec = ['price','delta','gamma','vega','rho','theta']```

Data Types: `string` | `cell`

Output Arguments

collapse all

Option price or sensitivities, returned as a numeric. The name-value pair argument `OutSpec` determines the types and order of the outputs.

Grid containing prices calculated by the finite difference method, returned as a two-dimensional grid with size `AssetGridSize``TimeGridSize`. The number of columns is not necessarily equal to the `TimeGridSize` because exercise and ex-dividend dates are added to the time grid. `PriceGrid(:, :, end)` contains the price for t = `0`.

Prices of the asset corresponding to the first dimension of `PriceGrid`, returned as a vector.

Times corresponding to the second dimension of `PriceGrid`, returned as a vector.

collapse all

Vanilla Option

A vanilla option is a category of options that includes only the most standard components.

A vanilla option has an expiration date and straightforward strike price. American-style options and European-style options are both categorized as vanilla options.

The payoff for a vanilla option is as follows:

• For a call: $\mathrm{max}\left(St-K,0\right)$

• For a put: $\mathrm{max}\left(K-St,0\right)$

where:

St is the price of the underlying asset at time t.

K is the strike price.

Merton Jump Diffusion Model

The Merton jump diffusion model [2] extends the Black-Scholes model by using the Poisson process to include jump diffusion parameters in the modeling of sudden asset price movements (both up and down).

The stochastic differential equation is

`$\begin{array}{l}d{S}_{t}=\left(r-q-{\lambda }_{p}{\mu }_{j}\right){S}_{t}dt+\sigma {S}_{t}d{W}_{t}+J{S}_{t}d{P}_{t}\\ \text{prob(}d{P}_{t}=1\right)={\lambda }_{p}dt\end{array}$`

where:

r is the continuous risk-free rate.

q is the continuous dividend yield.

Wt is the Wiener process.

J is the random percentage jump size conditional on the jump occurring, where `ln`(1+J) is normally distributed with mean $\mathrm{ln}\left(1+{\mu }_{J}\right)-\frac{{\delta }^{2}}{2}$ and the standard deviation δ, and (1+J) has a lognormal distribution:

`$\frac{1}{\left(1+J\right)\delta \sqrt{2\pi }}\mathrm{exp}\left\{{\frac{-\left[\mathrm{ln}\left(1+J\right)-\left(\mathrm{ln}\left(1+{\mu }_{J}\right)-\frac{{\delta }^{2}}{2}\right]}{2{\delta }^{2}}}^{2}\right\}$`

where:

μJ is the mean of J for (μJ > -1).

δ is the standard deviation of `ln`(1+J) for (δ≥ 0).

ƛp is the annual frequency (intensity) of Poisson process Ptfor (ƛp ≥ 0).

σ is the volatility of the asset price for (σ > 0).

References

[1] Cont, R., and E. Voltchkova. “A Finite Difference Scheme for Option Pricing in Jump Diffusion and Exponential Lévy Models.” SIAM Journal on Numerical Analysis. Vol. 43, Number 4, 2005, pp. 1596-1626.

[2] Merton, R. "Option Pricing When Underlying Stock Returns Are Discontinuous." The Journal of Financial Economics. Vol 3. 1976, pp. 125-144.

Version History

Introduced in R2019a

expand all