optpricebysim
Price option given simulated underlying values
Syntax
Description
calculates the price of European, American, and Berumdan call/put options based on
risk-neutral simulation of the underlying asset. For American and Bermudan options, the
Longstaff-Schwartz least squares method calculates the early exercise premium.Price
= optpricebysim(RateSpec
,SimulatedPrices
,Times
,OptSpec
,Strike
,ExerciseTimes
)
adds optional name-value pair arguments.Price
= optpricebysim(___,Name,Value
)
Examples
Compute the Price of an American Option Using Monte Carlo Simulation Based on Geometric Brownian Motion
Define the option.
S0 = 100; % Initial price of underlying asset Sigma = .2; % Volatility of underlying asset Strike = 110; % Strike OptSpec = 'call'; % Call option Settle = '1-Jan-2013'; % Settlement date of option Maturity = '1-Jan-2014'; % Maturity date of option r = .05; % Risk-free rate (annual, continuous compounding) Compounding = -1; % Continuous compounding Basis = 0; % Act/Act day count convention T = yearfrac(Settle, Maturity, Basis); % Time to expiration in years
Set up the gbm
object and run the Monte Carlo simulation based on Geometric Brownian Motion (GBM) using the simBySolution
method from Financial Toolbox™.
NTRIALS = 1000; NPERIODS = daysact(Settle, Maturity); dt = T/NPERIODS; OptionGBM = gbm(r, Sigma, 'StartState', S0); [Paths, Times, Z] = simBySolution(OptionGBM, NPERIODS, ... 'NTRIALS',NTRIALS, 'DeltaTime',dt,'Antithetic',true);
Create the interest-rate term structure to define RateSpec
.
RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, ... 'EndDates', Maturity, 'Rate', r, 'Compounding', Compounding, ... 'Basis', Basis)
RateSpec = struct with fields:
FinObj: 'RateSpec'
Compounding: -1
Disc: 0.9512
Rates: 0.0500
EndTimes: 1
StartTimes: 0
EndDates: 735600
StartDates: 735235
ValuationDate: 735235
Basis: 0
EndMonthRule: 1
Price an American option.
SimulatedPrices = squeeze(Paths); OptPrice = optpricebysim(RateSpec, SimulatedPrices, Times, OptSpec, ... Strike, T, 'AmericanOpt', 1)
OptPrice = 5.8172
Compute the Price of an American Asian Option Using Monte Carlo Simulation Based on Geometric Brownian Motion
Define the option.
S0 = 100; % Initial price of underlying asset Sigma = .2; % Volatility of underlying asset Strike = 110; % Strike OptSpec = 'call'; % Call option Settle = '1-Jan-2013'; % Settlement date of option Maturity = '1-Jan-2014'; % Maturity date of option r = .05; % Risk-free rate (annual, continuous compounding) Compounding = -1; % Continuous compounding Basis = 0; % Act/Act day count convention T = yearfrac(Settle, Maturity, Basis); % Time to expiration in years
Set up the gbm
object and run the Monte Carlo simulation based on Geometric Brownian Motion (GBM) using the simBySolution
method from Financial Toolbox™.
NTRIALS = 1000; NPERIODS = daysact(Settle, Maturity); dt = T/NPERIODS; OptionGBM = gbm(r, Sigma, 'StartState', S0); [Paths, Times, Z] = simBySolution(OptionGBM, NPERIODS, ... 'NTRIALS',NTRIALS, 'DeltaTime',dt,'Antithetic',true);
Create the interest-rate term structure to define RateSpec
.
RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, ... 'EndDates', Maturity, 'Rate', r, 'Compounding', Compounding, ... 'Basis', Basis)
RateSpec = struct with fields:
FinObj: 'RateSpec'
Compounding: -1
Disc: 0.9512
Rates: 0.0500
EndTimes: 1
StartTimes: 0
EndDates: 735600
StartDates: 735235
ValuationDate: 735235
Basis: 0
EndMonthRule: 1
Price an American Asian option (arithmetic mean) by finding the average price over periods.
AvgPrices = zeros(NPERIODS+1, NTRIALS); for i = 1:NPERIODS+1 AvgPrices(i,:) = mean(squeeze(Paths(1:i,:,:))); end AsianPrice = optpricebysim(RateSpec, AvgPrices, Times, OptSpec, ... Strike, T, 'AmericanOpt', 1)
AsianPrice = 1.8221
Compute the Price of an American Lookback Option Using Monte Carlo Simulation Based on Geometric Brownian Motion
Define the option.
S0 = 100; % Initial price of underlying asset Sigma = .2; % Volatility of underlying asset Strike = 110; % Strike OptSpec = 'call'; % Call option Settle = '1-Jan-2013'; % Settlement date of option Maturity = '1-Jan-2014'; % Maturity date of option r = .05; % Risk-free rate (annual, continuous compounding) Compounding = -1; % Continuous compounding Basis = 0; % Act/Act day count convention T = yearfrac(Settle, Maturity, Basis); % Time to expiration in years
Set up the gbm
object and run the Monte Carlo simulation based on Geometric Brownian Motion (GBM) using the simBySolution
method from Financial Toolbox™.
NTRIALS = 1000; NPERIODS = daysact(Settle, Maturity); dt = T/NPERIODS; OptionGBM = gbm(r, Sigma, 'StartState', S0); [Paths, Times, Z] = simBySolution(OptionGBM, NPERIODS, ... 'NTRIALS',NTRIALS, 'DeltaTime',dt,'Antithetic',true);
Create the interest-rate term structure to define RateSpec
.
RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, ... 'EndDates', Maturity, 'Rate', r, 'Compounding', Compounding, ... 'Basis', Basis)
RateSpec = struct with fields:
FinObj: 'RateSpec'
Compounding: -1
Disc: 0.9512
Rates: 0.0500
EndTimes: 1
StartTimes: 0
EndDates: 735600
StartDates: 735235
ValuationDate: 735235
Basis: 0
EndMonthRule: 1
Price an American lookback option by finding the maximum price over periods.
MaxPrices = zeros(NPERIODS+1, NTRIALS); LastPrice = squeeze(Paths(1,:,:))'; for i = 1:NPERIODS+1; MaxPrices(i,:) = max([LastPrice; Paths(i,:)]); LastPrice = MaxPrices(i,:); end LookbackPrice = optpricebysim(RateSpec, MaxPrices, Times, OptSpec, ... Strike, T, 'AmericanOpt', 1)
LookbackPrice = 10.4410
Compute the Price of a Bermudan Option Using Monte Carlo Simulation Based on Geometric Brownian Motion
Define the option.
S0 = 80; % Initial price of underlying asset Sigma = .3; % Volatility of underlying asset Strike = 75; % Strike OptSpec = 'put'; % Put option Settle = '1-Jan-2013'; % Settlement date of option Maturity = '1-Jan-2014'; % Maturity date of option ExerciseDates = {'1-Jun-2013', '1-Jan-2014'}; % Exercise dates of option r = .05; % Risk-free rate (annual, continuous compounding) Compounding = -1; % Continuous compounding Basis = 0; % Act/Act day count convention T = yearfrac(Settle, Maturity, Basis); % Time to expiration in years ExerciseTimes = yearfrac(Settle, ExerciseDates, Basis); % Exercise times
Set up the gbm
object and run the Monte Carlo simulation based on Geometric Brownian Motion (GBM) using the simBySolution
method from Financial Toolbox™.
NTRIALS = 1000; NPERIODS = daysact(Settle, Maturity); dt = T/NPERIODS; OptionGBM = gbm(r, Sigma, 'StartState', S0); [Paths, Times, Z] = simBySolution(OptionGBM, NPERIODS, ... 'NTRIALS',NTRIALS, 'DeltaTime',dt,'Antithetic',true);
Create the interest-rate term structure to define RateSpec
.
RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, ... 'EndDates', Maturity, 'Rate', r, 'Compounding', Compounding, ... 'Basis', Basis)
RateSpec = struct with fields:
FinObj: 'RateSpec'
Compounding: -1
Disc: 0.9512
Rates: 0.0500
EndTimes: 1
StartTimes: 0
EndDates: 735600
StartDates: 735235
ValuationDate: 735235
Basis: 0
EndMonthRule: 1
Price the Bermudan option.
SimulatedPrices = squeeze(Paths);
BermudanPrice = optpricebysim(RateSpec, SimulatedPrices, Times, ...
OptSpec, Strike, ExerciseTimes)
BermudanPrice = 5.2014
Compute the Price of an American Spread Option Using Monte Carlo Simulation Based on Geometric Brownian Motion
Define the option.
S1 = 110; % Price of first underlying asset S2 = 100; % Price of second underlying asset Sigma1 = .1; % Volatility of first underlying asset Sigma2 = .15; % Volatility of second underlying asset Strike = 15; % Strike Rho = .3; % Correlation between underlyings OptSpec = 'put'; % Put option Settle = '1-Jan-2013'; % Settlement date of option Maturity = '1-Jan-2014'; % Maturity date of option r = .05; % Risk-free rate (annual, continuous compounding) Compounding = -1; % Continuous compounding Basis = 0; % Act/Act day count convention T = yearfrac(Settle, Maturity, Basis); % Time to expiration in years
Set up the gbm
object and run the Monte Carlo simulation based on Geometric Brownian Motion (GBM) using the simBySolution
method from Financial Toolbox™.
NTRIALS = 1000; NPERIODS = daysact(Settle, Maturity); dt = T/NPERIODS; SpreadGBM = gbm(r*eye(2), diag([Sigma1;Sigma2]),'Correlation',... [1 Rho;Rho 1],'StartState',[S1;S2]); [Paths, Times, Z] = simBySolution(SpreadGBM, NPERIODS,'NTRIALS',NTRIALS,... 'DeltaTime',dt,'Antithetic',true);
Create the interest-rate term structure to define RateSpec
.
RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, ... 'EndDates', Maturity, 'Rate', r, 'Compounding', Compounding, ... 'Basis', Basis)
RateSpec = struct with fields:
FinObj: 'RateSpec'
Compounding: -1
Disc: 0.9512
Rates: 0.0500
EndTimes: 1
StartTimes: 0
EndDates: 735600
StartDates: 735235
ValuationDate: 735235
Basis: 0
EndMonthRule: 1
Price the American spread option.
Spread = squeeze(Paths(:,1,:) - Paths(:,2,:)); SpreadPrice = optpricebysim(RateSpec, Spread, Times, OptSpec, Strike, ... T, 'AmericanOpt', 1)
SpreadPrice = 9.0007
Input Arguments
RateSpec
— Interest-rate term structure of risk-free rates
structure
Interest-rate term structure of risk-free rates (annualized and continuously
compounded), specified by the RateSpec
obtained from intenvset
. The valuation date must be at the settlement date of the
option, and the day-count basis and end-of-month rule must be the same as those used to
calculate the Times
input. For information on the interest-rate
specification, see intenvset
.
Data Types: struct
SimulatedPrices
— Simulated prices
matrix
Simulated prices, specified using a (NumPeriods
+
1
)-by-NumTrials
matrix of risk-neutral simulated
prices. The first element of SimulatedPrices
is the initial value
at time 0.
Data Types: single
| double
Times
— Annual time factors associated with simulated prices
vector
Annual time factors associated with simulated prices, specified using a
(NumPeriods
+ 1
)-by-1
column
vector. Each element of Times
is associated with the corresponding
row of SimulatedPrices
. The first element of
Times
must be 0 (current time).
Data Types: single
| double
OptSpec
— Definition of option
character vector with values 'call'
or
'put'
Definition of option as 'call'
or 'put'
,
specified as a character vector.
Data Types: char
Strike
— Option strike price values
scalar | function handle
Option strike price values, specified as a scalar value Strike
price. Strike
for Bermudan options can be specified as a
1
-by-NSTRIKES
vector or a function handle that
returns the value of the strike given the time of the strike.
Data Types: single
| double
| function_handle
ExerciseTimes
— Exercise time for option
vector of exercise times
Exercise time for the option, specified as a vector of exercise times as follows:
For a European or Bermudan option,
ExerciseTimes
is a1
-by-1
(European) or1
-by-NSTRIKES
(Bermudan) vector of exercise times. For a European option, there is only oneExerciseTimes
on the option expiry date.For an American option,
ExerciseTimes
is a1
-by-2
vector of exercise time boundaries. The option exercises on any date between, or including, the pair of times on that row. IfExerciseTimes
is1
-by-1
, the option exercises between time0
and the single listedExerciseTimes
.
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 =
optpricebysim(RateSpec,Prices,Times,OptSpec,Settle,Strike,ExerciseTimes,'AmericanOpt',1)
AmericanOpt
— Option type
0
European or Bermudan (default) | scalar flag with value [0,1]
Option type, specified as the comma-separated pair consisting of
'AmericanOpt'
and an integer scalar flag with values:
0
— European or Bermudan1
— American
For American options, the Longstaff-Schwartz least squares method calculates the early exercise premium.
Data Types: single
| double
Output Arguments
Price
— Price of option
scalar
Price of the option, returned as a scalar value.
Version History
Open Example
You have a modified version of this example. Do you want to open this example with your edits?
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)