bkcall
Price European call option on bonds using Black model
Syntax
Description
adds optional input arguments for CallPrice
= bkcall(___,Period
,Basis
,EndMonthRule
,InterpMethod
,StrikeConvention
)Period
, Basis
,
EndMonthRule
, InterpMethod
, and
StrikeConvention
.
Examples
Price a European Call Option On Bonds Using the Black Model
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 (Convention
= 0
), the call option value is $9.49. When the strike price is the clean price (Convention
= 1
), the call option value is $7.97.
Input Arguments
Strike
— Strike price
numeric
Strike price, specified as a scalar numeric or an
NOPT
-by-1
vector of strike prices.
Data Types: double
ZeroData
— Zero rate information used to discount future cash flows
matrix
Zero rate information used to discount future cash flows, specified using a two-column (optionally three-column) matrix containing zero (spot) rate information used to discount future cash flows.
Column 1 — Serial maturity date associated with the zero rate in the second column.
Column 2 — Annualized zero rates, in decimal form, appropriate for discounting cash flows occurring on the date specified in the first column. All dates must occur after
Settle
(dates must correspond to future investment horizons) and must be in ascending order.Column 3 — (optional) Annual compounding frequency. Values are
1
(annual),2
(semiannual, default),3
(three times per year),4
(quarterly),6
(bimonthly),12
(monthly), and-1
(continuous).
If cash flows occur beyond the dates spanned by ZeroData
, 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.
Data Types: double
Sigma
— Annualized price volatilities required by Black model
numeric
Annualized price volatilities required by the Black model, specified as a scalar or
an NOPT
-by-1
vector.
Data Types: struct
BondData
— Characteristics of underlying bonds
vector
Characteristics of underlying bonds, specified as a row vector with three
(optionally four) columns or NOPT
-by-3
(optionally
NOPT
-by-4
) matrix specifying characteristics of
underlying bonds in the form:
[CleanPrice CouponRate Maturity Face]
CleanPrice
is the price excluding accrued interest.CouponRate
is the decimal coupon rate.Maturity
is the bond maturity date using a datetime format.Face
is the face value of the bond. If unspecified, the face value is assumed to be 100.
Data Types: double
| datetime
Settle
— Settlement date
string scalar | date character vector | serial date number
Settlement date, specified as a scaler datetime, string, date character vector, or
serial date number. Settle
also represents the starting reference
date for the input zero curve.
Data Types: char
| double
| string
Expiry
— Option maturity date
string array | date character vector | serial date number
Option maturity date, specified as an
NOPT
-by-1
vector using a datetime array, string
array, date character vectors, or serial date numbers.
Data Types: char
| string
| double
Period
— Number of coupons per year for underlying bond
2
(semiannual) (default) | integer with value 0
, 1
,
2
, 3
, 4
, 6
,
or 12
(Optional) Number of coupons per year for the underlying bond, specified as an
integer with supported values of 0
, 1
,
2
, 3
, 4
,
6
, and 12
.
Data Types: double
Basis
— Day-count basis of underlying bonds
0
(actual/actual) (default) | integer from 0
to 13
(Optional) Day-count basis of underlying bonds, specified as a scalar or an
NOPT
-by-1
vector using the following values:
0 = actual/actual
1 = 30/360 (SIA)
2 = actual/360
3 = actual/365
4 = 30/360 (PSA)
5 = 30/360 (ISDA)
6 = 30/360 (European)
7 = actual/365 (Japanese)
8 = actual/actual (ICMA)
9 = actual/360 (ICMA)
10 = actual/365 (ICMA)
11 = 30/360E (ICMA)
12 = actual/365 (ISDA)
13 = BUS/252
For more information, see Basis.
Data Types: double
EndMonthRule
— End-of-month rule flag
1
(in effect) (default) | nonnegative integer [0,1]
(Optional) End-of-month rule flag, specified as a scalar or an
NOPT
-by-1
vector of end-of-month rules.
0
= Ignore rule, meaning that a bond coupon payment date is always the same numerical day of the month.1
= Set rule on, meaning that a bond coupon payment date is always the last actual day of the month.
Data Types: logical
InterpMethod
— Zero curve interpolation method
1
(linear interpolation) (default) | integer with value 0
, 1
, or
2
(Optional) Zero curve interpolation method for cash flows that do not fall on a date
found in the ZeroData
spot curve, specified as a scalar integer.
InterpMethod
is used to interpolate the appropriate zero discount
rate. Available interpolation methods are (0
) nearest,
(1
) linear, and (2
) cubic. For more information
on interpolation methods, see interp1
.
Data Types: double
StrikeConvention
— Option contract strike price convention
0
(default) | integer with value 0
or 1
(Optional) Option contract strike price convention, specified as a scalar or an
NOPT
-by-1
vector.
StrikeConvention = 0
(default) defines the strike price as the
cash (dirty) price paid for the underlying bond.
StrikeConvention = 1
defines the strike price as the quoted
(clean) price paid for the underlying bond. When evaluating Black's model, the accrued
interest of the bond at option expiration is added to the input strike price.
Data Types: double
Output Arguments
CallPrice
— Price for European call option on bonds derived from Black model
vector
Price for European call option on bonds derived from the Black model, returned as a
NOPT
-by-1
vector.
References
[1] Hull, John C. Options, Futures, and Other Derivatives. 5th Edition, Prentice Hall, 2003, pp. 287–288, 508–515.
Version History
Introduced before R2006a
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)