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

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

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

### R2022b: 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.

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