cbondbystt
Price convertible bonds from standard trinomial tree
Syntax
Description
Price = cbondbystt(STTTree,CouponRate,Settle,Maturity,ConvRatio)
Note
Alternatively, you can use the ConvertibleBond
       instrument object to price a convertible bond. For more information, see Get Started with Workflows Using Object-Based Framework for Pricing Financial Instruments.
[
     prices convertible bonds from a standard trinomial (STT) tree using a credit spread or
     incorporating the risk of bond default.Price,PriceTree,EquityTree,DebtTree]
= cbondbystt(___,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.
Examples
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: [1×1 struct]
     TimeSpec: [1×1 struct]
     RateSpec: [1×1 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: {1×21 cell}
        Probs: {1×20 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: {1×21 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: {1×21 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: {1×21 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: [1×1 struct]
     TimeSpec: [1×1 struct]
     RateSpec: [1×1 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: {1×21 cell}
        Probs: {1×20 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: {1×21 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: {1×21 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: {1×21 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
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. For example, if the reference rate
       is 2% and spread is 4%, then the Spread value in basis points would be
        0.04.
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-- 1vector of nonnegative integers
- For a Bermuda call option — - NINST-by-- NSTRIKESmatrix of call strike price values, where each row is the schedule for one call option. If a call option has fewer than- NSTRIKESexercise opportunities, the end of the row is padded with- NaNs.
- For an American call option — - NINST-by-- 1vector 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-- 1vector of date character vectors.
- For a Bermuda option — - NINST-by-- NSTRIKESmatrix of exercise dates, where each row is the schedule for one option. For a European option, there is only one- CallExDateon the option expiry date.
- For an American option — - NINST-by-- 1or- NINST-by-- 2matrix 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- CallExDatesis- NINST-by-- 1, the option can be exercised between the- ValuationDateof 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 — - AmericanCallis- 0for each European or Bermuda option.
- For an American option — - AmericanCallis- 1for each American option. The- AmericanCallargument 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-- 1vector of nonnegative integers.
- For a Bermuda put option — - NINST-by-- NSTRIKESmatrix of strike price values where each row is the schedule for one option. If a put option has fewer than- NSTRIKESexercise opportunities, the end of the row is padded with- NaNs.
- For an American put option — - NINST-by-- 1vector 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-- 1vector of date character vectors.
- For a Bermuda option — - NINST-by-- NSTRIKESmatrix of exercise dates where each row is the schedule for one option. For a European option, there is only one- PutExDateon the option expiry date.
- For an American option — - NINST-by-- 1or- NINST-by-- 2matrix 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- PutExDatesis- NINST-by-- 1, the put option can be exercised between the- ValuationDateof 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 — - AmericanPutis- 0for each European or Bermuda option.
- For an American option — - AmericanPutis- 1for each American option. The- AmericanPutargument 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
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
A convertible bond is a type of hybrid security that combines features of both debt and equity; it is bond that can be converted into a predetermined number of shares of the issuing company's stock at the bondholder's discretion, usually at specific times during its life.
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 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.
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 R2015bAlthough cbondbystt 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.
See Also
stttree | cbondbyeqp | cbondbycrr | instcbond | intenvset | stockspec | instadd | instdisp | sttprice | sttsens
Topics
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)