Calculate European spread option prices or sensitivities using Bjerksund-Stensland pricing model

Description

example

PriceSens = spreadbybjs(RateSpec,StockSpec1,StockSpec2,Settle,Maturity,OptSpec,Strike,Corr) returns the European spread option prices or sensitivities using the Bjerksund-Stensland pricing model.

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.

Examples

collapse all

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;

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

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 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

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

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 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.

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.

If Strike is equal to zero the function computes the price and sensitivities of an exchange option.

Data Types: double

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.

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 prices or sensitivities values (defined by OutSpec) of the spread option, returned as a NINST-by-1 or NINST-by-2 vector.

collapse all

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:

$\mathrm{max}\left(X1-X2-K,0\right)$

where:

K is the strike price.