Documentation

This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

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

example

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

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 model), 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 = 'Jan-1-2015'; 
EndDates = 'Jan-1-2020'; 
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: [1x21 double]
         dObs: [1x21 double]
        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 = 'Jan-1-2015'; 
Maturity = 'April-1-2018'; 
Period = 1;
CallStrike = 95; 
CallExDates = [datenum('Jan-1-2016') datenum('April-1-2018')];
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 = 90.2511
PriceTree = struct with fields:
    FinObj: 'TrinPriceTree'
     PTree: {1x21 cell}
      tObs: [1x21 double]
      dObs: [1x21 double]

EqtTre = struct with fields:
    FinObj: 'TrinPriceTree'
     PTree: {1x21 cell}
      tObs: [1x21 double]
      dObs: [1x21 double]

DbtTree = struct with fields:
    FinObj: 'TrinPriceTree'
     PTree: {1x21 cell}
      tObs: [1x21 double]
      dObs: [1x21 double]

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 = '1-Apr-2015';
EndDates = '1-Apr-2020';
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 = '1-Apr-2015';
Maturity = '1-Apr-2020';
CouponRate = 0.04;
CallStrike = 110;
CallExDates = [datenum('1-Apr-2017') datenum(Maturity)];
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 = 'Jan-1-2015';
EndDates = 'Jan-1-2020';
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: [1x21 double]
         dObs: [1x21 double]
        STree: {1x21 cell}
        Probs: {1x20 cell}

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

CouponRate = 0.03;
Settle = 'Jan-1-2015';
Maturity = 'April-1-2018';
Period = 1;
CallStrike = 95;
CallExDates = [datenum('Jan-1-2016') datenum('April-1-2018')];
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: [1x21 double]
      dObs: [1x21 double]

EqtTre = struct with fields:
    FinObj: 'TrinPriceTree'
     PTree: {1x21 cell}
      tObs: [1x21 double]
      dObs: [1x21 double]

DbtTree = struct with fields:
    FinObj: 'TrinPriceTree'
     PTree: {1x21 cell}
      tObs: [1x21 double]
      dObs: [1x21 double]

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 scalar using a serial nonnegative date number or date character vector.

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.

Data Types: double | char

Maturity date, specified as an NINST-by-1 scalar using a serial nonnegative date number or date character vector.

Data Types: double | char

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

Data Types: double

Name-Value Pair Arguments

Specify optional comma-separated pairs of Name,Value arguments. Name is the argument name and Value is the corresponding value. Name must appear inside single quotes (' '). You can specify several name and value pair arguments in any order as Name1,Value1,...,NameN,ValueN.

Example: [Price,PriceTree,EquityTree,DebtTree] = cbondbystt(STTTree,CouponRate,Settle,Maturity,ConvRatio,'Spread',Spread,'CallExDates',CallExDates,'CallStrike',CallStrike,'AmericanCall',1)

collapse all

Number of basis points over the reference rate, specified as an NINST-by-1 vector.

Note

To incorporate the risk in the form of credit spread (Tsiveriotis-Fernandes model), 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 an NINST-by-1 vector.

Data Types: double

Bond issue date, specified as an NINST-by-1 scalar using a serial nonnegative date number or date character vector.

Data Types: double | char

Irregular first coupon date, specified as an NINST-by-1 scalar using a serial nonnegative date number or date character vector.

Data Types: double | char

Irregular last coupon date, specified as an NINST-by-1 scalar using a serial nonnegative date number or date character vector.

Data Types: double | char

Face value, specified as anNINST-by-1 scalar 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:

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

  • For an American call option — NINST-by-1 vector of strike price values for each option.

Data Types: single | double

Call exercise date for European, Bermuda, or American option, specified as:

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

Data Types: double | char | cell

Call option type, specified as an NINST-by-1 positive integer scalar flag 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

Put strike values for European, Bermuda, or American option, specified as:

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

  • For an American put option — NINST-by-1 vector of strike price values for each option.

Data Types: single | double

Put exercise date for European, Bermuda, or American option, specified as:

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

Data Types: double | char | cell

Put option type, specified as an NINST-by-1 positive integer scalar 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

Convertible dates, specified as an NINST-by-1 or NINST-by-2 matrix of serial nonnegative 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 standard trinomial (STT) stock tree and the single listed ConvDates.

Data Types: single | double | char

Annual probability of default rate, specified as an NINST-by-1 nonnegative decimal.

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 model), use the optional input argument Spread. Do not use DefaultProbability and RecoveryRate with Spread.

Data Types: single | double

Recovery rate, specified as an NINST-by-1 nonnegative decimal.

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 model), use the optional input argument Spread. Do not use DefaultProbability and RecoveryRate with Spread.

Data Types: single | 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 cbondbysttreturn 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 model), 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.

Introduced in R2015b

Was this topic helpful?