Financial Toolbox |
 |
bdtbond
Black-Derman-Toy pricing of option-embedded bonds
Syntax
[Price, Sensitivities, DiscTree, PriceTree] = bdtbond(OptBond,
ZeroCurve, VolatilityCurve, Accuracy, CreditCurve,
ComputeSensitivity)
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
OptBond.Settle = '15-Jul-1996';
OptBond.Maturity = '15-Jan-1998';
OptBond.CouponRate = 0.06;
OptBond.Period = 2
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.
OptBond.PutType = 1;
OptBond.PutStartDate = '15-Jan-1997';
OptBond.PutExpiryDate = '15-Jan-1998';
OptBond.PutStrike = 98
Build zero curve term structure.
ZeroCurve.ZeroRates = [0.05; 0.06; 0.065];
ZeroCurve.CurveDates = ['01-Jan-1996'; '01-Jan-1997';
'01-Jan-1998']
Build volatility curve term structure.
VolCurve.VolatilityRates = [0.15; 0.13];
VolCurve.CurveDates = [729025; 729756]
The coupon interval is 1/2 year; use 10 tree periods per year.
Accuracy = 5
Specify a constant credit spread of 200 basis points (0.02).
CreditCurve.CreditRates = [200];
CreditCurve.CurveDates = ['01-Jan-1996']
Ask for duration and vega.
SensChoice.Duration = 1;
SensChoice.Convexity = 0;
SensChoice.Vega = 1;
[Price, Sensitivities, DiscTree, PriceTree] = ...
bdtbond(OptBond, ZeroCurve, VolCurve, Accuracy, CreditCurve,...
SensChoice);
Price =
OptionFreePrice: 96.5565
OptionEmbedPrice: 97.1769
OptionValue: 0.6204
Sensitivities =
Duration: 1.3959
EffDuration: 0.6848
Convexity: NaN
EffConvexity: NaN
Vega: -0.0194
To look at the rate and clean price trees, use bdttrans
.
bdttrans(DiscTree)
bdttrans(PriceTree)
See Also
bdttrans
| annuterm | | bdttrans |  |