文章导航

  • 相关资料
  • 固定收益债券的基本特征和种类
  • 固定收益债券定价
    • 案例
      • 解析
      • 代码
  • 零息债券定价
    • 案例
      • 解析
      • 代码
  • 债券的到期收益率
    • 案例
      • 解析
      • 代码
  • 债券的赎回收益率
    • 案例
      • 解析
      • 代码

相关资料

资料下载

固定收益债券的基本特征和种类

按照利率可以将债券分为以下几类

  • 零息债券:在债券存续期内不支付利息的债券,该债券以低于面值的价格发行,到期日按照面值偿还本金.
  • 固定利率债券:票面利率固定的债券
  • 浮动利率债券:票面利率不固定,随着锚定参考利率而浮动的债券
  • 累息债券:当期不支付利息,而将应付利息推迟到到期日和本金一起支付的债券
  • 递增债券:在规定时期内单次或者多次增加票面利率,前者为单次递增债券,后者为多次递增债券
  • 推迟利息债券:推迟最初利息支付至规定期限,然后按照一般债券的利息支付方式进行支付债券

固定收益债券定价

固定收益债券价格是由未来预期现金流决定的,因此使用多期复利现值对其进行定价
P=∑t=1TCt(1+r)tP=\sum_{t=1}^T\frac{C_t}{(1+r)^t} P=t=1∑T​(1+r)tCt​​

案例

面值100100100元,票面利率为10%10\%10%,市场年利率为9%9\%9%,期限333年,每年支付一次利息的债券,计算价格

解析

根据利息和本金的折现计算
P=101+9%+10(1+9%)2+110(1+9%)2P=\frac{10}{1+9\%}+\frac{10}{(1+9\%)^2}+\frac{110}{(1+9\%)^2} P=1+9%10​+(1+9%)210​+(1+9%)2110​

代码

#include <iostream>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;double bond_price(const vector<double> &cflows, const double &capital, const double &r){double ans=0.00;for(int i=0; i<cflows.size(); ++i){double v=cflows[i];if(i==cflows.size()-1) v+=capital;ans+=v/pow(1+r, i+1);}return ans;
}int main(){vector<double> cflows; // 利息流double r=0.09; // 贴现率double capital = 100; // 本金double interest=0.1; // 息票利率for(int i=1; i<=3; ++i) cflows.push_back(interest*capital);cout<<bond_price(cflows, capital, r)<<endl;return 0;
}

零息债券定价

零息债券在存续期内不支付利息,定价公式为
P=M(1+r)TP=\frac{M}{(1+r)^T} P=(1+r)TM​

案例

期限为8年,面值为100010001000,市场利率为8%8\%8%,每半年付息一次的零息债券的价格

解析

使用零息债券计算公式得到
P=1000(1+4%)16P=\frac{1000}{(1+4\%)^{16}} P=(1+4%)161000​

代码

#include <iostream>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;double z_bond_price(const double &capital, const double &r, const int tm, const int years){return capital/pow(1+r/tm, years*tm);
}int main(){double r=0.08;double capital = 1000;int tm=2;int years=8;cout<<z_bond_price(capital, r, tm, years)<<endl;return 0;
}

债券的到期收益率

债券的到期收益率(YTM)是指使得债券未来现金流现值等于债券市场价格的贴现率,YTM不仅考虑当前的利息收入,还考虑了投资者通过利息收入,而且还考虑了投资者通过持有债券到期实现的资本利得或者损失.
YTM的计算公式如下
P=∑t=1TCt(1+y)tP=\sum_{t=1}^T\frac{C_t}{(1+y)^t} P=t=1∑T​(1+y)tCt​​
从方程可以看出yyy的解析式无法得到,因此需要进行试错求解,可以使用二分法将计算复杂度优化到O(mlog⁡n)\mathcal{O}(m\log n)O(mlogn).

案例

5年期债券的面值是100100100元,年票面利率是5%5\%5%,每半年付息一次,现在债券的价格是110110110元,求债券的YTM.

解析

