spreadsensbybjs
Calculate European spread option prices or sensitivities using Bjerksund-Stensland pricing model
Syntax
Description
returns the European spread option prices or sensitivities using the Bjerksund-Stensland
pricing model.PriceSens
= spreadbybjs(RateSpec
,StockSpec1
,StockSpec2
,Settle
,Maturity
,OptSpec
,Strike
,Corr
)
Note
Alternatively, you can use the Spread
object to calculate
price or sensitivities for spread options. For more information, see Get Started with Workflows Using Object-Based Framework for Pricing Financial Instruments.
adds optional name-value pair arguments.PriceSens
= spreadsensbybjs(___,Name,Value
)
Examples
Compute the Price and Sensitivities of a Spread Option Using the Bjerksund-Stensland Model
Define the spread option dates.
Settle = datetime(2012,6,1); Maturity = datetime(2012,9,1);
Define asset 1. Price and volatility of RBOB gasoline
Price1gallon = 2.85; % $/gallon Price1 = Price1gallon * 42; % $/barrel Vol1 = 0.29;
Define asset 2. Price and volatility of WTI crude oil
Price2 = 93.20; % $/barrel
Vol2 = 0.36;
Define the correlation between the underlying asset prices of asset 1 and asset 2.
Corr = 0.42;
Define the spread option.
OptSpec = 'call';
Strike = 20;
Define the RateSpec
.
rates = 0.05; Compounding = -1; Basis = 1; RateSpec = intenvset('ValuationDate', Settle, 'StartDates', Settle, ... 'EndDates', Maturity, 'Rates', rates, ... 'Compounding', Compounding, 'Basis', Basis)
RateSpec = struct with fields:
FinObj: 'RateSpec'
Compounding: -1
Disc: 0.9876
Rates: 0.0500
EndTimes: 0.2500
StartTimes: 0
EndDates: 735113
StartDates: 735021
ValuationDate: 735021
Basis: 1
EndMonthRule: 1
Define the StockSpec
for the two assets.
StockSpec1 = stockspec(Vol1, Price1)
StockSpec1 = struct with fields:
FinObj: 'StockSpec'
Sigma: 0.2900
AssetPrice: 119.7000
DividendType: []
DividendAmounts: 0
ExDividendDates: []
StockSpec2 = stockspec(Vol2, Price2)
StockSpec2 = struct with fields:
FinObj: 'StockSpec'
Sigma: 0.3600
AssetPrice: 93.2000
DividendType: []
DividendAmounts: 0
ExDividendDates: []
Compute the spread option price and sensitivities based on the Kirk model.
OutSpec = {'Price', 'Delta', 'Gamma'}; [Price, Delta, Gamma] = spreadsensbybjs(RateSpec, StockSpec1, StockSpec2, Settle, ... Maturity, OptSpec, Strike, Corr, 'OutSpec', OutSpec)
Price = 11.2000
Delta = 1×2
0.6737 -0.6082
Gamma = 1×2
0.0190 0.0216
Input Arguments
StockSpec1
— Stock specification for underlying asset 1
structure
Stock specification for underlying asset 1.
For information on the stock specification, see
stockspec
.
stockspec
can handle other 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
StockSpec2
— Stock specification for underlying asset 2
structure
Stock specification for underlying asset 2.
For information on the stock specification, see
stockspec
.
stockspec
can handle other 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
Settle
— Settlement dates for spread option
datetime array | string array | date character vector
Settlement dates for the spread option,
specified a NINST
-by-1
vector using a datetime
array, string array, or date character vectors.
To support existing code, spreadsensbybjs
also
accepts serial date numbers as inputs, but they are not recommended.
Maturity
— Maturity date for spread option
datetime array | string array | date character vector
Maturity date for spread option, specified
as a NINST
-by-1
vector using a datetime array,
string array, or date character vectors.
To support existing code, spreadsensbybjs
also
accepts serial date numbers as inputs, but they are not recommended.
OptSpec
— Definition of option
character vector with values
'call'
or
'put'
| cell array of character vectors
Definition of option as
'call'
or
'put'
, specified as a
NINST
-by-1
cell array of character vectors.
Data Types: char
| cell
Strike
— Option strike price values
integer | vector of integers
Option strike price values, specified as an
integer using a
NINST
-by-1
vector of strike price values.
If Strike
is equal to
zero the function computes the price and
sensitivities of an exchange option.
Data Types: double
Corr
— Correlation between underlying asset prices
integer | vector of integers
Correlation between underlying asset prices,
specified as an integer using a
NINST
-by-1
vector.
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: PriceSens =
spreadsensbykirk(RateSpec,StockSpec1,StockSpec2,Settle,Maturity,OptSpec,Strike,Corr,OutSpec,{'All'})
OutSpec
— Define outputs
{'Price'}
(default) | character vector with values
'Price'
,
'Delta'
,
'Gamma'
,
'Vega'
,
'Lambda'
,
'Rho'
,
'Theta'
, and
'All'
| cell array of character vectors with values
'Price'
,
'Delta'
,
'Gamma'
,
'Vega'
,
'Lambda'
,
'Rho'
,
'Theta'
, and
'All'
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
PriceSens
— Expected prices or sensitivities values of spread option
vector
Expected prices or sensitivities values
(defined by OutSpec
) of the
spread option, returned as a
NINST
-by-1
or
NINST
-by-2
vector.
More About
Spread Option
A spread option is an option written on the difference of two underlying assets.
For example, a European call on the difference of two assets X1 and X2 would have the following pay off at maturity:
where:
K is the strike price.
For more information, see Spread Option.
References
[1] Carmona, R., Durrleman, V. “Pricing and Hedging Spread Options,” SIAM Review. Vol. 45, No. 4, pp. 627–685, Society for Industrial and Applied Mathematics, 2003.
[2] Bjerksund, Petter, Stensland, Gunnar. “Closed form spread option valuation.” Department of Finance, NHH, 2006.
Version History
Introduced in R2013bR2022b: Serial date numbers not recommended
Although spreadsensbybjs
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)