Price convertible bonds from CRR binomial tree

`[`

prices convertible bonds from a CRR binomial tree using a credit spread or incorporating
the risk of bond default.`Price`

,`PriceTree`

,`EquityTree`

,`DebtTree`

]
= cbondbycrr(___,`Name,Value`

)

To incorporate the risk in the form of credit spread (Tsiveriotis-Fernandes method),
use the optional name-value pair input argument `Spread`

. To
incorporate default risk into the algorithm, specify the optional name-value pair input
arguments `DefaultProbability`

and
`RecoveryRate`

.

Price a convertible bond using the following data for the interest-rate term structure:

StartDates = 'Jan-1-2014'; EndDates = 'Jan-1-2015'; Rates = 0.1; Basis = 1;

Create the `RateSpec`

and `StockSpec`

.

Sigma = 0.3; Price = 50; RateSpec = intenvset('ValuationDate',StartDates,'StartDates',StartDates,'EndDates',EndDates,... 'Rates',Rates,'Compounding',-1,'Basis',Basis)

`RateSpec = `*struct with fields:*
FinObj: 'RateSpec'
Compounding: -1
Disc: 0.9048
Rates: 0.1000
EndTimes: 1
StartTimes: 0
EndDates: 735965
StartDates: 735600
ValuationDate: 735600
Basis: 1
EndMonthRule: 1

StockSpec = stockspec(Sigma,Price)

`StockSpec = `*struct with fields:*
FinObj: 'StockSpec'
Sigma: 0.3000
AssetPrice: 50
DividendType: []
DividendAmounts: 0
ExDividendDates: []

Create the CRR tree for the equity.

Settle = '1-Jan-2014'; Maturity = '1-Oct-2014'; NumSteps = 3; TimeSpec = crrtimespec(Settle,Maturity,NumSteps); CRRT = crrtree(StockSpec,RateSpec,TimeSpec)

`CRRT = `*struct with fields:*
FinObj: 'BinStockTree'
Method: 'CRR'
StockSpec: [1x1 struct]
TimeSpec: [1x1 struct]
RateSpec: [1x1 struct]
tObs: [0 0.2491 0.4982 0.7473]
dObs: [735600 735691 735782 735873]
STree: {1x4 cell}
UpProbs: [0.5465 0.5465 0.5465]

Define and price the convertible bond.

CouponRate = 0; Period = 1; ConvRatio = 2; CallExDates = '1-Oct-2014'; CallStrike = 115; AmericanCall = 1; Spread = 0.05; [Price,PriceTree,EqtTree,DbtTree] = cbondbycrr(CRRT,CouponRate,Settle,Maturity,ConvRatio,... 'Period',Period,'Spread',Spread,'CallExDates',CallExDates,'CallStrike',CallStrike,'AmericanCall',AmericanCall)

Price = 104.9490

`PriceTree = `*struct with fields:*
FinObj: 'BinPriceTree'
PTree: {1x4 cell}
tObs: [0 0.2491 0.4982 0.7473]
dObs: [735600 735691 735782 735873]

`EqtTree = `*struct with fields:*
FinObj: 'BinPriceTree'
PTree: {1x4 cell}
tObs: [0 0.2491 0.4982 0.7473]
dObs: [735600 735691 735782 735873]

`DbtTree = `*struct with fields:*
FinObj: 'BinPriceTree'
PTree: {[28.4278] [0 65.0790] [0 43.6821 96.3327] [1x4 double]}
tObs: [0 0.2491 0.4982 0.7473]
dObs: [735600 735691 735782 735873]

`DefaultProbability`

and `RecoveryRate`

Create the interest-rate term structure `RateSpec`

.

StartDates = 'Jan-1-2014'; EndDates = 'Jan-1-2016'; Rates = 0.025; Basis = 1; RateSpec = intenvset('ValuationDate',StartDates,'StartDates',... StartDates,'EndDates',EndDates,'Rates',Rates,'Compounding',-1,'Basis',Basis)

`RateSpec = `*struct with fields:*
FinObj: 'RateSpec'
Compounding: -1
Disc: 0.9512
Rates: 0.0250
EndTimes: 2
StartTimes: 0
EndDates: 736330
StartDates: 735600
ValuationDate: 735600
Basis: 1
EndMonthRule: 1

Create the `StockSpec`

.

```
AssetPrice = 110;
Sigma = 0.22;
Div = 0.02;
StockSpec = stockspec(Sigma,AssetPrice,'continuous',Div)
```

`StockSpec = `*struct with fields:*
FinObj: 'StockSpec'
Sigma: 0.2200
AssetPrice: 110
DividendType: {'continuous'}
DividendAmounts: 0.0200
ExDividendDates: []

Create the CRR tree for the equity.

