Price European call option on bonds using Black model
CallPrice = bkcall(Strike,ZeroData,Sigma,BondData,Settle,Expiry,Period,Basis,EndMonthRule,InterpMethod,StrikeConvention)
Scalar or number of options (
Two-column (optionally three-column) matrix containing zero (spot) rate information used to discount future cash flows.
Row vector with three (optionally four) columns or
Settlement date of the options, specified as a serial date number or date character vector.
(Optional) Number of coupons per year for the underlying
bond. Default =
(Optional) Day-count basis of the bond. A vector of integers.
For more information, see Basis.
(Optional) End-of-month rule. This rule applies only
(Optional) Scalar integer zero curve interpolation method.
For cash flows that do not fall on a date found in the
(Optional) Scalar or
CallPrice = bkcall(Strike,ZeroData,Sigma,BondData,Settle,Expiry,Period,Basis,EndMonthRule,InterpMethod,
StrikeConvention) using Black's model, derives an
of prices of European call options on bonds.
If cash flows occur beyond the dates spanned by
the input zero curve, the appropriate zero rate for discounting such
cash flows is obtained by extrapolating the nearest rate on the curve
(that is, if a cash flow occurs before the first or after the last
date on the input zero curve, a flat curve is assumed).
In addition, you can use the method
getZeroRates for an
IRDataCurve object with a
Dates property to create a
vector of dates and data acceptable for
bkcall. For more information, see
Converting an IRDataCurve or IRFunctionCurve Object.
This example shows how to price a European call option on bonds using the Black model. Consider a European call option on a bond maturing in 9.75 years. The underlying bond has a clean price of $935, a face value of $1000, and pays 10% semiannual coupons. Since the bond matures in 9.75 years, a $50 coupon will be paid in 3 months and again in 9 months. Also, assume that the annualized volatility of the forward bond price is 9%. Furthermore, suppose the option expires in 10 months and has a strike price of $1000, and that the annualized continuously compounded risk-free discount rates for maturities of 3, 9, and 10 months are 9%, 9.5%, and 10%, respectively.
% specify the option information Settle = '15-Mar-2004'; Expiry = '15-Jan-2005'; % 10 months from settlement Strike = 1000; Sigma = 0.09; Convention = [0 1]'; % specify the interest-rate environment ZeroData = [datenum('15-Jun-2004') 0.09 -1; % 3 months datenum('15-Dec-2004') 0.095 -1; % 9 months datenum(Expiry) 0.10 -1]; % 10 months % specify the bond information CleanPrice = 935; CouponRate = 0.1; Maturity = '15-Dec-2013'; % 9.75 years from settlement Face = 1000; BondData = [CleanPrice CouponRate datenum(Maturity) Face]; Period = 2; Basis = 1; % call Black's model CallPrices = bkcall(Strike, ZeroData, Sigma, BondData, Settle,... Expiry, Period, Basis, , , Convention)
CallPrices = 2×1 9.4873 7.9686
When the strike price is the dirty price (
0), the call option value is $9.49. When the strike price is the clean price (
1), the call option value is $7.97.
 Hull, John C. Options, Futures, and Other Derivatives. 5th Edition, Prentice Hall, 2003, pp. 287–288, 508–515.