Main Content

# bkcall

Price European call option on bonds using Black model

## Syntax

``CallPrice = bkcall(Strike,ZeroData,Sigma,BondData,Settle,Expiry)``
``CallPrice = bkcall(___,Period,Basis,EndMonthRule,InterpMethod,StrikeConvention)``

## Description

example

````CallPrice = bkcall(Strike,ZeroData,Sigma,BondData,Settle,Expiry)` computes prices of European call options using Black's model.```

example

````CallPrice = bkcall(___,Period,Basis,EndMonthRule,InterpMethod,StrikeConvention)` adds optional input arguments for `Period`, `Basis`, `EndMonthRule`, `InterpMethod`, and `StrikeConvention`.```

## Examples

collapse all

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

collapse all

Strike price, specified as a scalar numeric or an `NOPT`-by-`1` vector of strike prices.

Data Types: `double`

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`

Annualized price volatilities required by the Black model, specified as a scalar or an `NOPT`-by-`1` vector.

Data Types: `struct`

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`

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`

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`

(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`

(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`

(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`

(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`

(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

collapse all

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