fitFunction
Custom fit interest-rate curve object to bond market data
Syntax
Description
fits a bond to a custom fitting function. CurveObj
= fitFunction(Type
,Settle
,FunctionHandle
,Instruments
,IRFitOptionsObj
)
adds optional name-value pair arguments. CurveObj
= fitFunction(___,Name,Value
)
Examples
Fit a Bond Using Custom Fitting Function
This example shows how to use fitFunction
to custom fit a bond.
Settle = repmat(datenum('30-Apr-2008'),[6 1]); Maturity = [datenum('07-Mar-2009');datenum('07-Mar-2011');... datenum('07-Mar-2013');datenum('07-Sep-2016');... datenum('07-Mar-2025');datenum('07-Mar-2036')]; CleanPrice = [100.1;100.1;100.8;96.6;103.3;96.3]; CouponRate = [0.0400;0.0425;0.0450;0.0400;0.0500;0.0425]; Instruments = [Settle Maturity CleanPrice CouponRate]; CurveSettle = datenum('30-Apr-2008'); OptOptions = optimoptions('lsqnonlin','display','iter'); functionHandle = @(t,theta) polyval(theta,t); CustomModel = IRFunctionCurve.fitFunction('Zero', CurveSettle, ... functionHandle,Instruments, ... IRFitOptions([.05 .05 .05],'FitType','price',... 'OptOptions',OptOptions))
Norm of First-order Iteration Func-count Resnorm step optimality 0 4 38036.7 4.92e+04 1 8 38036.7 10 4.92e+04 2 12 38036.7 2.5 4.92e+04 3 16 38036.7 0.625 4.92e+04 4 20 38036.7 0.15625 4.92e+04 5 24 30741.5 0.0390625 1.72e+05 6 28 30741.5 0.078125 1.72e+05 7 32 30741.5 0.0195312 1.72e+05 8 36 28713.6 0.00488281 2.33e+05 9 40 20323.3 0.00976562 9.47e+05 10 44 20323.3 0.0195312 9.47e+05 11 48 20323.3 0.00488281 9.47e+05 12 52 20323.3 0.0012207 9.47e+05 13 56 19698.8 0.000305176 1.08e+06 14 60 17493 0.000610352 7e+06 15 64 17493 0.0012207 7e+06 16 68 17493 0.000305176 7e+06 17 72 15455.1 7.62939e-05 2.25e+07 18 76 15455.1 0.000177499 2.25e+07 19 80 13317.1 3.8147e-05 3.18e+07 20 84 12865.3 7.62939e-05 7.83e+07 21 88 11779.8 7.62939e-05 7.58e+06 22 92 11747.6 0.000152588 1.45e+05 23 96 11720.9 0.000305176 2.33e+05 24 100 11667.2 0.000610352 1.48e+05 25 104 11558.6 0.0012207 3.55e+05 26 108 11335.5 0.00244141 1.57e+05 27 112 10863.8 0.00488281 6.36e+05 28 116 9797.14 0.00976562 2.53e+05 29 120 6882.83 0.0195312 9.18e+05 30 124 6882.83 0.0373993 9.18e+05 31 128 3218.45 0.00934981 1.96e+06 32 132 612.703 0.0186996 3.01e+06 33 136 13.0998 0.0253882 3.05e+06 34 140 0.0762922 0.00154002 5.05e+04 35 144 0.0731652 3.61103e-06 29.9 36 148 0.0731652 6.32308e-08 0.063 Local minimum possible. lsqnonlin stopped because the final change in the sum of squares relative to its initial value is less than the value of the function tolerance.
CustomModel = Type: Zero Settle: 733528 (30-Apr-2008) Compounding: 2 Basis: 0 (actual/actual)
Input Arguments
Type
— Type of interest-rate curve
character vector with value of 'zero'
, 'forward'
, or 'discount'
Type of interest-rate curve, specified by using a scalar character vector.
Data Types: char
Settle
— Settle date of interest-rate curve
serial date number | date character vector
Settle date of interest-rate curve, specified using a scalar serial date number or date character vector.
Data Types: double
| char
FunctionHandle
— Function handle that defines the interest-rate curve
function handle
Function handle that defines the interest-rate curve, specified using a function handle. The function handle takes two numeric vectors (time-to-maturity and a vector of function coefficients) and returns one numeric output (interest rate or discount factor). For more information on defining a function handle, see the MATLAB® Programming Fundamentals documentation.
Data Types: function_handle
Instruments
— Instruments
matrix
Instruments, specified using an
N
-by-4
data matrix where the first
column is Settle
date using a serial date number, the
second column is Maturity
using a serial date number, the
third column is the clean price, and the fourth column is a
CouponRate
for the bond.
Data Types: double
IRFitOptionsObj
— IRFitOptions object
IRFitOptions
object
IRFitOptions
object, specified using previously created
object using IRFitOptions
.
Data Types: object
Name-Value Arguments
Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN
, where Name
is
the argument name and Value
is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose
Name
in quotes.
Example: CurveObj =
IRFunctionCurve.fitFunction('Zero',CurveSettle,functionHandle,Instruments,IRFitOptions([.05
.05 .05],'FitType','price','OptOptions',OptOptions))
Compounding
— Compounding frequency per-year for IRFunctionCurve
object
CurveObj.Compounding
(default) | possible values include: –1
, 0
, 1
, 2
, 3
,
4
, 6
,
12
.
Compounding frequency per-year for the IRFunctionCurve
object, specified as the comma-separated pair consisting of
'Compounding'
and a scalar numeric using one of
the supported values:
−1
= Continuous compounding0
= Simple interest (no compounding)1
= Annual compounding2
= Semiannual compounding3
= Compounding three times per year4
= Quarterly compounding6
= Bimonthly compounding12
= Monthly compounding
Data Types: double
Basis
— Day count basis of the bond
0
(actual/actual) (default) | integer from 0
to 13
Day count basis of the bond, specified as the comma-separated pair
consisting of 'Basis'
and a scalar integer.
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
InstrumentPeriod
— Coupons per year for the bond
2
(default) | numeric with value of 0
, 1
, 2
, 3
, 4
, 6
, and 12
Coupons per year for the bond, specified as the comma-separated pair
consisting of 'InstrumentPeriod'
and a scalar numeric
value.
Data Types: double
InstrumentBasis
— Day-count basis of the bond
0
(actual/actual) (default) | integer from 0
to 13
Day count basis of the bond, specified as the comma-separated pair
consisting of 'InstrumentBasis'
and a scalar integer.
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
Note
InstrumentBasis
distinguishes a bond
instrument's Basis
value from the
interest-rate curve's Basis
value.
For more information, see Basis.
Data Types: double
InstrumentEndMonthRule
— End-of-month rule
1
(default) | logical with value 0
or 1
End-of-month rule, specified as the comma-separated pair consisting of
'InstrumentEndMonthRule'
and a logical value.
This rule applies only when Maturity
is an
end-of-month date for a month having 30 or fewer days.
0
= ignore rule, meaning that a bond's coupon payment date is always the same numerical day of the month.1
=set
rule on (default), meaning that a bond's coupon payment date is always the last actual day of the month.
Data Types: logical
InstrumentIssueDate
— Instrument issue date
[]
(default) | serial date number | date character vector
Instrument issue date, specified as the comma-separated pair
consisting of 'InstrumentIssueDate'
and a scalar
serial date number or date character vector.
Data Types: double
| char
InstrumentFirstCouponDate
— Date when a bond makes its first coupon payment
cash flow payment dates are determined from other inputs (default) | serial date number | date character vector
Date when a bond makes its first coupon payment (used when bond has an
irregular first coupon period), specified as the comma-separated pair
consisting of 'InstrumentFirstCouponDate'
and a
scalar serial date number or date character vector. When
InstrumentFirstCouponDate
and
InstrumentLastCouponDate
are both specified,
InstrumentFirstCouponDate
takes precedence in
determining the coupon payment structure. If you do not specify a
InstrumentFirstCouponDate
, the cash flow payment
dates are determined from other inputs.
Data Types: double
| char
InstrumentLastCouponDate
— Last coupon date of a bond before the maturity date
cash flow payment dates are determined from other inputs (default) | serial date number | date character vector
Last coupon date of a bond before the maturity date (used when bond
has an irregular last coupon period), specified as the comma-separated
pair consisting of 'InstrumentLastCouponDate'
and a
scalar serial date number or date character vector. In the absence of a
specified InstrumentFirstCouponDate
, a specified
InstrumentLastCouponDate
determines the coupon
structure of the bond. The coupon structure of a bond is truncated at
the InstrumentLastCouponDate
, regardless of where it
falls, and is followed only by the bond's maturity cash flow date. If
you do not specify a InstrumentLastCouponDate
, the
cash flow payment dates are determined from other inputs.
Data Types: double
| char
InstrumentFace
— Face or par value
100
(default) | numeric
Face or par value, specified as the comma-separated pair consisting of
'InstrumentFace'
and a scalar numeric.
Data Types: double
Note
When using Instrument
name-value pairs, you can specify
simple interest for a bond by specifying the
InstrumentPeriod
value as 0
. If
InstrumentBasis
and
InstrumentPeriod
are not specified for a bond, the
following default values are used: InstrumentBasis
is
0
(act/act) and InstrumentPeriod
is
2
.
Output Arguments
CurveObj
— Curve model
structure
Curve model, returned as a structure.
Version History
Introduced in R2008b
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)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)