Price swaption from Heath-Jarrow-Morton interest-rate tree

This example shows how to price a 1-year call swaption using an HJM interest-rate tree. Assume that interest rate is fixed at 5% annually between the valuation date of the tree until its maturity. Build a tree with the following data.

Rates = [ 0.05;0.05;0.05;0.05]; StartDates = 'jan-1-2007'; EndDates =['jan-1-2008';'jan-1-2009';'jan-1-2010';'jan-1-2011']; ValuationDate = StartDates; Compounding = 1; % define the RateSpec RateSpec = intenvset('Rates', Rates, 'StartDates', StartDates, 'EndDates',... EndDates, 'Compounding', Compounding); % use VolSpec to compute the interest-rate volatility VolSpec=hjmvolspec('Constant',0.01); % use TimeSpec to specify the structure of the time layout for the HJM interest-rate tree TimeSpec = hjmtimespec(ValuationDate, EndDates, Compounding); % build the HJM tree HJMTree = hjmtree(VolSpec, RateSpec, TimeSpec); % use the following swaption arguments ExerciseDates = '01-Jan-2008'; SwapSettlement = ExerciseDates; SwapMaturity = 'jan-1-2010'; Spread = [0]; SwapReset = 1; Basis = 1; Principal = 100; OptSpec = 'call'; Strike=0.05; % price the swaption [Price, PriceTree] = swaptionbyhjm(HJMTree, OptSpec, Strike, ExerciseDates, ... Spread, SwapSettlement, SwapMaturity,'SwapReset', SwapReset, ... 'Basis', Basis, 'Principal', Principal)

Price = 0.9296

`PriceTree = `*struct with fields:*
FinObj: 'HJMPriceTree'
tObs: [5x1 double]
PBush: {1x5 cell}

This example shows how to price a 1-year call swaption with receiving and paying legs using an HJM interest-rate tree. Assume that interest rate is fixed at 5% annually between the valuation date of the tree until its maturity. Build a tree with the following data.

Rates = [ 0.05;0.05;0.05;0.05]; StartDates = 'jan-1-2007'; EndDates =['jan-1-2008';'jan-1-2009';'jan-1-2010';'jan-1-2011']; ValuationDate = StartDates; Compounding = 1;

Define the `RateSpec`

.

RateSpec = intenvset('Rates',Rates,'StartDates',StartDates,'EndDates',... EndDates,'Compounding',Compounding);

Use `VolSpec`

to compute the interest-rate volatility.

`VolSpec=hjmvolspec('Constant',0.01);`

Use `TimeSpec`

to specify the structure of the time layout for the HJM interest-rate tree.

TimeSpec = hjmtimespec(ValuationDate,EndDates,Compounding);

Build the HJM tree.

HJMTree = hjmtree(VolSpec,RateSpec,TimeSpec);

Use the following swaption arguments

ExerciseDates = '01-Jan-2008'; SwapSettlement = ExerciseDates; SwapMaturity = 'jan-1-2010'; Spread = [0]; SwapReset = [1 1]; % 1st column represents receiving leg, 2nd column represents paying leg Basis = [1 3]; % 1st column represents receiving leg, 2nd column represents paying leg Principal = 100; OptSpec = 'call'; Strike=0.05;

Price the swaption.

[Price, PriceTree] = swaptionbyhjm(HJMTree,OptSpec,Strike,ExerciseDates, ... Spread,SwapSettlement,SwapMaturity,'SwapReset',SwapReset, ... 'Basis',Basis,'Principal',Principal)

Price = 0.9296

`PriceTree = `*struct with fields:*
FinObj: 'HJMPriceTree'
tObs: [5x1 double]
PBush: {1x5 cell}

`HJMTree`

— Interest-rate tree structurestructure

Interest-rate tree structure, specified by using `hjmtree`

.

**Data Types: **`struct`

`OptSpec`

— Definition of option character vector with values

`'call'`

or `'put'`

| cell array of character vector with values `'call'`

or `'put'`

Definition of the option as `'call'`

or `'put'`

,
specified as a `NINST`

-by-`1`

cell
array of character vectors. For more information, see More About.

**Data Types: **`char`

| `cell`

`Strike`

— Strike swap rate valuesdecimal

Strike swap rate values, specified as a `NINST`

-by-`1`

vector.

**Data Types: **`double`

`ExerciseDates`

— Exercise dates for swaptionserial date number | date character vector | cell array of date character vectors

Exercise dates for the swaption, specified as a `NINST`

-by-`1`

vector
or `NINST`

-by-`2`

using serial date
numbers or date character vectors, depending on the option type.

For a European option,

`ExerciseDates`

are a`NINST`

-by-`1`

vector of exercise dates. Each row is the schedule for one option. When using a European option, there is only one`ExerciseDate`

on the option expiry date.For an American option,

`ExerciseDates`

are a`NINST`