根据YTM的定义列出方程
P=110=2.51+y+2.5(1+y)2+⋯+102.5(1+y)10P=110=\frac{2.5}{1+y}+\frac{2.5}{(1+y)^2}+\dots+\frac{102.5}{(1+y)^{10}} P=110=1+y2.5​+(1+y)22.5​+⋯+(1+y)10102.5​

代码

#include <iostream>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;
const double EPS=1e-6; // 定义误差精度double ytm(const vector<double> &cf, const double y){double ans=0.00;for(int i=0; i<cf.size(); ++i){ans+=cf[i]/pow(1+y, i+1);}return ans;
}int main(){double capital = 100.00; // 面值double p=110.00; // 债券价格int tm=2; // 每年付息频率int years=5; // 年限double crate=0.05; // 息票利率vector<double> cflows;for(int i=1; i<=tm*years; ++i){if(i<tm*years) cflows.push_back(capital*crate/tm);else cflows.push_back(capital*crate/tm+capital);}double l=0.00;double r=1.00;while(ytm(cflows, r)>p) r*=2; // 扩张上界while(l+EPS<r){double mid=(l+r)/2.0;if(ytm(cflows, mid)>p) l=mid;else r=mid;}cout<<"YTM: "<<2*l<<endl; // 从半年期YTM换算到年YTMreturn 0;
}

债券的赎回收益率

如果债券附有发行者在到期日之前的赎回条款,这种权利被称为赎回权(call option),拥有赎回权的债券被称为可赎回债券(callable bond),发行者支付的价格被称为赎回价格(call price).
当使赎回日现金流的现值和债券全价相等时的收益率就是赎回收益率,即满足方程
P=∑t=1nC(1+y)t+CP(1+y)nP=\sum_{t=1}^n\frac{C}{(1+y)^t}+\frac{CP}{(1+y)^n} P=t=1∑n​(1+y)tC​+(1+y)nCP​

案例

考虑一种面值为100010001000,有效期181818年,市场价格为700700700,年票面利率是6%6\%6%,每半年付息一次的可赎回债券,假设这个债券最早可以在555年后以103010301030的价格赎回,计算赎回收益率.

解析

每半年利息为C=1000∗6%∗0.5=30C=1000*6\%*0.5=30C=1000∗6%∗0.5=30
赎回价格CP=1030CP=1030CP=1030
设赎回收益率为yyy,因此满足下列方程
P=700=30(1+y)+30(1+y)2+⋯+30(1+y)10+1030(1+y)10P=700=\frac{30}{(1+y)}+\frac{30}{(1+y)^2}+\dots+\frac{30}{(1+y)^{10}}+\frac{1030}{(1+y)^{10}} P=700=(1+y)30​+(1+y)230​+⋯+(1+y)1030​+(1+y)101030​

代码

#include <iostream>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;
const double EPS=1e-6; // 定义误差精度double ytm(const vector<double> &cf, const double y){double ans=0.00;for(int i=0; i<cf.size(); ++i){ans+=cf[i]/pow(1+y, i+1);}return ans;
}int main(){double capital = 1000.00; // 面值double call_price=1030; // 赎回价格double p=700.00; // 债券价格int tm=2; // 每年付息频率int years=5; // 年限double crate=0.06; // 息票利率vector<double> cflows;for(int i=1; i<=tm*years; ++i){if(i<tm*years) cflows.push_back(capital*crate/tm);else cflows.push_back(capital*crate/tm+call_price);}double l=0.00;double r=1.00;while(ytm(cflows, r)>p) r*=2;while(l+EPS<r){double mid=(l+r)/2.0;if(ytm(cflows, mid)>p) l=mid;else r=mid;}cout<<"YTM: "<<2*l<<endl;return 0;
}

