Main Content


Fit Nelson-Siegel model to bond market data

Since R2020a



outCurve = fitNelsonSiegel(Settle,Instruments,CleanPrice) fits a Nelson-Siegel model to bond data.


collapse all

Define the bond data and use fininstrument to create FixedBond instrument objects.

 Settle = datetime(2017,9,15);
  Maturity = [datetime(2019,9,15);datetime(2021,9,15);...
  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];
  nInst = numel(CouponRate);
Bonds(nInst,1) = fininstrument.FinInstrument;
for ii=1:nInst
    Bonds(ii) = fininstrument("FixedBond",'Maturity',Maturity(ii),...

Use fitNelsonSiegel to create a parametercurve object.

NSModel = fitNelsonSiegel(Settle,Bonds,CleanPrice)
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.
NSModel = 
  parametercurve with properties:

              Type: "zero"
            Settle: 15-Sep-2017
       Compounding: -1
             Basis: 0
    FunctionHandle: @(t)fitF(Params,t)
        Parameters: [3.4799e-08 0.0363 0.0900 16.5823]

Input Arguments

collapse all

Settlement date, specified as a scalar datetime, string, or date character vector.

To support existing code, fitNelsonSiegel also accepts serial date numbers as inputs, but they are not recommended.

Bond instrument objects, specified as an array of bond instruments objects.

Data Types: object

Observed market prices, specified as a vector.

Data Types: double

Output Arguments

collapse all

Fitted Nelson-Siegel model, returned as a parametercurve object.

Version History

Introduced in R2020a

expand all