楼主: 匿名
19787 8

[MATLAB] [MATLAB代码模板]固定收益证券计算 [推广有奖]

匿名网友
楼主
匿名网友  发表于 2015-8-2 19:58:25 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

固定收益证券计算

转自http://wenku.baidu.com/view/bc8a45c1bb4cf7ec4afed0ba.html

1  固定收益债券定价

1bndprice函数

目的: 给固定收益债券定价

格式:

  1. [Price,AccruedInt]=bndprice(Yield,CouponRate,Settle,Maturity)
  2. [Price,AccruedInt]=bndprice(Yield,CouponRate,Settle,Maturity,Period,Basis,EndMonthRule,
  3.                                IssueDate,FirstCouponDate,LastCouponDate,StartDate,Face)
复制代码

参数:Yield    半年为基础的到期收益

          CouponRate  分红利率

          Settle   结算日期,时间向量或字符串,必须小于等于到期日

          Maturity  到期日,日期向量

          Period  选择项,年分红次数,缺省值2,可为0,1,2,3,4,6,12

          Basis  选择项,债券的天数计算法。缺省值为0=实际值/实际值,1=30/360,2=实际值/360,3=实际值/365

          EndMonthRule  可选项,月未规则,应用在到期日是在小于等于30天的月份.0代表债券的红利发放日总是固定的一天,缺省1代表是在实际的每个月未

          IssueDate  可选项,发行日期

          FirstCouponDate  可选项,第一次分红日。当FirstCouponDate和LastCouponDate同时出现时,FirstCouponDate优先决定红利发放结构

          LastCouponDate可选项,到期日的最后一次红利发放日。当FirstCouponDate没标明时,LastCouponDate决定红利发放结构。红利发放结构无论LastCouponDate是何时,都以其为准,并且紧接着债权到期日.

         StarDate  可选项,债权实际起始日(现金流起始日)。当预计未来的工具时,用它标明未来的日期,如果没有特别说明StarDate,起始日是settlement date

        Face  面值,缺省值是100


     上面所有的参数必须是1*NUMBONDS或是NUMBONDS*1的向量。当为可选项时,用(〔〕)代替,在向量用NaN填写没说明的输入项。

描述:本函数表明给定日期和半年收益后,计算价格和利息。其中Price是价格,AccruedInt是结算日的利息。Price和Yield有如下公式:

                         Price+Accrued—Interest=sum(CashFlow*(1+Yield/2)^(-Time))

  1. Yield=[0.04;0.05;0.06]
  2.             CouponRate=0.05
  3.             Settle=’20-Jan-1997’
  4.             Maturity=’15-Jun-2002’
  5.             Period=2
  6.             Basis=0
  7.             [Price,AccruedInt]=bndprice(Yield,CouponRate,Settle,Maturity,Period,Basis)
  8.              Price=104.8106                             99.9951                          95.4384
  9.             AccruedInt=0.4945                       0.4945                             0.4945
复制代码

参阅:cfamounts,bndyield

2prdisc 函数

目的    折价债券的价格

格式   Price=prdisc(Settle,Maturity,Face,Discount,Basis)

参数    Settle      作为序列时间号或日期串进入,必须早于或等于到期日。

Maturity   作为日期串进入。

Face         票面价值。

Discount   债券的银行折现率,是分数。

Basis         计算日期的基础

描述    本函数表示返回债券的价格,它的收益率是银行要求的折现率。

     


  1. Settle=’10/14/2000’;
  2.          Maturity  =’03/17/2001’;
  3.          Face=100;
  4.          Discount=0.087;
  5.          Basis=2;
  6. price=prdisc(Settle,Maturity,Face,Discount,Basis)
复制代码

返回

                 Price=96.2783


(3) prmat 函数

目的   到期支付利息的债券的价格,与到期利率有关的价格

格式   [Price,AccruInterest]=prmat(Settle,Maturity,Issue,Face,CouponRate,Yield,Basis)

参数   Settle作为序列时间号或日期串进入,必须早于或等于到期日。

Maturity作为日期串进入。

Issue作为序列时间号或日期串进入。

Face票面价值。

CouponRate作为分数进入。

Yield年收益率。是分数。

Basis计算日期的基础。

描述    本函数表示返回价格和在到期支付债券的精确利率。这个函数也应用于零息票债券或纯折现债券,通过使


  1. Settle=’02/07/2002’;
  2.         Maturity  =’04/13/2002’;
  3.         Issue=’10/11/2002’;
  4.         Face=100;
  5.         CouponRate=0.0608;
  6.         Yield=0.0608;
  7.         Basis=1;
  8. [Price,AccruInterest]=prmat(Settle,Maturity,Issue,Face,CouponRate,Yield,Basis)
复制代码

回车

          Price=99.9784

           AccruInterest=1.9591