-by-`2`

vector of exercise date boundaries. For each instrument, the option can be 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`NINST`

-by-`1`

, the option can be exercised between the`ValuationDate`

of the tree and the single listed`ExerciseDate`

.

**Data Types: **`double`

| `char`

| `cell`

`Spread`

— Number of basis points over reference ratenumeric

Number of basis points over the reference rate, specified as
a `NINST`

-by-`1`

vector.

**Data Types: **`double`

`Settle`

— Settlement dateserial date number | date character vector | cell array of date character vectors

Settlement date (representing the settle date for each swap), specified as a
`NINST`

-by-`1`

vector of serial date numbers or
date character vectors. The `Settle`

date for every swaption is set
to the `ValuationDate`

of the HJM tree. The swap argument
`Settle`

is ignored. The underlying swap starts at the maturity of
the swaption.

**Data Types: **`double`

| `char`

`Maturity`

— Maturity date for swapserial date number | date character vector | cell array of date character vectors

Maturity date for each swap, specified as a `NINST`

-by-`1`

vector
of dates using serial date numbers or date character vectors.

**Data Types: **`double`

| `char`

| `cell`

Specify optional
comma-separated pairs of `Name,Value`

arguments. `Name`

is
the argument name and `Value`

is the corresponding value.
`Name`

must appear inside quotes. You can specify several name and value
pair arguments in any order as
`Name1,Value1,...,NameN,ValueN`

.

```
[Price,PriceTree] = swaptionbyhjm(HJMTree,OptSpec,
ExerciseDates,Spread,Settle,Maturity,'SwapReset',4,'Basis',5,'Principal',10000)
```

`'AmericanOpt'`

— Option type`0`

(European) (default) | integer with values `0`

or `1`

(Optional) Option type, specified as the comma-separated pair consisting of
`'AmericanOpt'`

and
`NINST`

-by-`1`

positive integer flags with values:

`0`

— European`1`

— American

**Data Types: **`double`

`'SwapReset'`

— Reset frequency per year for underlying swap`1`

(default) | numericReset frequency per year for the underlying swap, specified as the comma-separated pair
consisting of `'SwapReset'`

and a
`NINST`

-by-`1`

vector or
`NINST`

-by-`2`

matrix representing the reset
frequency per year for each leg. If `SwapReset`

is
`NINST`

-by-`2`

, the first column represents the
receiving leg, while the second column represents the paying leg.

**Data Types: **`double`

`'Basis'`

— Day-count basis of instrument`0`

(actual/actual) (default) | integer from `0`

to `13`

Day-count basis representing the basis used when annualizing the input forward rate tree for
each instrument, specified as the comma-separated pair consisting of
`'Basis'`

and a `NINST`

-by-`1`

vector or `NINST`

-by-`2`

matrix representing the
basis for each leg. If `Basis`

is
`NINST`

-by-`2`

, the first column represents the
receiving leg, while the second column represents the paying leg.

0 = actual/actual

1 = 30/360 (SIA)

2 = actual/360

3 = actual/365

4 = 30/360 (PSA)

5 = 30/360 (ISDA)

6 = 30/360 (European)

7 = actual/365 (Japanese)

8 = actual/actual (ICMA)

9 = actual/360 (ICMA)

10 = actual/365 (ICMA)

11 = 30/360E (ICMA)

12 = actual/365 (ISDA)

13 = BUS/252

For more information, see Basis.

**Data Types: **`double`

`'Principal'`

— Notional principal amount`100`

(default) | numericNotional principal amount, specified as the comma-separated pair consisting of
`'Principal'`

and a
`NINST`

-by-`1`

vector.

**Data Types: **`double`

`'Options'`

— Derivatives pricing options structurestructure

Derivatives pricing options structure, specified as the comma-separated pair consisting of
`'Options'`

and a structure obtained from using `derivset`

.

**Data Types: **`struct`

`Price`

— Expected prices of swaptions at time 0vector

Expected prices of the swaptions at time 0, returned as a `NINST`

-by-`1`

vector.

`PriceTree`

— Tree structure of instrument pricesstructure

Tree structure of instrument prices, returned as a MATLAB^{®} structure
of trees containing vectors of swaption instrument prices and a vector
of observation times for each node. Within `PriceTree`

:

`PriceTree.PTree`

contains the clean prices.`PriceTree.tObs`

contains the observation times.

A *call swaption* or payer swaption allows the option
buyer to enter into an interest-rate swap in which the buyer of the option pays the fixed
rate and receives the floating rate.

A *put swaption* or receiver swaption allows the option
buyer to enter into an interest-rate swap in which the buyer of the option receives the
fixed rate and pays the floating rate.

A modified version of this example exists on your system. Do you want to open this version instead?

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.

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

Select web siteYou can also select a web site from the following list:

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

- América Latina (Español)
- Canada (English)
- United States (English)

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