# basketbyls

Price European or American basket options using Monte Carlo simulations

## Syntax

## Description

`[`

prices basket options using the Longstaff-Schwartz model.`Price`

,`Paths`

,`Times`

,`Z`

] = basketbyls(`RateSpec`

,`BasketStockSpec`

,`OptSpec`

,`Strike`

,`Settle`

,`ExerciseDates`

)

For American options, the Longstaff-Schwartz least squares method is used to calculate the early exercise premium.

## Examples

### Prices Basket Options Using the Longstaff-Schwartz Model

Find an American call basket option of three stocks. The stocks are currently trading at $35, $40 and $45 with annual volatilities of 12%, 15% and 18%, respectively. The basket contains 33.33% of each stock. Assume the correlation between all pair of assets is 50%. On May 1, 2009, an investor wants to buy a three-year call option with a strike price of $42. The current annualized continuously compounded interest rate is 5%. Use this data to compute the price of the call basket option using the Longstaff-Schwartz model.

Settle = datetime(2009,5,1); Maturity = datetime(2012,5,1); % Define RateSpec Rate = 0.05; Compounding = -1; RateSpec = intenvset('ValuationDate', Settle, 'StartDates',... Settle, 'EndDates', Maturity, 'Rates', Rate, 'Compounding', Compounding); % Define the Correlation matrix. Correlation matrices are symmetric, % and have ones along the main diagonal. Corr = [1 0.50 0.50; 0.50 1 0.50;0.50 0.50 1]; % Define BasketStockSpec AssetPrice = [35;40;45]; Volatility = [0.12;0.15;0.18]; Quantity = [0.333;0.333;0.333]; BasketStockSpec = basketstockspec(Volatility, AssetPrice, Quantity, Corr); % Compute the price of the call basket option OptSpec = {'call'}; Strike = 42; AmericanOpt = 1; % American option Price = basketbyls(RateSpec, BasketStockSpec, OptSpec, Strike, Settle, Maturity,... 'AmericanOpt',AmericanOpt)

Price = 5.4687

Increase the number of simulation trials to 2000 to give the following results:

NumTrial = 2000; Price = basketbyls(RateSpec, BasketStockSpec, OptSpec, Strike, Settle, Maturity,... 'AmericanOpt',AmericanOpt,'NumTrials',NumTrial)

Price = 5.5501

## Input Arguments

`BasketStockSpec`

— `BasketStock`

specification

structure

`BasketStock`

specification, specified using `basketstockspec`

.

**Data Types: **`struct`

`OptSpec`

— Definition of option

character vector with values `'call'`

or
`'put'`

| cell array of character vectors with values `'call'`

or
`'put'`

Definition of the option as `'call'`

or `'put'`

,
specified as a character vector or a `2`

-by-`1`

cell
array of character vectors.

**Data Types: **`char`

| `cell`

`Strike`

— Option strike price value

scalar numeric | vector

Option strike price value, specified as one of the following:

For a European or Bermuda option,

`Strike`

is a scalar (European) or`1`

-by-`NSTRIKES`

(Bermuda) vector of strike prices.For an American option,

`Strike`

is a scalar vector of the strike price.

**Data Types: **`double`

`Settle`

— Settlement or trade date

datetime scalar | string scalar | date character vector

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

To support existing code, `basketbyls`

also
accepts serial date numbers as inputs, but they are not recommended.

`ExerciseDates`

— Option exercise dates

datetime array | string array | date character vector

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

For a European or Bermuda option,

`ExerciseDates`

is a`1`

-by-`1`

(European) or`1`

-by-`NSTRIKES`

(Bermuda) vector of exercise dates. For a European option, there is only one`ExerciseDate`

on the option expiry date.For an American option,

`ExerciseDates`

is a`1`

-by-`2`

vector of exercise date boundaries. The option exercises on any date between, or including, the pair of dates on that row. If there is only one non-`NaN`

date, or if`ExerciseDates`

is`1`

-by-`1`

, the option exercises between the`Settle`

date and the single listed`ExerciseDate`

.

