optstocksensbyls

Calculate price and sensitivities for European, Bermudan, or American vanilla options using Monte Carlo simulations

Syntax

``PriceSens = optstocksensbyls(RateSpec,StockSpec,OptSpec,Strike,Settle,ExerciseDates)``
``PriceSens = optstocksensbyls(___,Name,Value)``
``````[PriceSens,Path,Times,Z] = optstocksensbyls(RateSpec,StockSpec,OptSpec,Strike,Settle,ExerciseDates)``````
``````[PriceSens,Path,Times,Z] = optstocksensbyls(___,Name,Value)``````

Description

example

````PriceSens = optstocksensbyls(RateSpec,StockSpec,OptSpec,Strike,Settle,ExerciseDates)` returns vanilla option prices or sensitivities using the Longstaff-Schwartz model. `optstocksensbyls` computes prices or sensitivities of European, Bermudan, and American vanilla options. For American and Bermudan options, the Longstaff-Schwartz least squares method is used to calculate the early exercise premium. 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 = optstocksensbyls(___,Name,Value)`adds optional name-value pair arguments.```

example

``````[PriceSens,Path,Times,Z] = optstocksensbyls(RateSpec,StockSpec,OptSpec,Strike,Settle,ExerciseDates)``` returns vanilla option prices or sensitivities using the Longstaff-Schwartz model.```

example

``````[PriceSens,Path,Times,Z] = optstocksensbyls(___,Name,Value)``` adds optional name-value pair arguments.```

Examples

collapse all

Define the `RateSpec`.

```StartDates = datetime(2013,1,1); EndDates = datetime(2015,1,1); Rates = 0.05; RateSpec = intenvset('ValuationDate', StartDates, 'StartDates', StartDates, ... 'EndDates', EndDates, 'Rates', Rates)```
```RateSpec = struct with fields: FinObj: 'RateSpec' Compounding: 2 Disc: 0.9060 Rates: 0.0500 EndTimes: 4 StartTimes: 0 EndDates: 735965 StartDates: 735235 ValuationDate: 735235 Basis: 0 EndMonthRule: 1 ```

Define the `StockSpec` for the asset.

```AssetPrice = 100; Sigma = 0.1; DivType = 'continuous'; DivAmounts = 0.04; StockSpec = stockspec(Sigma, AssetPrice, DivType, DivAmounts)```
```StockSpec = struct with fields: FinObj: 'StockSpec' Sigma: 0.1000 AssetPrice: 100 DividendType: {'continuous'} DividendAmounts: 0.0400 ExDividendDates: [] ```

Define the vanilla option.

```OptSpec = 'call'; Settle = datetime(2013,1,1); ExerciseDates = datetime(2015,1,1); Strike = 105;```

Compute the `Delta` sensitivity for the vanilla option using the Longstaff-Schwartz model.

```Antithetic = true; OutSpec = {'Delta'}; PriceSens = optstocksensbyls(RateSpec, StockSpec, OptSpec, Strike, ... Settle, ExerciseDates,'Antithetic', Antithetic, 'OutSpec', OutSpec)```
```PriceSens = 0.3945 ```

To display the output for `Price`, `Delta`, `Path`, and `Times`, use the following:

```OutSpec = {'Price','Delta'}; [Price, Delta, Path, Times] = optstocksensbyls(RateSpec, StockSpec, OptSpec, Strike, ... Settle, ExerciseDates,'Antithetic', Antithetic, 'OutSpec', OutSpec);```

Input Arguments

collapse all

Interest-rate term structure (annualized and continuously compounded), specified by the `RateSpec` obtained from `intenvset`. For information on the interest-rate specification, see `intenvset`.

Data Types: `struct`

Stock specification for underlying asset, specified using `StockSpec` obtained from `stockspec`. For information on the stock specification, see `stockspec`.

`stockspec` can handle other types of underlying assets. For example, stocks, stock indices, and commodities.

Data Types: `struct`

Definition of option, specified as `'call'` or `'put'` using a character vector.

Data Types: `char`

Option strike price value, specified with a nonnegative scalar integer:

• For a European option, use a scalar of strike price.

• For a Bermuda option, use a `1`-by-`NSTRIKES` vector of strike price.

• For an American option, use a scalar of strike price.

Data Types: `double`

Settlement date or trade date for the vanilla option, specified as a scalar datetime, string, or date character vector.

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

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

• For a European option, use a `1`-by-`1` vector of dates. For a European option, there is only one `ExerciseDates` on the option expiry date.

• For a Bermuda option, use a `1`-by-`NSTRIKES` vector of dates.

• For an American option, use a `1`-by-`2` vector of exercise date boundaries. The option can be exercised on any date between or including the pair of dates on that row. If only one non-`NaN` date is listed, or if `ExerciseDates` is a `1`-by-`1` cell array of character vectors, the option can be exercised between `Settle` and the single listed `ExerciseDates`.

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

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 = optstocksensbyls(RateSpec,StockSpec, OptSpec,Strike,Settle,ExerciseDates,'AmericanOpt','1','NumTrials','2000','OutSpec',{'Price','Delta','Gamma'})```

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

