lookbackbyls

Price European or American lookback options using Monte Carlo simulations

Description

[Price,Paths,Times,Z] = lookbackbyls(RateSpec,StockSpec,OptSpec,Strike,Settle,ExerciseDates) returns prices of lookback options using the Longstaff-Schwartz model for Monte Carlo simulations. lookbackbyls computes prices of European and American lookback options.

For American options, the Longstaff-Schwartz least squares method calculates the early exercise premium.

lookbackbyls calculates values of fixed- and floating-strike lookback options. To compute the value of a floating-strike lookback option, Strike must be specified as NaN.

Note

Alternatively, you can use the Lookback object to price lookback options. For more information, see Get Started with Workflows Using Object-Based Framework for Pricing Financial Instruments.

example

[Price,Paths,Times,Z] = lookbackbyls(___,Name,Value) adds optional name-value pair arguments.

example

Examples

collapse all

Define the RateSpec.

StartDates = datetime(2013,1,1);
EndDates = datetime(2014,1,1);
Rates = 0.042;
Compounding = -1;
RateSpec = intenvset('ValuationDate', StartDates, 'StartDates', StartDates,...
'EndDates', EndDates, 'Rates', Rates, 'Compounding', Compounding)
RateSpec = struct with fields:
FinObj: 'RateSpec'
Compounding: -1
Disc: 0.9589
Rates: 0.0420
EndTimes: 1
StartTimes: 0
EndDates: 735600
StartDates: 735235
ValuationDate: 735235
Basis: 0
EndMonthRule: 1

Define the StockSpec.

AssetPrice = 50;
Sigma = 0.36;
StockSpec = stockspec(Sigma, AssetPrice)
StockSpec = struct with fields:
FinObj: 'StockSpec'
Sigma: 0.3600
AssetPrice: 50
DividendType: []
DividendAmounts: 0
ExDividendDates: []

Define the floating lookback option.

Settle   = datetime(2013,1,1);
Maturity = datetime(2013,4,1);
OptSpec = 'put';
Strike = NaN;

Compute the price of the European floating lookback option.

Price = lookbackbyls(RateSpec, StockSpec, OptSpec, Strike, Settle, Maturity)
Price =
6.6471

Define the RateSpec.

StartDates = 'Jan-1-2013';
EndDates = 'Jan-1-2014';
Rates = 0.045;
Compounding = -1;
RateSpec = intenvset('ValuationDate', StartDates, 'StartDates', StartDates,...
'EndDates', EndDates, 'Rates', Rates,'Compounding', Compounding)
RateSpec = struct with fields:
FinObj: 'RateSpec'
Compounding: -1
Disc: 0.9560
Rates: 0.0450
EndTimes: 1
StartTimes: 0
EndDates: 735600
StartDates: 735235
ValuationDate: 735235
Basis: 0
EndMonthRule: 1

Define the StockSpec.

AssetPrice = 102;
Sigma = 0.45;
StockSpec = stockspec(Sigma, AssetPrice)
StockSpec = struct with fields:
FinObj: 'StockSpec'
Sigma: 0.4500
AssetPrice: 102
DividendType: []
DividendAmounts: 0
ExDividendDates: []

Define the fixed lookback option.

Settle   = 'Jan-1-2013';
Maturity = 'July-1-2013';
OptSpec = 'call';
Strike = 98;

Compute the price of the European fixed lookback option.

Price = lookbackbyls(RateSpec, StockSpec, OptSpec, Strike, Settle, Maturity)
Price =
30.2368

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 the underlying asset. For information on the stock specification, see stockspec.

stockspec handles several types of underlying assets. For example, for physical commodities the price is represented by StockSpec.Asset, the volatility is represented by StockSpec.Sigma, and the convenience yield is represented by StockSpec.DividendAmounts.

Data Types: struct

Definition of option as 'call' or 'put', specified as a NINST-by-1 cell array of character vectors.

Data Types: char | cell

Option strike price values, specified as an integer using a NINST-by-1 vector of strike price values.

Data Types: single | double

Settlement or trade date for the lookback option, specified as a NINST-by-1 vector using a datetime array, string array, or date character vectors.

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

Exercise callable or puttable dates for European or American options, specified as a datetime array, string array, or date character vectors as follows:

• European option — NINST-by-1 vector of exercise dates. For a European option, there is only one exercise date which is the option expiry date.

• American option — NINST-by-2 vector of exercise date boundaries. For each instrument, the option is exercised on any coupon date between or including the pair of dates on that row. If only one non-NaN date is listed, or if ExerciseDates is a NINST-by-1 vector of dates, the option is exercised between Settle and the single listed exercise date.

To support existing code, lookbackbyls 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 = lookbackbyls(RateSpec,StockSpec1,StockSpec2,Settle,Maturity,OptSpec,Strike,Corr,'AmericanOpt',1)

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

• 0 — European

• 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

Scalar number of independent sample paths (simulation trials), specified as the comma-separated pair consisting of 'NumTrials' and a nonnegative integer.

Data Types: double

Scalar number of simulation periods per trial, specified as the comma-separated pair consisting of 'NumPeriods' and a nonnegative integer. NumPeriods is considered only when pricing European lookback options. For American lookback options, NumPeriods is equal to the number of exercise days during the life of the option.

Data Types: double

Time series array of dependent random variates, specified as the comma-separated pair consisting of 'Z' and a NumPeriods-by-1-by-NumTrials 3-D array. The Z value generates the Brownian motion vector (that is, Wiener processes) that drives the simulation.

Data Types: double

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

collapse all

Expected price of the lookback option, returned as a 1-by-1 scalar.

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.

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.

collapse all

Lookback Option

A lookback option is a path-dependent option based on the maximum or minimum value the underlying asset achieves during the entire life of the option.

Financial Instruments Toolbox™ software supports two types of lookback options: fixed and floating. Fixed lookback options have a specified strike price, while floating lookback options have a strike price determined by the asset path. For more information, see Lookback Option.

References

[1] Hull, J. C. Options, Futures, and Other Derivatives 5th Edition. Englewood Cliffs, NJ: Prentice Hall, 2002.

Version History

Introduced in R2014a

expand all