(4prtbill

目的    国库券的价格,ZF债券的定价

格式   Price=prtbill(Settle,Maturity,Face,Discount)

参数    Settle      作为序列时间号或日期串进入。必须早于或等于到期日。

Maturity    作为日期串进入。

Face       票面价值。

Discount   债券的银行折现率。是分数。

描述    本函数表示返回国库券的价格。

  2002年2月10日发行,2002年8月6日到期,折现率3.77%,并且平价是1000$。则使用这些数据有

  1. Price=prtbill(‘2/10/2002’,’8/6/2002’,1000,0 .0377)
复制代码

返回 Price=981.4642


2 利率期限结构

1Disc2zero函数

目的 给定贴现曲线的零曲线,用Zero曲线描述贴现曲线

格式 

  1. (ZeroRates,CurveDates)=disc2zero(Discrates,CurveDates,Settle,OutputCompounding,OutputBasis)
复制代码

参数    DiscRates  贴现要素的列向量,其要素构成投资领域的贴现曲线

       CurveDates 对应的到期日列向量 

       Settle    DiscRates里的贴现率的结算时间

       OutputCompounding

                1    年复利

                2    半年复利

                3    每年三次复利

                4    季度复利

                6    两月复利

                12   月复利

                365  日复利

                -1   连续复利

Output basis

        0  实际值/实际值(缺省值)

        1  30/360,

        2  实际值/360

        3  实际值/365

描述

   (ZeroRates,CurveDates)=disc2zero(discRates,CurveDates,Settle,OutputCompounding,OutputBasis)

     ZeroRates  十进制列向量

      CurveDates  对应的zero rates列向量这个向量与输入的CurveDates相量相似

  1. DiscRates=[0.9996
  2.                   0.9947
  3.                   0.9896
  4.                   0.9866
  5.                   0.9826
  6.                   0.9786
  7.                   0.9745
  8.                   0.9665
  9.                   0.9552
  10.                   0.9466]
  11.         CurveDates=[datenum(06-Nov-2000)
  12.                    datenum(11-Dec-2000)
  13.                    datenum(15-jan-2001)
  14.                    datenum(05-Feb-2001)
  15.                    datenum(04-Mar-2001)
  16.                    datenum(02-Apr-2001)
  17.                    datenum(30-Apr-2001)
  18.                    datenum(25-Jun-2001)
  19.                    datenum(04-Sep-2001)
  20.                    datenum(12-Nov-2001)]
  21.          Settle=datenum(03-Nov-2000)
  22.          Set daily compounding for the output zero curve, on an actual/365 basis.
  23.          OutputCompounding=365
  24.          OutputBasis=3
  25. 执行方程
  26. [Zerorates,CurveDates]=disc2zero(DiscRates,CurveDates,Settle,Outputcompounding,outputBasis)
  27. ZeroRates=
  28.    0.0487
  29.    0.0510
  30.    0.0523
  31.    0.0524
  32.    0.0530
  33.    0.0526
  34.    0.0530
  35.    0.0532
  36.    0.0549
  37.    0.0536
  38. CurveDates=
  39.    730796
  40.    730831
  41.    730866
  42.    730887
  43.    730914
  44.    730943
  45.    730971
  46.    731027
  47.    731098
  48.    731167
复制代码


注意 zero2disc和其它的利率期限结构函数

实际上,DiscRates,ZeroRates只是基点。然而,MATLAB完全精确的计算出它们。如果你如上输入DisvRates,ZeroRates可能会有所不同。

2fwd2zero

目的  给定远期曲线的零曲线

格式   

[ZeroRates,CurveDates]=fwd2zero(ForwardRates, CurveDates, Settle, OutputCompounding,

                     OutputBasis,InputCompounding, InputBasis)

参数   ForwardRates   一组债券的远期利率。总之,中的利率构成了投资领域的远期曲线。

    CurveDates      对应远期利率的到期日向量.

    Settle           远期利率的一般结算日.

       OutputCompounding

                1    年复利

                2    半年复利

                3    每年三次复利

                4    季度复利

                6    两月复利

                12   月复利

                365  日复利

                -1   连续复利

Output basis

        0  实际值/实际值(缺省值)

        1  30/360,

        2  实际值/360

        3  实际值/365

     InputCompounding

     InputBasis

描述   计算了给定远期曲线的Zero曲线以及到期日   


      ZeroRates         A NUMBONDS-by-1 vector of decimal fractions. In aggregate, the rates in ZeroRates constitute a zero curve for the investment horizon represented by CurveDates.

      CurveDates      A NUMBONDS-by-1 vector of maturity dates(as serial date numbers) that correspond to the zero rates in

ZeroRates. This vector is the same as the input vector CurveDates.

例   Given an impliede forward curveForwardRates over a set of maturity dates CurveDates, and a settlement dateSettle:


  1. FowardRates= [0.0469
  2.                         0.0519
  3.                         0.0549
  4.                         0.0535
  5.                         0.0558
  6.                         0.0508
  7.                         0.0560
  8.                         0.0545
  9.                         0.0615
  10.                         0.0486];
  11.         CurveDates= [datenum(’06-Nov-2000’)
  12.                     datenum(’11-Dec-2000’)
  13.                     datenum(’15-Jan-2001’)
  14.                     datenum(’05-Feb-2001’)
  15.                     datenum(’04-Mar-2001’)
  16.                     datenum(’02-Apr-2001’)
  17.                     datenum(’30-Apr-2001’)
  18.                     datenum(’25-Jun-2001’)
  19.                     datenum(’04-Sep-2001’)
  20.                     datenum(’12-Nov-2001’)
  21.        Settle= datenum(’03-Nov-2000’)
  22.          Set daily compounding for the zero curve, on an actual/365 basis. The forward curve was compounded annually on an actual/actual basis.
  23.           OutputCompounding= 365;
  24.           OutputBasis= 3;
  25.           InputCompounding= 1;
  26.         InputBasis= 0;
  27.     Execute the function
  28.     [ZeroRates, CurveDates]=fwd2zero(ForwardRates, CurveDates, Settle, OutputCompounding, OutputBasis, InputCompounding, InputBasis)
  29.   Which returns the zero curve ZeroRates at the maturity dates CurveDates:
  30.      ZeroRates=
  31.          0.0457
  32.          0.0501
  33.          0.0516
  34.          0.0517
  35.          0.0523
  36.          0.0517
  37.          0.0521
  38.          0.0523
  39.          0.0540
  40.          0.0528
  41.      CurveDates =
  42.             730796
  43.             730831
  44.             730866
  45.             730887
  46.             730914
  47.             730943
  48.             730971
  49.             731027
  50.             731098
  51.             731167
复制代码

        实际上,ForwardRates 和ZeroRates只是基点。但是,用MATLAB 可以完全准确的计算。如果你如上输入ForwardRates, ZeroRates可能于到期日的不同。

注意  zero2fwd and other functions for TermStructure of Interest Rates.

(3)Prbyzero函数

目的    一组零曲线证券组合的债券价格,零息票债券的价格

格式   BondsPrices=prbyzero(Bonds,Settle,ZeroRates,ZeroDates)

参数   

       Bonds      用于计算价格的债券信息。六阶债券矩阵每一行代表一种债券。

                       首先的两列是被要求的;剩下的是可选的但必须按顺序添加。证券中的行必须有相同的列。

        Maturity  到期日是序列日期数。

       CouponRate  小数指示能支付的息票

       Face        票面利率

       Period      债券付息期

       Basis        债券日期计算基础

       EndMonthRule   这个规则只适用于到期日的月末是三十天或小于三十天。

       Settle      建立日期的序列日期值。

       ZeroRates  观察到的零率的日期曲线矩阵。每一列代表曲线率。每一行代表观察日期。

       ZeroDates  第一列的观察值为零。

描述    BondsPrices=prbyzero(Bonds,Settle,ZeroRates,ZeroDates)计算证券组合中债券的价格。

            债券价格是光票债券曲线数目矩阵。每一列来自相应的零利率曲线。

例     

  1. Bonds=[datenum(‘6/1/1998’) 0.0475 100 200;
  2. datenum(‘7/1/2000’)0.06 100 200;
  3. datenum(‘7/1/2000’)0.09375 100 610;
  4. datenum(‘6/30/2001)0.05125 100 131;
  5.        datenum(‘4/15’2002’)0.07125 100 410;
  6.       datenum(‘1/15/2000’)0.065 100 200;
  7.       datenum(‘9/1/1999’)0.08 100 330;
  8.     datenum(‘4/30/2001’)0.05875 100 200;
  9. datenum(‘11/15/1999’)0.07125 100 200;
  10. datenum(‘6/30/2000’)0.07 100 231;
  11. datenum(‘7/1’2001’)0.0525 100 230;
  12. datenum(‘4/30/2002’)0.07 100 200];
  13. Prices=[99.375;
  14.        99.875;
  15.        105.75;
  16. 96.875;
  17. 103.625;
  18. 101.125;
  19. 103.125;
  20. 99.375;
  21. 101.0;
  22. 101.25;
  23. 96.375;
  24. 102.75];
  25. Settle=datenum(‘12/18/1997’)
  26. OutputCompounding=2;
  27. OutputBasis=3;
  28. MaxIterations=50;
  29. 执行zbtprice
  30. [ZeroRates,ZeroDates]=zbtprice(Bonds,Price,Settle,…OutputCompounding, OutputBasis, MaxIterations)
  31. ZeroRates=0.0616
  32.          0.0690
  33.          0.0658
  34. 0.0590
  35. 0.0648
  36. 0.0655
  37. 0.0606
  38. 0.0601
  39. 0.0642
  40. 0.0621
  41. 0.0627
  42. ZeroDates=729907
  43. 730364
  44. 730439
  45. 730500
  46. 730667
  47. 730668
  48. 730971
  49. 731032
  50. 731033
  51. 731321
  52. 731336
  53. 现在执行prbyzero
  54. BondsPrices=prbyzero(Bonds,Settle,ZeroRates,ZeroDates)
  55. 得到
  56. BondsPrices=
  57. 99.38
  58. 98.80
  59. 106.83
  60. 96.88
  61. 103.62
  62. 101.13
  63. 103.12
  64. 99.36
  65. 101.00
  66. 101.25
  67. 96.37
  68. 102.74
复制代码

(4)pyld2zero函数

目的    给定平价收益曲线的零曲线

语法    [ZeroRates,CurveDates]=pyld2zero(ParRates,CurveDates,Settle,OutputComping,OutputBasis,

InputCompounding,InputBasis,MaxIrterations)

参数   

ParRates              年隐含的平价收益率向量水平线代表曲线日期平价利率中的收益绿构成隐含平价收益曲线。

CurveDates          与平价利率相对应的日期向量。

Settle                   平价利率制定是的日期向量。

OutputComping  输出的复利。复利频率标量。遵守以下规则:

                             1  年复利

                             2  半年复利

                             3  每年三次复利

                             4  季度复利

                             6  两月复利

                             12  月复利

                            365 日复利

                            -1  连续复利

         OutputBasis   输出年零利率的日期计算基础

         0  实际值/实际值(缺省值)

         1  30/360,

        2  实际值/360

                  3  实际值/365

InputCompounding 表示年输入平价利率的标量。缺省值=输出复利。

InputBasis                计算输入平价利率的日期基础。

MaxIrterations         得出零利率集的最大重复次数。

描述   返回给定平价收益曲线和到期日的零曲线。

ZeroRates                分数纵量。它组成代表曲线日期的投资横轴。

CurveDates             与零利率相应的到期日。

    给定一组到期日和签定日的平价利率曲线:

  1. ParRates=[0.0479
  2.                     0.0522
  3.            0.0540
  4.            0.0540
  5.            0.0536
  6.            0.0532
  7.            0.0532
  8.            0.0539
  9.            0.0558
  10.            0.0543]
  11. CurveDates=[datenum(06-11-2000)
  12. Datenum(11-12-2000)
  13. Datenum(15-12-2001)
  14. Datenum(05-02-2001)
  15. Datenum(04-03-2001)
  16. Datenum(02-04-2001)
  17. Datenum(30-04-2001)
  18. Datenum(25-06-2001)
  19. Datenum(04-09-2001)
  20. Datenum(12-11-2001)
  21. Settle=datenum(03-11-2000)
  22. 50次重复
  23. OutputComping=12
  24. OutputBasis=3
  25. InputCompounding=1
  26. InputBasis=0
  27. MaxIrterations=50
  28. 运行方程[ZeroRates,CurveDates]=pyld2zero(ParRates,CurveDates,Settle, OutputComping,OutputBasis,
  29. InputCompounding,InputBasis, MaxIrterations)
  30. 返回
  31. ZeroRates=
  32. 0.0461
  33. 0.0498
  34. 0.0519
  35. 0.0520
  36. 0.0510
  37. 0.0510
  38. 0.0508
  39. 0.0520
  40. 0.0543
  41. 0.0530
  42. CurveDates=
  43. 730796
  44. 730831
  45. 730866
  46. 730887
  47. 730914
  48. 730943
  49. 730971
  50. 731027
  51. 731098
  52. 731167
复制代码

5zbtprice函数

目的:从给定价格的付息证券数据中得到Zero曲线,给定价格息票债券的零曲线

格式:

[zerorates, curvedates] = zbtprice( bonds, price,settle,…

outputcompounding,outbasis  ,maxiterations )

参数:

bonds     可以推导Zero曲线的付息证券的信息。一个n行2列的矩阵,每一行代表一种证券,前两列是必须有的;其他的可以            任选到必须按照顺序增加。Bonds中每一种证券具有相同的行数和列数。列包括:

maturity      证券的到期日,连续的日期数字。使用datenum将日期字符串转化为连续的日期型数字。

Coupondate  证券的利息率,小数。

Face  (任选的)证券的偿还值或面值。默认值=100

Period  (任选的)每年利息,整数。既定值=0,1,2,3,4,6,12。默认值=2

Basis  (任选的)计数基础  : 0=实际天数/实际天数(默认值), 1=30/360,2=实际值/360,3=实际值/365

Endmonthrule (任选的)月末标识。只有一个月是30天或少于30天且到期日为月末日时使用标识。0表示忽略标识,意味着证券付息日总是每月的同一天。1表示设置标识(默认值),证券付息日总是每月的最后一天。

Prices   包括Bonds中每一证券各自的公平价格(无息价格)的列向量,行数必须与Bonds的行数一致。

Settle   偿债日(日期型数字或字符串),这表示Zero曲线的0时点,它通常是所有证券的常见偿还日。

Outputcompounding (任选的)Zerorates中年付息频率间隔标量。

既定值包括;


1.按年付息,2.每年付息(默认值),3.一年3次付息,4.按季付息,6.隔月付息,12.按月付息

     Outputbasis(任选的)计算Zerorates数值过程中使用的与现金流量日期相一致的计数基础,标量。0=实际天数/实际天数(默认值), 1=30/360,2=实际值/360,3=实际值/365

     Maxiterations    (任选的)求解Zerorates数值中重复的次数的最大值,标量。默认值=50,大于50的数值会减慢处理过程。


描述:[zerorates,curvedates] = zbtprice( bonds, price, settle, outputcompounding ,outbasis  ,maxiterations )

使用bootstrap方法得出既定付息证券组合及其价格下的Zero曲线。

     Zero曲线由输入的Bonds投资组合中推导的无息证券组合的到期收益组成。

这个方程所使用的bootstrap方法不需要调整输入投资组合证券的现金流日期。

     它使用理论上的平价证券套利,并通过插入得到的zerorates ,为了得到更好的结果,使用投资范围内均匀间隔且至少是30种证券的投资组合。

     Zerorates m行1列的各值为小数的向量,它是Curverates表示的投资范围内每一点的zerorate ;m是有相同到期日的证券的数量。通常,Zerorates的数值构成了Zero曲线。当多于一种的证券有相同的到期日时,Zbtprice得到那个到期日的平均值。

    Curvedates 表示相同到期日(日期数字串)的一个m行1列的向量,它与Zerorates中的zerorate相一致; m是不同到期日的证券的数量。这些日期开始于Bonds矩阵中Maturity的最早的到期日,终止于Maturity的最晚的到期日。

  1. Bonds=[datenum(‘6/1/1998) 0.0475 100 2 0 0;
  2. datenum(‘7/1/2000)  0.06   100 2 0 0;
  3. datenum(‘7/1/2000) 0.09375 100 6 1 0;
  4. datenum(‘6/30/2001) 0.05125 100 1 3 1;
  5. datenum(‘4/15/2002) 0.07125 100 4 1 0;
  6. datenum(‘1/15/2000) 0.065   100 2 0 0;
  7. datenum(‘9/1/1999)  0.08    100 3 3 0;
  8. datenum(‘4/30/2001) 0.05875 100 2 0 0;
  9. datenum(‘11/15/1999) 0.07125 100 2 0 0;
  10. datenum(‘6/30/2000) 0.07     100  2 3 0;
  11. datenum(‘7/1/2001) 0.0525    100 2 3 0;
  12. datenum(‘4/30/2002) 0.07     100 2 0 0;]
  13. Prices=[99.375;
  14. 99.875;
  15. 105.75;
  16. 96.875;
  17. 103.625;
  18. 101.125;
  19. 103.125;
  20. 99.375;
  21. 101.0;
  22. 101.25;
  23. 96.375;
  24. 102.75];
  25. Settle=datenum(‘12/18/1997’);
复制代码

  给出12种付息证券的价格和数据,其中两种有相同的到期日;并给出常见的偿还日:


在实际天数365的计数基础上,为曲线设定半年付息。重复50次操作得到曲线。

Outputcompounding=2;

Outputbasis=3;

Maxiterations=50;

执行函数

[zerorates,curvedates] = zbtprice( bonds, price, settle, outputcompounding ,outbasis  ,maxiterations )得到到期日的Zero曲线。

注意,具有相同到期日的两种证券的平均Zerorate。

  1. Zerorates=0.0616
  2. 0.0609
  3. 0.0658
  4. 0.0590
  5. 0.0648
  6. 0.0655*
  7. 0.0606
  8. 0.0601
  9. 0.0642
  10. 0.0621
  11. 0.0627
  12. Curvedates=729907 (1998年1月1日的日期型数字)
  13. 730364 (01-Sep-1999)
  14. 730439 (15-Nov-1999)
  15. 730500 (15-Jan-2000)
  16. 730667 (30-Jun-2000)
  17. 730668 (01-Jul-2000)
  18. 730971 (30-Apr-2001)
  19. 731032 (30-Jun-2001)
  20. 731033 (01-Jul-2001)
  21. 731321 (15-Apr-2002)
  22. 731336 (30-Apr-2002)
复制代码

6zbtyield                                

目的:用bootstrap方法从给定收益的付息证券信息中导出Zero曲线,给定收益时票债券的零曲线

格式:[zerorates, curvedates] = zbtyield( bonds, yield, settle, …

outputcompounding ,outbasis  ,maxiterations )

参数:

   bonds  可以推导Zero曲线的付息证券的信息。一个n行2列的矩阵,每一行代表一种证券,前两列是必须有的;其他的可以任选到必须按照顺序增加。Bonds中每一种证券具有相同的行数和列数。列包括:

   maturity 证券的到期日,连续的日期数字。使用datenum将日期字符串转化为连续的日期型数字。

   Coupondate 证券的利息率,小数。

   Face (任选的)证券的偿还值或面值。默认值=100

  Period (任选的)每年利息,整数。既定值=0,1,2,3,4,6,12。默认值=2

   Basis (任选的)计数基础  : 0=实际天数/实际天数(默认值), 1=30/360,2=实际值/360,3=实际值/365

   Endmonthrule (任选的)月末标识。只有一个月是30天或少于30天且到期日为月末日时使用标识。0表示忽略标识,意味着证券付息日总是每月的同一天。1表示设置标识(默认值),证券付息日总是每月的最后一天。

   Yields一个矩阵向量,包括Bonds中每一证券各自的到期收益,行数必须与Bonds的行数一致。

   Settle偿债日(日期型数字或字符串),这表示Zero曲线的0时点,它通常是所有证券的常见偿还日。

  Outputcompounding (任选的)Zerorates中年付息频率间隔标量。既定值包括;

1.按年付息,2.每年付息(默认值),3.一年3次付息,4.按季付息,6.隔月付息,12.按月付息

  Outputbasis(任选的)计算Zerorates数值过程中使用的与现金流量日期相一致的计数基础,标量。0=实际天数/实际天数(默认值), 1=30/360,2=实际值/360,3=实际值/365

  Maxiterations (任选的)求解Zerorates数值中重复的次数的最大值,标量。默认值=50,大于50的数值会减慢处理过程。


描述:[zerorates,curvedates] = zbtprice( bonds, price, settle, outputcompounding ,outbasis  ,maxiterations )

    使用bootstrap方法得出既定付息证券组合及其价格下的Zero曲线。Zero曲线由输入的Bonds投资组合中推导的无息证券组合的到期收益组成。这个方程所使用的bootstrap方法不需要调整输入投资组合证券的现金流日期。它使用理论上的平价证券套利,并通过插入得到的zerorates ,为了得到更好的结果,使用投资范围内均匀间隔且至少是30种证券的投资组合。

    Zerorates m行1列的各值为小数的向量,它是Curverates表示的投资范围内每一点的zerorate ;m是有相同到期日的证券的数量。通常,Zerorates的数值构成了Zero曲线。当多于一种的证券有相同的到期日时,Zbtprice得到那个到期日的平均值。

    Curvedates 表示相同到期日(日期数字串)的一个m行1列的向量,它与Zerorates中的zerorate相一致; m是不同到期日的证券的数量。这些日期开始于Bonds矩阵中Maturity的最早的到期日,终止于Maturity的最晚的到期日。

     使用datestr将日期型数字串转化为日期型字符串。


例:给出12种付息证券的价格和数据,其中两种有相同的到期日;并给出常见的偿还日:

  1. Bonds=[datenum(‘6/1/1998) 0.0475 100 2 0 0;
  2. datenum(‘7/1/2000)  0.06   100 2 0 0;
  3. datenum(‘7/1/2000) 0.09375 100 6 1 0;
  4. datenum(‘6/30/2001) 0.05125 100 1 3 1;
  5. datenum(‘4/15/2002) 0.07125 100 4 1 0;
  6. datenum(‘1/15/2000) 0.065   100 2 0 0;
  7. datenum(‘9/1/1999)  0.08    100 3 3 0;
  8. datenum(‘4/30/2001) 0.05875 100 2 0 0;
  9. datenum(‘11/15/1999) 0.07125 100 2 0 0;
  10. datenum(‘6/30/2000) 0.07     100  2 3 0;
  11. datenum(‘7/1/2001) 0.0525    100 2 3 0;
  12. datenum(‘4/30/2002) 0.07     100 2 0 0;]
  13. Yield=[0.048;
  14. 0.06;
  15. 0.089;
  16. 0.053;
  17. 0.069;
  18. 0.064;
  19. 0.078;
  20. 0.059;
  21. 0.071;
  22. 0.069;
  23. 0.057;
  24. 0.068};
  25. Settle=datenum(‘12/18/1997’);
复制代码

在实际天数365的计数基础上,为曲线设定半年付息。重复50次操作得到曲线。

Outputcompounding=2;

Outputbasis=3;

Maxiterations=50;


执行函数

[zerorates,curvedates] = zbtyield( bonds, yield, settle, outputcompounding ,outbasis  ,maxiterations )得到到期日的Zero曲线。

注意,具有相同到期日的两种证券的平均Zerorate。

  1. Zerorates=0.0480
  2. 0.0577
  3. 0.0909
  4. 0.0529
  5. 0.0699
  6. 0.0724*
  7. 0.0584
  8. 0.0716
  9. 0.0669
  10. 0.0526
  11. 0.0687
  12. Curvedates=729907 (1998年1月1日的日期型数字)
  13. 730364 (01-Sep-1999)
  14. 730439 (15-Nov-1999)
  15. 730500 (15-Jan-2000)
  16. 730667 (30-Jun-2000)
  17. 730668 (01-Jul-2000)
  18. 730971 (30-Apr-2001)
  19. 731032 (30-Jun-2001)
  20. 731033 (01-Jul-2001)
  21. 731321 (15-Apr-2002)
  22. 731336 (30-Apr-2002)
复制代码

类同:zbtprice和其他利率期限结构函数

3  收益

1beytbill函数

目的  短期国库券的债券等价产出。ZF债券的等价收益

格式  yield=beytbill(settle,maturity,discount)

参数  settle 输入连续日期数或日期流。交割日必须等于或早于到期日。

Maturity输入连续日期数或日期流。

Discount 短期国库券的贴息率。输入小数。


描述yield=beytbill(settle,maturity,discount) 得出短期国库券的债券等价产出。

例11 短期国库券的交割日是Feb 11,2000,到期日是Aug 7,2000,贴息率是5.77%.债券的等价产出是

  1. yield=beytbill(‘2/11/2000’,’8/7/2000’,0.0577)
  2.       yield= 0.0602
复制代码

(2)bndyield函数

目的:固定利率债券的到期收益

格式Yield=bndyield(Price,CouponRate,Settle,Maturity,Period,Basis,EndMonthRule,IssueDate,

                    FirstCouponDate,LastCouponDate,StartDate,Face)

参数 所有说明的参数必须是1*NUMBONDS或是NUMBONDS*1的向量.当是可选项时,用(〔〕)代替.在向量用NaN填写没说明的输入项.

           Price  净值

           CouponRate  分红利率

           Settle 结算日期.时间向量或字符串.必须小于等于到期日

           Maturity 到期日,日期向量.

           Period   选择项.年分红次数缺省值2,可为0,1,2,3,4,6,12.

           Basis 选择项.债券的天数计算法.缺省值为0=实际值/实际值.1=30/360,2=实际值/360,3=实际值/365

           EndMonthRule  可选项.月未规则,应用在到期日实在小于等于30天的月份.0代表债券的红利发放日总是固定的一天,缺省1代表是在实际的每个月未

           IssueDate  可选项.发行日期

           FirstCouponDate  可选项.第一次分红日。当FirstCouponDate和LastCouponDate同时出现时,FirstCouponDate优先决定红利发放结构

           LastCouponDate 可选项.到期日的最后一次红利发放日。当FirstCouponDate没标明时,LastCouponDate决定红利发放结构.红利发放结构无论LastCouponDate是何时,都以其为准,并且紧接着债权到期日.

          StarDate可选项.债权实际起始日(现金流起始日).当预计未来的工具时,用他标明是个未来的日期,如果没有特别说明StarDate,起始日是settlement date.

          Face面值.缺省值是100.

描述 给定日期和净值后,计算到期收益。Yield是1*NUMBONDS向量,Price和Yield有如下公式:

         Price+Accrued—Interest=sum(CashFlow*(1+Yield/2)^(-Time))

例12


  1. Price=[95;100;105]
  2.             CouponRate=0.05
  3.             Settle=’20-Jun-1997’
  4.             Maturity=’15-Jun-2002’
  5.             Period=2
  6.             Basis=0
  7.             [Yield]=bndyield(Price=CouponRate=Settle=Maturity=Period=Basis)
  8.             Yield=0.0610         0.0500         0.0396
复制代码

3discrate函数

目的 货币市场证券的银行贴现率

格式 DiscRate=discrate(Settle,Maturity,Face,Price,Basis)

参数  

    Settle  以时间序列输入。结算日必须早于或等于到期日

     Maturity 以时间序列输入

     Face   赎回价值

     Price   证券价格

    Basis     缺省值为0=实际值/实际值.1=30/360,2=实际值/360,3=实际值/365

描述   DiscRate=discrate(Settle,Maturity,Face,Price,Basis)表明了证券的银行贴现率。银行贴现率基于证券的赎回价值计算并且体现了投资者的所得。

13  

  1. DiscRate=discrate(12-Jan-2000,25-Jun-2000,100,97.74,0)
  2.            Returns
  3.            DiscRate=
  4.                0.0501
复制代码

           贴现率为5.01 %

(4)ylddisc函数

目的:计算折价债券的收益,贴现证券的收益

格式yield=ylddisc(settle,maturity,face,price,basis)

参数settle  偿债日(日期型数字或字符串),其必须早于或等于到期日

       maturity   到期日(日期型数字或字符串)

       face   赎回价(平价,面值)

       price  债券的折价

            basis   (任选的)计数基础  : 0=实际天数/实际天数(默认值), 1=30/360,2=实际值/360,3=实际值/365

描述: yield=ylddisc(settle,maturity,face,price,basis) 计算折价债券的收益

例14

  1. settle=’10/14/2000’;
  2. maturity=’03/17/2001’;
  3. face=100;
  4. price=96.28;
  5. basis=2;
  6. yield=ylddisc(settle,maturity,face,price,basis)
  7. yield=0.0903(or9.03%)
  8. 同样 acrudisc,bndprice,bndyield,prdisc,yldtbill
复制代码

(5)yldmat函数

目的:计算到期付息债券的收益率

格式 yield=yldmat(settle, maturity, issue, face,price, couponrate,  basis)

参数settle  偿债日,日期型数字或字符串,其必须早于或等于到期日

        maturity   到期日,日期型数字或字符串

        issue 发行日,日期型数字或字符串

       face   赎回价(平价,面值)

        price  债券的折价

       couponrate   利息率,小数

              basis   (任选的)计数基础  : 0=实际天数/实际天数(默认值), 1=30/360,2=实际值/360,3=实际值/365

描述:yield=yldmat(settle, maturity, issue, face,price, couponrate,  basis) 计算到期付息债券的收益率

例15:使用下列数据

  1. settle=’02/07/2000’;
  2. maturity=’04/13/2000’;
  3. issue=’10/11/1999’;
  4. face=100;
  5. price=99.98;
  6. couponrate=0.0608;
  7. basis=1;
  8. yield=yldmat(settle, maturity, issue, face, price, couponrate,  basis)
复制代码

得出  yield=0.0607(or6.07%)

同样:acrubond,bndprice,bndyield,prmat,ylddisc,ylbtbill

(6)yldtbill函数

目的:计算短期国库券的收益

格式:yield=yldtbill (settle, maturity, face, )

参数settle  偿债日,日期型数字或字符串,其必须早于或等于到期日

        maturity   到期日,日期型数字或字符串

       face   赎回价(平价,面值)

       price  债券的折价

描述:yield=yldmat(settle, maturity, face, ) 计算短期国库券的收益

例16:短期国库券清偿日期为2000年2月10日,到期日式2000年8月6日,面值是1000美元,价格是981.36美元。使用这一数据,

  1. yield=yldtbill(‘2、10、2000’,‘8、6、2000’,1000,981036)
复制代码

得到   yield=0.0384(3.84%)

类同:beytbill,bndyield,prtbill,yldmat


4 利息率敏感性

(1)bndconvp函数

目的: 给定价格的债券凸性

格式[YearConvexity,PerConvexity]=bndconvp(Price,CouponRate,Settle,Maturity,Period,Basis,

                  EndMonthRule,IssueDate,FirstCouponDate,LastCouponDate,StarDate,Face)

参数Price :    净价(不包括利息)

         CouponRate:分红利率

         Settle:   结算日期.时间向量或字符串.必须小于等于到期日

         Maturity:  到期日,日期向量.

         Period:  选择项.年分红次数缺省值2,可为0,1,2,3,4,6,12.

         Basis:  选择项.债券的天数计算法.缺省值为0=实际值/实 际  值.1=30/360,2=实际值/360,3=实际值/365

         EndMonthRule:可选项.月未规则.应用在到期日实在小于等于30 天的月份.0代表债券的红利发放日总是固定的一天,缺省1代表是在实际的每个月未

         IssueDate:可选项.发行日期

         FirstCouponDate:可选项.第一次分红日.当FirstCouponDate和LastCouponDate同时出现时,FirstCouponDate优先决定红利发放结构

         LastCouponDate:可选项.到期日的最后一次红利发放日.当FirstCouponDate没标明时,LastCouponDate决定红利发放结构.红利发放结构无论LastCouponDate是何时,都以其为准,并且紧接着债权到期日.

         StarDate:可选项.债权实际起始日(现金流起始日).当预计未来的工具时,用他标明是个未来的日期,如果没有特别说明StarDate,起始日是settlement date.

          Face面值.缺省值是100.

      所有说明的参数必须是1*NUMBONDS或是NUMBONDS*1的向量.当时可选项是,用[〔〕]代替.在向量用NaN填写没说明的输入项.

描述 当给定每一个债券的价格时,计算固定收益NUMBONDS的凸性,无论红利结构中的最先或最后的红利期长或短(即红利结构是否和到期日一致).这个函数也决定零收益债券的凸性.

  YearConvexity按照年PerConvexity按照半年计算,符合SIA的协议. 所有的输出是NUMBONDS*1的向量.

例17

  1. Yield=[106;100;98]
  2.               CouponRate=0.055
  3.               Settle=‘02-Aug-1999’
  4.               Maturity=‘15-Jun-2004’
  5.               Period=2
  6.               Basis=0
  7.   [YearConvexity,PerConvexity]=bndconvp(Price,CouponRate,Settle,Maturity,Period,Basis)
  8. YearConvexity=21.4447    21.0363     20.8951
  9.        PerConvexity=85.7788     84.1454     83.5803
复制代码

参阅:bndconvp,bndconvy,bnddury,cfconv,cfdur

(2)bndconvy函数

目的给定收益的债券凸性

格式[YearConvexity,PerConvexity]=bndconvy(Yield,CouponRate,Settle,Maturity,Period,Basis,

                  EndMonthRule,IssueDate,FirstCouponDate,LastCouponDate,StarDate,Face)

参数Yield :  半年为基础得到期收益

       CouponRate:  分红利率

        Settle:  结算日期.时间向量或字符串.必须小于等于到期日

        Maturity:  到期日,日期向量.

        Period:  选择项.年分红次数缺省值2,可为0,1,2,3,4,6,12.

        Basis:  选择项.债券的天数计算法.缺省值为0=实际值/实际值.1=30/360,2=实际值/360,3=实际值/365

        EndMonthRule:  可选项.月未规则.应用在到期日实在小于等于30天的月份.0代表债券的红利发放日总是固定的一天,缺省1代表是在实际的每个月未

          IssueDate: 可选项.发行日期

          FirstCouponDate:  可选项.第一次分红日.当FirstCouponDate和lastCouponDate同时出现时,FirstCouponDate优先决定红利发放结构

          LastCouponDate可选项.到期日的最后一次红利发放日.当FirstCouponDate没标明时,LastCouponDate决定红利发放结构.红利发放结构无论LastCouponDate是何时,都以其为准,并且紧接着债权到期日.

          StarDate可选项.债权实际起始日(现金流起始日).当预计未来的工具时,用他标明是个未来的日期,如果没有特别说明StarDate,起始日是settlement date.

          Face面值.缺省值是100.

     所有说明的参数必须是1*NUMBONDS或是NUMBONDS*1的向量.当时可选项是,用[〔〕]代替.在向量用NaN填写没说明的输入项.

说明:当给定每一个债券的收益时,计算NUMBONDS的凸性,无论红利结构中的最先或最后的红利期长或短(即红利结构是否和到期日一致).这个函数也决定零收益债券的凸性.

  YearConvexity按照年PerConvexity按照半年计算,符合SIA的协议.所有的输出是NUMBONDS*1的向量.

例18


  1. Yield=[0.04;0.055;0.06]
  2.            CouponRate=0.055
  3.            Settle=‘02-Aug-1999’
  4.            Maturity=‘15-Jun-2004’
  5.            Period=2
  6.            Basis=0
  7.          [YearConvexity,PerConvexity]=bndconvy   (Yield,CouponRate,Settle,Maturity,Period,Basis)
  8.             YearConvexity=21.4825    21.0358    20.8885
  9.             PerConvexity=85.9298     84.1434    83.5541
复制代码

参阅:bndconvp,bndconvy,bnddury,cfconv,cfdur

(3)bnddurp函数

目的给定价格的债券平均期限,价格一定的债券久期

格式[ModDuration,YearDuration,PerDuration]=bnddurp(Price,CouponRate,Settle,Maturity,Period,Basis,

               EndMonthRule,IssueDate,FirstCouponDate,LastCouponDate,StarDate,Face)

参数 Price:  净值

         CouponRate:  分红利率

         Settle:  结算日期.时间向量或字符串.必须小于等于到期日

         Maturity:  到期日,日期向量.

         Period : 选择项.年分红次数缺省值2,可为0,1,2,3,4,6,12.

         Basis:  选择项.债券的天数计算法.缺省值为0=实际值/实际值.1=30/360,2=实际值/360,3=实际值/365

         EndMonthRule:  可选项.月未规则.应用在到期日实在小于等于30天的月份.0代表债券的红利发放日总是固定的一天,缺省1代表是在实际的每个月未

         IssueDate:  可选项.

    FirstCouponDate: 发行日期,可选项.第一次分红日.当FirstCouponDate和LastCouponDate同时出现时,FirstCouponDate优先决定红利发放结构

         LastCouponDate可选项.到期日的最后一次红利发放日.当FirstCouponDate没标明时,LastCouponDate决定红利发放结构.红利发放结构无论LastCouponDate是何时,都以其为准,并且紧接着债权到期日.

         StarDate:可选项.债权实际起始日(现金流起始日).当预计未来的工具时,用他标明是个未来的日期,如果没有特别说明StarDate,起始日是settlement date.

        Face面值.缺省值是100.

    所有说明的参数必须是1*NUMBONDS或是NUMBONDS*1的向量.当时可选项是,用(〔〕)代替.在向量用NaN填写没说明的输入项.

说明 当给定每一个债券的价格时,计算NUMBONDS的平均期限,无论红利结构中的最先或最后的红利期长或短(即红利结构是否和到期日一致).这个函数也决定零收益债券的凸性.

  YearConvexity按照年PerConvexity按照半年计算,符合SIA的协议.所有的输出是NUMBONDS*1的向量.

例19


  1. Price=[106;100;98]
  2.            CouponRate=[0.055]
  3.            Settle=‘02-Aug-1999’
  4.            Maturity=‘15-Jun-2004’
  5.            Period=2
  6.            Basis=0
  7.           [ModDuration,YearDuration,PerDuration]=bnddurp (Price,CouponRate,Settle,Maturity,Period,Basis)
  8.             ModDuration=4.2400        4.1925           4.1759
  9.             YearDuration=4.3275         4.3077           4.3077
  10.              PerDuration=8.6549           8.6154          8.6014
复制代码

参阅:bndconvp,bndconvy,bnddury

(4)bnddury函数

目的:给定收益的债券的平均期限,固定收益债券的久期

格式[ModDuration,YearDuration,PerDuration]=bnddury(Yield,CouponRate,Settle,Maturity,Period,Basis,

               EndMonthRule,IssueDate,FirstCouponDate,LastCouponDate,StarDate,Face)

参数Yield :  半年为基础得到期收益

        CouponRate: 分红利率

        Settle:  结算日期.时间向量或字符串.必须小于等于到期日

        Maturity:  到期日,日期向量.

        Period : 选择项.年分红次数缺省值2,可为0,1,2,3,4,6,12.

        Basis:  选择项.债券的天数计算法.缺省值为0=实际值/实际值.1=30/360,2=实际值/360,3=实际值/365

        EndMonthRule:  可选项.月未规则.应用在到期日实在小于等于30天的月份.0代表债券的红利发放日总是固定的一天,缺省1代表是在实际的每个月未

        IssueDate:可选项.发行日期

        FirstCouponDate:可选项.第一次分红日.当FirstCouponDate和LastCouponDate同时出现时,FirstCouponDate优先决定红利发放结构

        LastCouponDate可选项.到期日的最后一次红利发放日.当FirstCouponDate没标明时,LastCouponDate决定红利发放结构.红利发放结构无论LastCouponDate是何时,都以其为准,并且紧接着债权到期日.

        StarDate可选项.债权实际起始日(现金流起始日).当预计未来的工具时,用他标明是个未来的日期,如果没有特别说明StarDate,起始日是settlement date.

        Face面值.缺省值是100.

     所有说明的参数必须是1*NUMBONDS或是NUMBONDS*1的向量.当时可选项是,用(〔〕)代替.在向量用NaN填写没说明的输入项.

描述 当给定每一个债券的收益时,计算NUMBONDS的平均期限,无论红利结构中的最先或最后的红利期长或短(即红利结构是否和到期日一致).这个函数也决定零收益债券的凸性.

  YearConvexity按照年PerConvexity按照半年计算,符合SIA的协议.所有的输出是NUMBONDS*1的向量.

例20


  1. Yield=[0.04;0.055;0.06]
  2.           CouponRate=0.055
  3.           Settle=’02-Aug-1999’
  4.           Maturity=’15-Jun-2004’
  5.           Period=2
  6.           Basis=0
  7.            [ModDuration,YearDuration,PerDuration]=bnddury(Yield,CouponRate,Settle,Maturity,Period,Basis)
  8.           ModDuration=4.2444         4.1924             4.1751
  9.          YearDuration=4.3292           4.3077             4.3004
  10.          PerDuration=8.6585             8.6154              8.6007
复制代码





二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:matlab代码 MATLAB 固定收益证券 matla atlab 收益率

已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
xddlovejiao1314 + 100 + 100 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 100  论坛币 + 100  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

本帖被以下文库推荐

沙发
xddlovejiao1314 学生认证  发表于 2015-8-2 20:24:32
好贴,谢谢分享。

藤椅
汪玉薇 发表于 2015-8-2 23:55:40 来自手机
niuniuyiwan 发表于 2015-8-2 19:58
固定收益证券计算转自http://wenku.baidu.com/view/bc8a45c1bb4cf7ec4afed0ba.html 1  固定收益债券定价(1 ...
路过

板凳
yuyike 发表于 2015-8-3 07:32:28 来自手机
不错不错

报纸
CherrySC 学生认证  发表于 2016-10-25 16:39:48
我在使用债券计算工具时老是出现“CouponRate is required for all Bond instruments.”这样的报错,不懂是什么问题,其他参数设置都没有问题,希望有高手可以解答~
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
niuniuyiwan + 5 + 5 + 5 精彩帖子

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

地板
夕哲 发表于 2017-3-20 14:54:31
学习了,想问下 “所有说明的参数必须是1*NUMBONDS或是NUMBONDS*1的向量.当时可选项是,用(〔〕)代替.在向量用NaN填写没说明的输入项”这句话的NUMBONDS*1怎么理解

7
xqqqqq去去去 发表于 2020-10-28 12:54:16
太棒了 感谢

8
guoyajing9 发表于 2021-11-11 23:36:32
十分感谢!

9
guoyajing9 发表于 2021-11-11 23:37:24
十分感谢,必须学习。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-1 18:52