• `0` — European or Bermuda

• `1` — American

Note

For American and Bermudan options, the Longstaff-Schwartz least squares method is used to calculate the early exercise premium. For more information on the least squares method, see https://people.math.ethz.ch/%7Ehjfurrer/teaching/LongstaffSchwartzAmericanOptionsLeastSquareMonteCarlo.pdf.

Data Types: `single` | `double`

Simulation trials, specified as the comma-separated pair consisting of `'NumTrials'` and a scalar number of independent sample paths.

Data Types: `double`

Simulation periods per trial, specified as the comma-separated pair consisting of `'NumPeriods'` and a scalar number. `NumPeriods` is considered only when pricing European vanilla options. For American and Bermuda vanilla options, `NumPeriod` is equal to the number of `Exercise` days during the life of the option.

Data Types: `double`

Dependent random variates used to generate the Brownian motion vector (that is, Wiener processes) that drive the simulation, specified as the comma-separated pair consisting of `'Z'` and a `NumPeriods`-by-`1`-by-`NumTrials` 3-D time series array.

Data Types: `single` | `double`

Indicator for antithetic sampling, specified as the comma-separated pair consisting of `'Antithetic'` and a value of `true` or `false`.

Data Types: `logical`

Define outputs, specified as the comma-separated pair consisting of `'OutSpec'` and a `NOUT`- by-`1` or `1`-by-`NOUT` cell array of character vectors with possible values of `'Price'`, `'Delta'`, `'Gamma'`, `'Vega'`, `'Lambda'`, `'Rho'`, `'Theta'`, and `'All'`.

`OutSpec = {'All'}` specifies that the output should be `Delta`, `Gamma`, `Vega`, `Lambda`, `Rho`, `Theta`, and `Price`, in that order. This is the same as specifying `OutSpec` to include each sensitivity:

Example: ```OutSpec = {'delta','gamma','vega','lambda','rho','theta','price'}```

Data Types: `char` | `cell`

Output Arguments

collapse all

Expected price or sensitivities (defined by `OutSpec`) of the vanilla option, returned as a `1`-by-`1` array.

Simulated paths of correlated state variables, returned as a (`NumPeriods` + `1`)-by-`1`-by-`NumTrials` 3-D time series array. Each row of `Paths` is the transpose of the state vector X(t) at time t for a given trial.

Observation times associated with simulated paths, returned as a (`NumPeriods` + `1`)-by-`1` column vector of observation times associated with the simulated paths. Each element of `Times` is associated with the corresponding row of `Paths`.

Dependent random variates, if `Z` is specified as an optional input argument, the same value is returned. Otherwise, `Z` contains the random variates generated internally.

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.