Custom fit interest-rate curve object to bond market data
CurveObj = IRFunctionCurve.fitFunction(Type,Settle,FunctionHandle,Instruments,IRFitOptionsObj) CurveObj = IRFunctionCurve.fitFunction(Type,Settle,FunctionHandle,Instruments,IRFitOptionsObj,Name,Value)
Type | Type of interest-rate curve for a bond: |
Settle | Scalar for the |
FunctionHandle | Function handle that defines the interest-rate curve. 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. |
Instruments |
|
IRFitOptionsObj | Object constructed from |
Compounding | (Optional) Scalar that sets the compounding frequency
per year for the
|
Basis | (Optional) Day-count basis of the bond. A scalar of integers.
For more information, see Basis. |
For each bond Instrument
, you can specify
the following additional instrument parameters as parameter/value
pairs. For example, InstrumentBasis
distinguishes
a bond instrument's Basis
value from the curve's Basis
value.
| (Optional) Coupons per year of the bond. A vector of
integers. Allowed values are |
| (Optional) Day-count basis of the bond. A vector of integers.
For more information, see Basis. |
| (Optional) End-of-month rule. A vector. This rule applies
only when |
| (Optional) Date when an instrument was issued. |
| (Optional) Date when a bond makes its first coupon payment;
used when bond has an irregular first coupon period. When |
| (Optional) Last coupon date of a bond before the maturity
date; used when bond has an irregular last coupon period. In the absence
of a specified |
| (Optional) Face or par value. Default = |
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: Basis
is 0
(act/act)
and Period
is 2
.
CurveObj = IRFunctionCurve.fitFunction(Type, Settle, FunctionHandle, Instruments,
IRFitOptionsObj,Name,Value)
fits a bond to a custom fitting function. You
must enter the optional arguments for Basis
and
Compounding
as comma-separated pairs of
Name
,Value
arguments. Name
is the argument name and Value
is the corresponding value.
Name
must appear inside quotes. You can specify several name and
value pair arguments in any order as
Name1
,Value1
,...,NameN
,ValueN
.
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 f(x) step optimality CG-iterations 0 4 38036.7 4.92e+04 1 8 38036.7 10 4.92e+04 0 2 12 38036.7 2.5 4.92e+04 0 3 16 38036.7 0.625 4.92e+04 0 4 20 38036.7 0.15625 4.92e+04 0 5 24 30741.5 0.0390625 1.72e+05 0 6 28 30741.5 0.078125 1.72e+05 0 7 32 30741.5 0.0195312 1.72e+05 0 8 36 28713.6 0.00488281 2.33e+05 0 9 40 20323.3 0.00976562 9.47e+05 0 10 44 20323.3 0.0195312 9.47e+05 0 11 48 20323.3 0.00488281 9.47e+05 0 12 52 20323.3 0.0012207 9.47e+05 0 13 56 19698.8 0.000305176 1.08e+06 0 14 60 17493 0.000610352 7e+06 0 15 64 17493 0.0012207 7e+06 0 16 68 17493 0.000305176 7e+06 0 17 72 15455.1 7.62939e-05 2.25e+07 0 18 76 15455.1 0.000177499 2.25e+07 0 19 80 13317.1 3.8147e-05 3.18e+07 0 20 84 12865.3 7.62939e-05 7.83e+07 0 21 88 11779.8 7.62939e-05 7.58e+06 0 22 92 11747.6 0.000152588 1.45e+05 0 23 96 11720.9 0.000305176 2.33e+05 0 24 100 11667.2 0.000610352 1.48e+05 0 25 104 11558.6 0.0012207 3.55e+05 0 26 108 11335.5 0.00244141 1.57e+05 0 27 112 10863.8 0.00488281 6.36e+05 0 28 116 9797.14 0.00976562 2.53e+05 0 29 120 6882.83 0.0195312 9.18e+05 0 30 124 6882.83 0.0373993 9.18e+05 0 31 128 3218.45 0.00934981 1.96e+06 0 32 132 612.703 0.0186996 3.01e+06 0 33 136 13.0998 0.0253882 3.05e+06 0 34 140 0.0762922 0.00154002 5.05e+04 0 35 144 0.0731652 3.61102e-06 29.9 0 36 148 0.0731652 6.32335e-08 0.063 0 Local minimum possible. lsqnonlin stopped because the final change in the sum of squares relative to its initial value is less than the default value of the function tolerance.