Main Content

# cbondbystt

Price convertible bonds from standard trinomial tree

## Syntax

``Price = cbondbystt(STTTree,CouponRate,Settle,Maturity,ConvRatio)``
``````[Price,PriceTree] = cbondbystt(STTTree,CouponRate,Settle,Maturity,ConvRatio)``````
``````[Price,PriceTree,EquityTree,DebtTree] = cbondbystt(___,Name,Value)``````

## Description

example

````Price = cbondbystt(STTTree,CouponRate,Settle,Maturity,ConvRatio)` prices convertible bonds using a standard trinomial (STT) tree using the Tsiveriotis and Fernandes method.```

example

``````[Price,PriceTree] = cbondbystt(STTTree,CouponRate,Settle,Maturity,ConvRatio)``` prices convertible bonds using a standard trinomial (STT) tree using the Tsiveriotis and Fernandes method.```

example

``````[Price,PriceTree,EquityTree,DebtTree] = cbondbystt(___,Name,Value)``` prices convertible bonds from a standard trinomial (STT) tree using 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 input argument `Spread`. To incorporate default risk into the algorithm, specify the optional name-value pair input arguments `DefaultProbability` and `RecoveryRate`.```

## Examples

collapse all

Create a `RateSpec`.

```StartDates = datetime(2015,1,1); EndDates = datetime(2020,1,1); 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.8825 Rates: 0.0250 EndTimes: 5 StartTimes: 0 EndDates: 737791 StartDates: 735965 ValuationDate: 735965 Basis: 1 EndMonthRule: 1 ```

Create a `StockSpec`.

```AssetPrice = 80; Sigma = 0.12; StockSpec = stockspec(Sigma,AssetPrice)```
```StockSpec = struct with fields: FinObj: 'StockSpec' Sigma: 0.1200 AssetPrice: 80 DividendType: [] DividendAmounts: 0 ExDividendDates: [] ```

Create a `STTTree`.

```TimeSpec = stttimespec(StartDates, EndDates, 20); STTTree = stttree(StockSpec, RateSpec, TimeSpec)```
```STTTree = struct with fields: FinObj: 'STStockTree' StockSpec: [1x1 struct] TimeSpec: [1x1 struct] RateSpec: [1x1 struct] tObs: [0 0.2500 0.5000 0.7500 1 1.2500 1.5000 1.7500 2 2.2500 2.5000 2.7500 3 3.2500 3.5000 3.7500 4 4.2500 4.5000 4.7500 5] dObs: [735965 736056 736147 736238 736330 736421 736512 736604 736695 736786 736878 736969 737060 737151 737243 737334 737425 737517 737608 737699 737791] STree: {1x21 cell} Probs: {1x20 cell} ```

Define the convertible bond. The convertible bond can be called starting on Jan 1, 2016 with a strike price of 95.

```CouponRate = 0.03; Settle = datetime(2015,1,1); Maturity = datetime(2018,4,1); Period = 1; CallStrike = 95; CallExDates = [datetime(2016,1,1) ; datetime(2018,1,1)]; ConvRatio = 1; Spread = 0.025;```

Price the convertible bond using the standard trinomial tree model.

```[Price,PriceTree,EqtTre,DbtTree] = cbondbystt(STTTree,CouponRate,Settle,Maturity,ConvRatio,... 'Period',Period,'Spread',Spread,'CallExDates',CallExDates,'CallStrike',CallStrike,'AmericanCall',1)```
```Price = 2×1 91.8885 90.6328 ```
```PriceTree = struct with fields: FinObj: 'TrinPriceTree' PTree: {1x21 cell} tObs: [0 0.2500 0.5000 0.7500 1 1.2500 1.5000 1.7500 2 2.2500 2.5000 2.7500 3 3.2500 3.5000 3.7500 4 4.2500 4.5000 4.7500 5] dObs: [735965 736056 736147 736238 736330 736421 736512 736604 736695 736786 736878 736969 737060 737151 737243 737334 737425 737517 737608 737699 737791] ```
```EqtTre = struct with fields: FinObj: 'TrinPriceTree' PTree: {1x21 cell} tObs: [0 0.2500 0.5000 0.7500 1 1.2500 1.5000 1.7500 2 2.2500 2.5000 2.7500 3 3.2500 3.5000 3.7500 4 4.2500 4.5000 4.7500 5] dObs: [735965 736056 736147 736238 736330 736421 736512 736604 736695 736786 736878 736969 737060 737151 737243 737334 737425 737517 737608 737699 737791] ```
```DbtTree = struct with fields: FinObj: 'TrinPriceTree' PTree: {1x21 cell} tObs: [0 0.2500 0.5000 0.7500 1 1.2500 1.5000 1.7500 2 2.2500 2.5000 2.7500 3 3.2500 3.5000 3.7500 4 4.2500 4.5000 4.7500 5] dObs: [735965 736056 736147 736238 736330 736421 736512 736604 736695 736786 736878 736969 737060 737151 737243 737334 737425 737517 737608 737699 737791] ```

This example demonstrates the spread effect analysis of a 4% coupon convertible bond, callable at 110 at end of the second year, maturing in five years, with spreads of 0, 50, 100, and 150 BP.

