Financial Toolbox    
bdtbond

Black-Derman-Toy pricing of option-embedded bonds

Syntax

Arguments
All arguments except Accuracy are structures. The name of the argument variable can be substituted, but the fieldnames must be reproduced exactly. The variables and the fields are listed below in Variable.fieldname format. An optional field or variable can be set to the empty matrix ([]) to invoke defaults. An optional field in a structure can also be left unspecified.

OptBond
Specification of underlying bond with a possible call and put option. Fields are scalars or date strings. Type help ftb for detailed information on bond parameters.
OptBond.Settle: Settlement date.
OptBond.Maturity: Maturity date.
OptBond.Period: (Optional) Coupon frequency. Default = 2.
OptBond.Basis: (Optional) Market Basis. Default = 0 (actual/actual).
OptBond.EndMonthRule: (Optional) EOM rule. Default = 1 (in effect).
OptBond.FirstCouponDate: (Optional) First coupon payment if the first coupon period is irregular.
OptBond.LastCouponDate: (Optional) Last coupon payment before maturity if the last coupon period is irregular.
OptBond.IssueDate: (Optional) Issue date of the bond if the first coupon period is irregular.
OptBond.StartDate: (Future implementation; optional) Forward start date of the security if not before settlement.
OptBond.CouponRate: (Optional) Coupon payment rate.
OptBond.Face: (Optional) Maturity payment of the bond. Default = 100.

OptBond (continued)

Option specification fields: Specify fields for either a call or a put. Calls assumed held by the bond issuer; puts assumed held by the bondholder. A call therefore reduces the value of the bond to the bond holder, while a put increases the value of the bond.
OptBond.CallStrike: Call option strike price.
OptBond.CallType: 1 (American) or 0 (European). Default = 1.
OptBond.CallExpiryDate: Last date of exercise for an American option, or only date for a European option.
OptBond.CallStartDate: First date of exercise for an American option. Default is Settlement.
OptBond.PutStrike: Put option strike price.
OptBond.PutType: 1 (American) or 0 (European). Default = 1.
OptBond.PutExpiryDate: Last date of exercise for an American option, or only date for a European option. Default is maturity date.
OptBond.PutStartDate: (Optional) first date of exercise for an American option. Default is settlement date.
ZeroCurve

Zero curve of NCURVE (date, decimal rate) pairs is interpolated to cover the time span of the bond. Times before the first curve date use the first rate; times after the last curve date use the last rate.
ZeroCurve.CurveDates: NCURVE-by-1 vector of serial dates.
ZeroCurve.ZeroRates: NCURVE-by-1 vector of rates.
VolatilityCurve

Curve of instantaneous yearly volatilities of the short rates. The curve consists of NCURVE2 (date, decimal rate) pairs. The curve is interpolated to cover the time span of the bond.
VolatilityCurve.CurveDates: NCURVE2-by-1 vector of serial dates.
VolatilityCurve.VolatilityRates: NCURVE2-by-1 vector of yearly volatilities in decimal form.
Accuracy

Scalar that specifies the number of steps in the tree per coupon period. Larger numbers yield more accurate answers, but require more time and memory.
CreditCurve

(Optional) Curve of rate spreads arising from default risk. The curve has NCURVE3 (date, basis point) pairs. The curve is interpolated to cover the time span of the bond.
CreditCurve.CurveDates: NCURVE3-by-1 vector of serial dates.
CreditCurve.CreditRates: NCURVE3-by-1 vector of credit spread values in basis points (not decimal rates). The effective change to the zero rate is CreditRates/10000.
ComputeSensitivity

(Optional) Specify if bond sensitivity measures (with and without options) are to be computed. 1 indicates measure computed; 0 indicates not computed. Sensitivities found by a finite difference calculation. The default is no sensitivities, only prices returned.
ComputeSensitivity.Duration: Scalar 1 or 0.
ComputeSensitivity.Convexity: Scalar 1 or 0.
ComputeSensitivity.Vega: Scalar 1 or 0.

Description
[Price, Sensitivities, DiscTree, PriceTree] = bdtbond(OptBond, ZeroCurve, VolatilityCurve, Accuracy, CreditCurve, ComputeSensitivity) computes price and sensitivity measures of a bond with embedded call or put options. Valuation is based on the Black-Derman-Toy model for pricing interest rate options given an input yield curve (and possibly a credit spread) and volatility curve.

Price is the value of the bond with and without the options.

Price.OptionFreePrice
Scalar price of the bond without any options.
Price.OptionEmbedPrice
Scalar price (value to the holder of the bond) of the bond with options.
Price.OptionValue
Scalar value of the options to the holder of the bond.

Sensitivities refer to the effect that changes in the yield curve and volatility term structure have on option-free and option-embedded bond prices.

Sensitivities.Duration
Sensitivity of option-free bond price to parallel shifts of the yield curve.
Sensitivities.EffDuration
Sensitivity of the option-embedded price to shifts in the yield curve.
Sensitivities.Convexity
Sensitivity of Duration to shifts in the yield curve.
Sensitivities.EffConvexity
Sensitivity of EffDuration to shifts in the yield curve.
Sensitivities.Vega
Sensitivity of the option-embedded price to parallel shifts of the volatility curve.

DiscTree is the recombining binomial tree of the interest rate structure. The tree covers NPERIODS times from settlement to maturity, where there are Accuracy steps in each coupon period. The short rate at settlement and between settlement and the first time is deterministic.

DiscTree.Values
NSTATES-by-NPERIODS matrix of short discount factors. The NPERIODS columns of Values correspond to successive times. The NSTATES rows correspond to states in the rate process. Unused states are masked by NaN.

Multiplication of a cash amount at time Dates(i) by the discount Values(j,i) gives the price at Dates(i-1) after traversing the (j,i) edge of the tree. The short rate R(j,i) prevailing at node (j,i) satisfies:

(1 + R(j,i)/Frequency)^(-(Times(j)-Times(j-1))) = Values(j,i)
DiscTree.Times
1-by-NPERIODS vector of tree node times in units of coupon intervals. (Type help ftbTFactors for more information.)
DiscTree.Dates
1-by-NPERIODS vector of tree node times as serial date numbers.
DiscTree.Type
'Short Discount'
DiscTree.Frequency
Compounding frequency of the input bond.
DiscTree.ErrorFlag
(0 or 1). Set to 1 if any short rate becomes negative.

PriceTree is the recombining binomial tree of cash amounts at tree nodes. PriceTree is computed from the bond cash flows and the option payoffs. The clean price of the bond is the PriceTree value minus the coupon payment and the accrued interest.

PriceTree.Values
NSTATES-by-NPERIODS matrix of price states.
PriceTree.Times
1-by-NPERIODS vector of tree node times in units of coupon intervals. (Type help ftbTFactors for more information.)
PriceTree.Dates
1-by-NPERIODS vector of tree node times as serial date numbers.
PriceTree.AccrInt
1-by-NPERIODS vector of accrued interest payable at each time.
PriceTree.Coupons
1-by-NPERIODS vector of coupon payments at each time.
DiscTree.Type
'Price'

Examples
Given a bond with the characteristics

Specify an American put option on the bond. Allow the holder to put the bond between 15-Jan-1997 and maturity (15-Jan-1998) for a strike of 98.

Build zero curve term structure.

Build volatility curve term structure.

The coupon interval is 1/2 year; use 10 tree periods per year.

Specify a constant credit spread of 200 basis points (0.02).

Ask for duration and vega.

To look at the rate and clean price trees, use bdttrans.

See Also
bdttrans


 annuterm bdttrans