【FinE】固定收益债券定价相关推荐

  1. 计算久期matlab,[MATLAB代码模板]固定收益证券计算

    固定收益证券计算 1固定收益债券定价 (1)bndprice函数 目的: 给固定收益债券定价 格式: [Price,AccruedInt]=bndprice(Yield,CouponRate,Sett ...

  2. 美国证券业托管和清算机构的发展与现状

    美国证券业托管和清算机构的发展与现状 来源:本站原创 作者:文/中国人民银行济南分行 李剑 点击次数:次 时间:2008-9-10   美国证券存托与清算公司(DTCC)是全世界最大.最先进的证券存托 ...

  3. 李奇霖:通道业务山穷水尽 券商资管何去何从?

    转自http://stock.qq.com/a/20170711/006492.htm 腾讯"证券研究院" 李奇霖 联讯证券董事总经理.首席宏观研究员 券商资管是什么?从字面简单看 ...

  4. english - word - 20110129

    inbound [5inbaund] adj. 内地的, 归航的 n. 入站 inbound in.bound 1 AHD:[¹n"bound"] D.J.[6in7baund] ...

  5. 我们更需要指数型的AB产品(长盛同庆、基金瑞福)

    评: 我们更需要指数型的AB产品(长盛同庆.基金瑞福) http://stock888.cnfol.com/1484/090417/5754172,00.php 美国的封闭式基金一般靠发现优先股进行杠 ...

  6. 《SAP CRM管理与实施指南》一一2.2 SAP CRM基础功能

    本节书摘来自华章计算机<SAP CRM管理与实施指南>一书中的第2章,第2.2节,作者:邹荫文 著,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.2 SA ...

  7. po 价格条件表_海纳易拓图文讲解SAP MM模块采购价格条件

    MM物料管理是SAP R/3系统的一个模块,支持日常发生的业务处理功能和过程.MM系统(物料管理)的目的是满足下列各种处理,即物料需求计划.物料采购.库存管理.发票确认和物料估价.主要包括:物料需求计 ...

  8. 交互设计、信息图、信息可视化、数据可视化技术资源汇总——设计师的领域,设计师说了算

    本文整理了设计师常逛的网站,这些资料信息网站包括交互设计.信息图.信息可视化,在线制图.数据可视化,本文大致的内容包括: <灵感--可以参看如下网站来寻找灵感网站汇总>. <信息图工 ...

  9. 无座火车票为什么不能半价?

    image 来源 / 运营研究社(ID:U_quan) 无座火车票为什么要收取硬座票的价钱? 无座火车票为什么不能半价? ······ 类似的问题一直在我们的视野中不断出现,但也一直悬而未决,每到年底 ...

最新文章

  1. 谈谈 Android 中的 PathClassLoader 和 DexClassLoader
  2. 光纤交换机是什么,光纤交换机的作用是什么?
  3. js中,实现对键盘按键的监听:
  4. 汇顶软件开发初面总结20180921
  5. 清除Docker的占用空间问题
  6. 控制台下修改系统驱动状态的代码
  7. (转)深入理解Linux修改hostname
  8. HTTP Connection详解
  9. 一般来讲,大公司都有自己的决策团队
  10. 2017乌鲁木齐ICPC: I. A Possible Tree(带权并查集)
  11. WMI 脚本入门:第二部分 (MSDN)
  12. 兜兜转转,回到原点,Hello Mr.my yesterday
  13. 3D游戏角色建模设计这样做,模型满分!
  14. buck型三相PFC
  15. 高通平台wifi命令操作
  16. (PTA)7-2 比较大小 (10分)
  17. SNKr:创造新的潮圈文化 将区块链与时尚潮流结合
  18. 怎样在word中画横线
  19. 【数据分析】电商平台入驻商用户画像分析
  20. 报错:java.lang.ClassNotFoundException: Cannot find implementation for解决方法

热门文章

  1. Kali Linux 建立无线热点 · RTL8188CUS
  2. color颜色对应的数字
  3. hdu 5230 ZCC loves hacking
  4. 并发工具之CountDownLatch与CyclicBarrier
  5. 【C语言指针】一些易混淆的定义
  6. agileTC测试用例管理平台搭建
  7. java计算机毕业设计汽车租赁系统演示录像源代码+数据库+系统+lw文档
  8. python管理系统项目首选公司_Python 项目推介:企业知识资产管理 - 易度文档管理系统 edodocs.com...
  9. 腹黑指数php,测试你的腹黑指数有多高?
  10. 易度文档管理系统-源文件存储功能