To support existing code, `basketbyls`

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 = basketbyls(RateSpec,BasketStockSpec,OptSpec,
Strike,Settle,Maturity,'AmericanOpt',AmericanOpt,'NumTrials',NumTrial)
```

`AmericanOpt`

— Option type

`0`

(European/Bermuda) (default) | values `[0,1]`

Option type, specified as the comma-separated pair consisting of
`'AnericanOpt'`

and a
`NINST`

-by-`1`

positive integer scalar flags with
values:

`0`

— European/Bermuda`1`

— American

**Note**

For American 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: **`double`

`NumPeriods`

— Number of simulation periods per trial

`100`

(default) | nonnegative integer

Number of simulation periods per trial, specified as the comma-separated pair
consisting of `'NumPeriods'`

and a scalar nonnegative integer.

**Note**

`NumPeriods`

is considered only when pricing European basket
options. For American and Bermuda basket options, `NumPeriod`

equals the number of exercise days during the life of the option.

**Data Types: **`double`

`NumTrials`

— Number of independent sample paths (simulation trials)

`1000`

(default) | nonnegative integer

Number of independent sample paths (simulation trials), specified as the
comma-separated pair consisting of `'NumTrials'`

and a scalar
nonnegative integer.

**Data Types: **`double`

`Z`

— Time series array of dependent random variates

vector

Time series array of dependent random variates, specified as the comma-separated
pair consisting of `'Z'`

and a
`NumPeriods`

-by-`NINST`

-by-`NumTrials`

3-D time series array. The `Z`

value generates the Brownian motion
vector (that is, Wiener processes) that drives the simulation.

**Data Types: **`double`

`Antithetic`

— Indicator for antithetic sampling

`false`

(default) | scalar logical flag with value of `true`

or
`false`

Indicator for antithetic sampling, specified as the comma-separated pair
consisting of `'Antithetic'`

and a value of `true`

or `false`

.

**Data Types: **`logical`

## Output Arguments

`Price`

— Expected prices for basket option

matrix

Expected prices for basket option, returned as a
`NINST`

-by-`1`

matrix.

`Paths`

— Simulated paths of correlated state variables

vector

Simulated paths of correlated state variables, returned as a ```
NumPeriods +
1
```

-by-`1`

-by-`NumTrials`

3-D time series
array of simulated paths of correlated state variables. Each row of
`Paths`

is the transpose of the state vector
*X*(*t*) at time *t* for a given
trial.

`Times`

— Observation times associated with simulated paths

vector

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`

.

`Z`

— Time series array of dependent random variates

vector

Time series array of dependent random variates, returned as a
`NumPeriods`

-by-`1`

-by-`NumTrials`

3-D array when `Z`

is specified as an input argument. If the
`Z`

input argument is not specified, then the `Z`

output argument contains the random variates generated internally.

## More About

### Basket Option

A *basket option* is an option on a portfolio of
several underlying equity assets.

Payout for a basket option depends on the cumulative performance of the collection of the individual assets. A basket option tends to be cheaper than the corresponding portfolio of plain vanilla options for these reasons:

If the basket components correlate negatively, movements in the value of one component neutralize opposite movements of another component. Unless all the components correlate perfectly, the basket option is cheaper than a series of individual options on each of the assets in the basket.

A basket option minimizes transaction costs because an investor has to purchase only one option instead of several individual options.

For more information, see Basket Option.

## References

[1] Longstaff, F.A., and E.S.
Schwartz. “Valuing American Options by Simulation: A Simple Least-Squares
Approach.” *The Review of Financial Studies.* Vol. 14, No. 1,
Spring 2001, pp. 113–147.

## Version History

**Introduced in R2009b**

### R2022b: Serial date numbers not recommended

Although `basketbyls`

supports serial date numbers,
`datetime`

values are recommended instead. The
`datetime`

data type provides flexible date and time
formats, storage out to nanosecond precision, and properties to account for time
zones and daylight saving time.

To convert serial date numbers or text to `datetime`

values, use the `datetime`

function. For example:

t = datetime(738427.656845093,"ConvertFrom","datenum"); y = year(t)

y = 2021

There are no plans to remove support for serial date number inputs.

## MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)