Define the `RateSpec`.

```StartDates = datetime(2015,4,1); EndDates = datetime(2020,4,1); Rates = 0.05; Compounding = -1; Basis = 1; RateSpec = intenvset('StartDates',StartDates,'EndDates',EndDates,'Rates',Rates,... 'Compounding',Compounding,'Basis',Basis)```
```RateSpec = struct with fields: FinObj: 'RateSpec' Compounding: -1 Disc: 0.7788 Rates: 0.0500 EndTimes: 5 StartTimes: 0 EndDates: 737882 StartDates: 736055 ValuationDate: 736055 Basis: 1 EndMonthRule: 1 ```

Define the convertible bond data.

```Settle = datetime(2015,4,1); Maturity = datetime(2020,4,1); CouponRate = 0.04; CallStrike = 110; CallExDates = [datetime(2017,4,1) datetime(2020,4,1)]; ConvRatio = 1; AmericanCall = 1; Sigma = 0.3; Spreads = 0:0.005:0.015; Prices = 40:10:140; convprice = zeros(length(Prices),length(Spreads));```

Define the `TimeSpec` for the Standard Trinomial Tree, create an `STTTree` using `stttree`, and price the convertible bond using `cbondbystt`.

```NumSteps = 200; TimeSpec = stttimespec(StartDates, EndDates, NumSteps); for PriceIdx = 1:length(Prices) StockSpec = stockspec(Sigma, Prices(PriceIdx)); STTT = stttree(StockSpec, RateSpec, TimeSpec); convprice(PriceIdx,:) = cbondbystt(STTT, CouponRate, Settle, Maturity, ConvRatio,... 'Spread', Spreads(:),'CallExDates', CallExDates, 'CallStrike', CallStrike,... 'AmericanCall', AmericanCall); end```

Plot the spread effect analysis for the convertible bond.

```stock = repmat(Prices',1,length(Spreads)); plot(stock,convprice); legend({'+0 bp'; '+50 bp'; '+100 bp'; '+150 bp'}); title ('Effect of Spread using Trinomial tree - 200 steps') xlabel('Stock Price'); ylabel('Convertible Bond Price'); text(50, 150, ['Coupon 4% semiannual,', sprintf('\n'), ... '110 Call after 2 years,' sprintf('\n'), ... 'maturing in 5 years.'],'fontweight','Bold')```

Create the interest-rate term structure `RateSpec`.

```StartDates = datetime(2015,1,1); EndDates = datetime(2020,1,1); 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.8825 Rates: 0.0250 EndTimes: 5 StartTimes: 0 EndDates: 737791 StartDates: 735965 ValuationDate: 735965 Basis: 1 EndMonthRule: 1 ```

Create the `StockSpec`.

```AssetPrice = 80; Sigma = 0.12; StockSpec = stockspec(Sigma,AssetPrice)```
```StockSpec = struct with fields: FinObj: 'StockSpec' Sigma: 0.1200 AssetPrice: 80 DividendType: [] DividendAmounts: 0 ExDividendDates: [] ```

Create the STT tree for the equity.

```TimeSpec = stttimespec(StartDates, EndDates, 20); STTTree = stttree(StockSpec, RateSpec, TimeSpec)```
```STTTree = struct with fields: FinObj: 'STStockTree' StockSpec: [1x1 struct] TimeSpec: [1x1 struct] RateSpec: [1x1 struct] tObs: [0 0.2500 0.5000 0.7500 1 1.2500 1.5000 1.7500 2 2.2500 2.5000 2.7500 3 3.2500 3.5000 3.7500 4 4.2500 4.5000 4.7500 5] dObs: [735965 736056 736147 736238 736330 736421 736512 736604 736695 736786 736878 736969 737060 737151 737243 737334 737425 737517 737608 737699 737791] STree: {1x21 cell} Probs: {1x20 cell} ```

Define and price the convertible bond using the optional `DefaultProbability` and `RecoveryRate` arguments.

```CouponRate = 0.03; Settle = datetime(2015,1,1); Maturity = datetime(2018,4,1); Period = 1; CallStrike = 95; CallExDates = [datetime(2016,1,1) datetime(2018,1,1)]; ConvRatio = 1; DefaultProbability = .30; RecoveryRate = .82; [Price,PriceTree,EqtTre,DbtTree] = cbondbystt(STTTree,CouponRate,Settle,Maturity,ConvRatio,... 'Period',Period,'CallExDates',CallExDates,'CallStrike',CallStrike,'AmericanCall',1,... 'DefaultProbability',DefaultProbability,'RecoveryRate',RecoveryRate)```
```Price = 80 ```
```PriceTree = struct with fields: FinObj: 'TrinPriceTree' PTree: {1x21 cell} tObs: [0 0.2500 0.5000 0.7500 1 1.2500 1.5000 1.7500 2 2.2500 2.5000 2.7500 3 3.2500 3.5000 3.7500 4 4.2500 4.5000 4.7500 5] dObs: [735965 736056 736147 736238 736330 736421 736512 736604 736695 736786 736878 736969 737060 737151 737243 737334 737425 737517 737608 737699 737791] ```
```EqtTre = struct with fields: FinObj: 'TrinPriceTree' PTree: {1x21 cell} tObs: [0 0.2500 0.5000 0.7500 1 1.2500 1.5000 1.7500 2 2.2500 2.5000 2.7500 3 3.2500 3.5000 3.7500 4 4.2500 4.5000 4.7500 5] dObs: [735965 736056 736147 736238 736330 736421 736512 736604 736695 736786 736878 736969 737060 737151 737243 737334 737425 737517 737608 737699 737791] ```
```DbtTree = struct with fields: FinObj: 'TrinPriceTree' PTree: {1x21 cell} tObs: [0 0.2500 0.5000 0.7500 1 1.2500 1.5000 1.7500 2 2.2500 2.5000 2.7500 3 3.2500 3.5000 3.7500 4 4.2500 4.5000 4.7500 5] dObs: [735965 736056 736147 736238 736330 736421 736512 736604 736695 736786 736878 736969 737060 737151 737243 737334 737425 737517 737608 737699 737791] ```