Settle = '1-Jan-2014'; Maturity = '1-Oct-2014'; NumSteps = 3; TimeSpec = crrtimespec(Settle,Maturity,NumSteps); CRRT = crrtree(StockSpec,RateSpec,TimeSpec)

`CRRT = `*struct with fields:*
FinObj: 'BinStockTree'
Method: 'CRR'
StockSpec: [1x1 struct]
TimeSpec: [1x1 struct]
RateSpec: [1x1 struct]
tObs: [0 0.2491 0.4982 0.7473]
dObs: [735600 735691 735782 735873]
STree: {1x4 cell}
UpProbs: [0.4782 0.4782 0.4782]

Define and price the convertible bond using the optional `DefaultProbability`

and `RecoveryRate`

arguments.

CouponRate = 0; Period = 1; ConvRatio = 2; CallExDates = '1-Oct-2014'; CallStrike = 115; AmericanCall = 1; DefaultProbability = .30; RecoveryRate = .82; [Price,PriceTree,EqtTree,DbtTree] = cbondbycrr(CRRT,CouponRate,Settle,Maturity,ConvRatio,... 'Period',Period,'CallExDates',CallExDates,'CallStrike',CallStrike,'AmericanCall',AmericanCall,... 'DefaultProbability',DefaultProbability,'RecoveryRate',RecoveryRate)

Price = 220

`PriceTree = `*struct with fields:*
FinObj: 'BinPriceTree'
PTree: {1x4 cell}
tObs: [0 0.2491 0.4982 0.7473]
dObs: [735600 735691 735782 735873]

`EqtTree = `*struct with fields:*
FinObj: 'BinPriceTree'
PTree: {1x4 cell}
tObs: [0 0.2491 0.4982 0.7473]
dObs: [735600 735691 735782 735873]

`DbtTree = `*struct with fields:*
FinObj: 'BinPriceTree'
PTree: {[0] [0 0] [0 0 0] [0 0 0 0]}
tObs: [0 0.2491 0.4982 0.7473]
dObs: [735600 735691 735782 735873]

`CRRTree`

— Stock tree structurestructure

Stock tree structure, specified by using `crrtree`

.

**Data Types: **`struct`

`CouponRate`

— Bond coupon rate positive decimal value

Bond coupon rate, specified as an `NINST`

-by-`1`

decimal annual rate or `NINST`

-by-`1`

cell array,
where each element is a `NumDates`

-by-`2`

cell array.
The first column of the `NumDates`

-by-`2`

cell array
is dates and the second column is associated rates. The date indicates the last day that
the coupon rate is valid.

**Data Types: **`double`

| `cell`

`Settle`

— Settlement dateserial date number | date character vector

Settlement date, specified as an `NINST`

-by-`1`

scalar using a serial date number or date character vector.

The `Settle`

date for every convertible bond is set to the
`ValuationDate`

of the CRR stock tree. The bond argument,
`Settle`

, is ignored.

**Data Types: **`double`

| `char`

`Maturity`

— Maturity dateserial date number | date character vector

Maturity date, specified as an `NINST`

-by-`1`

scalar using a serial date number or date character vector.

**Data Types: **`double`

| `char`

`ConvRatio`

— Number of shares convertible to one bondnonnegative number

Number of shares convertible to one bond, specified as an
`NINST`

-by-`1`

with a nonnegative number.