## Input Arguments

collapse all

Stock tree structure for a standard trinomial tree, specified by using `stttree`.

Data Types: `struct`

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`

Settlement date, specified as an `NINST`-by-`1` vector using a datetime array, string array, or date character vectors.

Note

The `Settle` date for every convertible bond is set to the `ValuationDate` of the standard trinomial (STT) stock tree. The bond argument, `Settle`, is ignored.

To support existing code, `cbondbystt` also accepts serial date numbers as inputs, but they are not recommended.

Maturity date, specified as an `NINST`-by-`1` vector using a datetime array, string array, or date character vectors.

To support existing code, `cbondbystt` also accepts serial date numbers as inputs, but they are not recommended.

Number of shares convertible to one bond, specified as an `NINST`-by-`1` with a nonnegative number.

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: ```[Price,PriceTree,EquityTree,DebtTree] = cbondbystt(STTTree,CouponRate,Settle,Maturity,ConvRatio,'Spread',Spread,'CallExDates',CallExDates,'CallStrike',CallStrike,'AmericanCall',1)```

Number of basis points over the reference rate, specified as the comma-separated pair consisting of `'Spread'` and a `NINST`-by-`1` vector.

Note

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`

Coupons per year, specified as the comma-separated pair consisting of `'Period'` and a `NINST`-by-`1` vector.

Data Types: `double`

Bond issue date, specified as the comma-separated pair consisting of `'IssueDate'` and a `NINST`-by-`1` vector using a datetime array, string array, or date character vectors.

To support existing code, `cbondbystt` also accepts serial date numbers as inputs, but they are not recommended.

Irregular first coupon date, specified as the comma-separated pair consisting of `'FirstCouponDate'` and a `NINST`-by-`1` vector using a datetime array, string array, or date character vectors.

To support existing code, `cbondbystt` also accepts serial date numbers as inputs, but they are not recommended.

Irregular last coupon date, specified as the comma-separated pair consisting of `'LastCouponDate'` and a `NINST`-by-`1` vector using a datetime array, string array, or date character vectors.

To support existing code, `cbondbystt` also accepts serial date numbers as inputs, but they are not recommended.

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

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 integers

• For 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: `double`

Call exercise date for European, Bermuda, or American option, specified as the comma-separated pair consisting of `'CallExDates'` and a datetime array, string array, or date character vectors for one of the following values:

• For a European option — `NINST`-by-`1` vector of 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 STT stock tree and the single listed `CallExDate`.

To support existing code, `cbondbystt` also accepts serial date numbers as inputs, but they are not recommended.

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: `double`

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

• For 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: `double`

Put exercise date for European, Bermuda, or American option, specified as the comma-separated pair consisting of `'PutExDates'` and a datetime array, string array, or date character vectors for one of the following values:

• For a European option — `NINST`-by-`1` vector of 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 STT stock tree and the single listed `PutExDate`.

To support existing code, `cbondbystt` also accepts serial date numbers as inputs, but they are not recommended.

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: `double`

Convertible dates, specified as the comma-separated pair consisting of `'ConvDates'` and a `NINST`-by-`1` or `NINST`-by-`2` vector using a datetime array, string array, or date character vectors. If `ConvDates` is not specified, the bond is always convertible until maturity.

To support existing code, `cbondbystt` also accepts serial date numbers as inputs, but they are not recommended.

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 standard trinomial (STT) stock tree and the single listed `ConvDates`.

Annual probability of default rate, specified as the comma-separated pair consisting of `'DefaultProbability'` and a `NINST`-by-`1` nonnegative decimal value.

Note

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: `double`

Recovery rate, specified as the comma-separated pair consisting of `'RecoveryRate'` and a `NINST`-by-`1` nonnegative decimal value.

Note

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: `double`

## Output Arguments

collapse all

Expected price at time `0`, returned as an `NINST`-by-`1` array.

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

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

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

## More About

collapse all

### Callable Convertible

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

### Puttable Convertible

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.

## Algorithms

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

## References

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

## Version History

Introduced in R2015b

expand all