**Data Types: **`double`

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,EquityTree,DebtTree] =
cbondbycrr(CRRT,CouponRate,Settle, Maturity,
ConvRatio,'Spread',Spread,'CallExDates',CallExDates,'CallStrike',CallStrike,'AmericanCall',1)
```

`'Spread'`

— Number of basis points over the reference rate`0`

(default) | vectorNumber of basis points over the reference rate, specified as the comma-separated
pair consisting of `'Spread'`

and a
`NINST`

-by-`1`

vector.

To incorporate the risk in the form of credit spread (Tsiveriotis-Fernandes
method), use the optional input argument `Spread`

. To incorporate
default risk into the algorithm, specify the optional input arguments
`DefaultProbability`

and `RecoveryRate`

.
Do not use `Spread`

with `DefaultProbability`

and `RecoveryRate`

.

**Data Types: **`double`

`'Period'`

— Coupons per year`2`

per year (default) | vectorCoupons per year, specified as the comma-separated pair consisting of
`'Period'`

and a `NINST`

-by-`1`

vector.

**Data Types: **`double`

`'IssueDate'`

— Bond issue dateserial date number | date character vector

Bond issue date, specified as the comma-separated pair consisting of
`'IssueDate'`

and a
`NINST`

-by-`1`

vector using a serial date number
or date character vector.

**Data Types: **`double`

| `char`

`'FirstCouponDate'`

— Irregular first coupon dateserial date number | date character vector

Irregular first coupon date, specified as the comma-separated pair consisting of
`'FirstCouponDate'`

and a
`NINST`

-by-`1`

vector using a serial date number
or date character vector.

**Data Types: **`double`

| `char`

`'LastCouponDate'`

— Irregular last coupon dateserial date number | date character vector

Irregular last coupon date, specified as the comma-separated pair consisting of
`'LastCouponDate'`

and a
`NINST`

-by-`1`

vector using a serial date number
or date character vector.

**Data Types: **`char`

| `double`

`'Face'`

— Face value`100`

(default) | nonnegative value | cell array of nonnegative valuesFace value, specified as the comma-separated pair consisting of
`'Face'`

and a `NINST`

-by-`1`

vector of nonnegative face values or a
`NINST`

-by-`1`

cell array, where each element is a
`NumDates`

-by-`2`

cell array. The first column of
the `NumDates`

-by-`2`

cell array is dates and the
second column is the associated face value. The date indicates the last day that the
face value is valid.

**Data Types: **`cell`

| `double`

`'CallStrike'`

— Call strike price for European, Bermuda, or American optionnonnegative integer | vector of nonnegative integers

Call strike price for European, Bermuda, or American option, specified as the
comma-separated pair consisting of `'CallStrike'`

and one of the
following values:

For a European call option —

`NINST`

-by-`1`

vector of nonnegative integersFor a Bermuda call option —

`NINST`

-by-`NSTRIKES`

matrix of call strike price values, where each row is the schedule for one call option. If a call option has fewer than`NSTRIKES`

exercise opportunities, the end of the row is padded with`NaN`

s.For an American call option —

`NINST`

-by-`1`

vector of strike price values for each option.

**Data Types: **`single`

| `double`

`'CallExDates'`

— Call exercise date for European, Bermuda, or American optionserial date number | vector of serial date numbers | date character vector | cell array of date character vectors

Call exercise date for European, Bermuda, or American option, specified as the
comma-separated pair consisting of `'CallExDates'`

and one of the
following values:

For a European option —

`NINST`

-by-`1`

vector of serial date numbers or date character vectors.For a Bermuda option —

`NINST`

-by-`NSTRIKES`

matrix of exercise dates, where each row is the schedule for one option. For a European option, there is only one`CallExDate`

on the option expiry date.For an American option —

`NINST`

-by-`1`

or`NINST`

-by-`2`

matrix of exercise date boundaries. For each instrument, the call option can be exercised on any tree date between or including the pair of dates on that row. If`CallExDates`

is`NINST`

-by-`1`

, the option can be exercised between the`ValuationDate`

of the CRR stock tree and the single listed`CallExDate`

.

**Data Types: **`char`

| `cell`

| `double`

`'AmericanCall'`

— Call option type indicator`0`

if `AmericanCall`

is
`NaN`

or not entered (default) | scalar | vector of positive integers`[0,1]`

Call option type, specified as the comma-separated pair consisting of
`'AmericanCall'`

and a
`NINST`

-by-`1`

vector of positive integer flags
with values `0`

or `1`

.

For a European or Bermuda option —

`AmericanCall`

is`0`

for each European or Bermuda option.For an American option —

`AmericanCall`

is`1`

for each American option. The`AmericanCall`

argument is required to invoke American exercise rules.

**Data Types: **`single`

| `double`

`'PutStrike'`

— Put strike values for European, Bermuda, or American optionpositive integer | vector of positive integers

Put strike values for European, Bermuda, or American option, specified as the
comma-separated pair consisting of `'PutStrike'`

and one of the
following values:

For a European put option —

`NINST`

-by-`1`

vector of nonnegative integersFor a Bermuda put option —

`NINST`

-by-`NSTRIKES`

matrix of strike price values where each row is the schedule for one option. If a put option has fewer than`NSTRIKES`

exercise opportunities, the end of the row is padded with`NaN`

s.For an American put option —

`NINST`

-by-`1`

vector of strike price values for each option.

**Data Types: **`single`

| `double`

`'PutExDates'`

— Put exercise date for European, Bermuda, or American optionserial date number | vector of serial date numbers | date character vector | cell array of date character vectors

Put exercise date for European, Bermuda, or American option, specified as the
comma-separated pair consisting of `'PutExDates'`

and one of the
following values:

For a European option —

`NINST`

-by-`1`

vector of serial date numbers or date character vectors.For a Bermuda option —

`NINST`

-by-`NSTRIKES`

matrix of exercise dates where each row is the schedule for one option. For a European option, there is only one`PutExDate`

on the option expiry date.For an American option —

`NINST`

-by-`1`

or`NINST`

-by-`2`

matrix of exercise date boundaries. For each instrument, the put option can be exercised on any tree date between or including the pair of dates on that row. If`PutExDates`

is`NINST`

-by-`1`

, the put option can be exercised between the`ValuationDate`

of the CRR stock tree and the single listed`PutExDate`

.

**Data Types: **`double`

| `char`

| `cell`

`'AmericanPut'`

— Put option type indicator`0`

if `AmericanPut`

is
`NaN`

or not entered (default) | positive integer `[0,1]`

| vector of positive integers `[0,1]`

Put option type, specified as the comma-separated pair consisting of
`'AmericanPut'`

and a
`NINST`

-by-`1`

vector of positive integer flags
with values `0`

or `1`

.

For a European or Bermuda option —

`AmericanPut`

is`0`

for each European or Bermuda option.For an American option —

`AmericanPut`

is`1`

for each American option. The`AmericanPut`

argument is required to invoke American exercise rules.

**Data Types: **`single`

| `double`

`'ConvDates'`

— Convertible dates`MaturityDate`

(default) | serial date number | date character vectorConvertible dates, specified as the comma-separated pair consisting of
`'ConvDates'`

and a
`NINST`

-by-`1`

or
`NINST`

-by-`2`

matrix of serial date numbers or
date character vectors. If `ConvDates`

is not specified, the bond is
always convertible until maturity.

For each instrument, the bond can be converted on any tree date between or including the pair of dates on that row.

If `ConvDates`

is
`NINST`

-by-`1`

, the bond can be converted between
the `ValuationDate`

of the CRR stock tree and the single listed
`ConvDates`

.

**Data Types: **`char`

| `single`

| `double`

`'DefaultProbability'`

— Annual probability of default rate`0`

(default) | nonnegative decimalAnnual probability of default rate, specified as the comma-separated pair
consisting of `'DefaultProbability'`

and a
`NINST`

-by-`1`

nonnegative decimal value.

To incorporate default risk into the algorithm, specify the optional input
arguments `DefaultProbability`

and
`RecoveryRate`

. To incorporate the risk in the form of credit
spread (Tsiveriotis-Fernandes method), use the optional input argument
`Spread`

. Do not use `DefaultProbability`

and
`RecoveryRate`

with `Spread`

.

**Data Types: **`single`

| `double`

`'RecoveryRate'`

— Recovery rate`1`

(default) | nonnegative decimalRecovery rate, specified as the comma-separated pair consisting of
`'RecoveryRate'`

and a
`NINST`

-by-`1`

nonnegative decimal.

To incorporate default risk into the algorithm, specify the optional input
arguments `DefaultProbability`

and
`RecoveryRate`

. To incorporate the risk in the form of credit
spread (Tsiveriotis-Fernandes method), use the optional input argument
`Spread`

. Do not use `DefaultProbability`

and `RecoveryRate`

with `Spread`

.

**Data Types: **`single`

| `double`

`Price`

— Expected price at time `0`

array

Expected price at time `0`

, returned as an
`NINST`

-by-`1`

array.

`PriceTree`

— Structure with vector of convertible bond prices at each nodetree structure

Structure with a vector of convertible bond prices at each node, returned as a tree structure.

`EquityTree`

— Structure with vector of convertible bond equity component at each nodetree structure

Structure with a vector of convertible bond equity component at each node, returned as a tree structure.

`DebtTree`

— Structure with vector of convertible bond debt component at each nodetree structure

Structure with a vector of convertible bond debt component at each node, returned as a tree structure.

A convertible bond that is callable by the issuer. The issuer of the bond forces conversion, removing the advantage that conversion is at the discretion of the bondholder.

Upon call, the bondholder can either convert the bond or redeem at the call price. This option enables the issuer to control the price of the convertible bond and, if necessary, refinance the debt with a new cheaper one.

A convertible bond with a put feature allows the bondholder to sell back the bond at a premium on a specific date.

This option protects the holder against rising interest rates by reducing the year to maturity.

`cbondbycrr`

, `cbondbyeqp`

, `cbondbyitt`

, and `cbondbystt`

return price information in the form of a price vector and a price
tree. These functions implement the risk in the form of either a credit spread or
incorporating the risk of bond default. To incorporate the risk in the form of credit spread
(Tsiveriotis-Fernandes method), use the optional name-value pair argument
`Spread`

. To incorporate default risk into the algorithm, specify the
optional name-value pair arguments `DefaultProbability`

and
`RecoveryRate`

.

[1] Tsiveriotis, K., and C. Fernandes. “Valuing Convertible Bonds with Credit
Risk.” *Journal of Fixed Income.* Vol. 8, 1998, pp.
95–102.

[2] Hull, J. *Options, Futures and Other Derivatives.* Fourth
Edition. Prentice Hall, 2000, pp. 646–649.

`cbondbyeqp`

| `crrsens`

| `crrtree`

| `eqpprice`

| `eqpsens`

| `instadd`

| `instcbond`

| `instdisp`

| `intenvset`

| `stockspec`

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)