Excel 财务函数

奇数期债券函数计算器

ODDFPRICE/ODDFYIELD/ODDLPRICE/ODDLYIELD:首期或末期长度不规则的债券价格与收益率。

  • 免费免注册
  • 结果可分享链接
  • 浏览器本地计算

首期不规则 · 由收益率求价格

日期约束和 Excel 一致:发行日 < 结算日 < 首次付息日 < 到期日。结算日一旦越过首次付息日,这张债券就进入规则期了,该用 PRICE/YIELD 而不是 ODDF。
98.153875
净价(每 100 面值)
3.5000
年化收益率(%)
长首期
奇数期类型
1.6000
每标准期票息
按 3.5000% 的收益率折现,这张首期不规则的债券每 100 面值净价 98.153875 元。 当前判定为长首期, 奇数期票息与标准期票息不等,正是这四个函数存在的理由。

计算过程的关键中间量

项目数值说明
奇数首期跨越的准周期数 NC2大于 1 就是长首期,首期比一个标准付息周期还长
首期票息折算系数 ΣDC/NL1.22527473首期票息相当于几个标准票息,短首期小于 1
首期实际票息(每 100 面值)1.960440标准期票息 1.600000
发行日到首次付息日天数 DFC225按基准 1 口径数出来的天数
结算日到本准周期末天数 DSC170折现指数的分子
准周期标准长度 E184.00Excel COUPDAYS 口径,30/360 系恒为 360/频率
首笔现金流折现指数0.92391304= 跨过的整准周期数 + DSC/E
已计息比例 ΣA/NL0.30136168发行日到结算日已经跑了多少个准周期
应计利息(每 100 面值)0.482179净价里已经扣掉了这一块
首期之后的规则票息笔数 N13含到期日那一笔
全价(净价 + 应计)98.636054实际交割掏出去的钱

收益率再挪一挪,净价变多少

年化收益率净价(每 100 面值)
2.0000%107.758831
2.5000%104.442632
3.0000%101.242444
3.5000%98.153875
4.0000%95.172711
4.5000%92.294906
5.0000%89.516578

本工具按微软对 ODDFPRICE / ODDFYIELD / ODDLPRICE / ODDLYIELD 的公开定义实现,面值固定按 100 计, 赎回价与净价都是每 100 面值口径。ODDL 家族的折现按定义走单利而非复利,这是原始定义如此,不是简化。 模型不含节假日顺延、实际交割日调整、税费与违约风险;国内银行间与交易所市场的计息与结算惯例 与 Excel 的 basis 参数并不总能一一对应,对账请以托管机构和交易场所公布的口径为准。

链接带当前参数,发给别人打开就是同一份结果。

怎么用

5 步
  1. 先分清是首期怪还是末期怪:发行日到第一次付息之间的那段比标准付息周期长或短,用 ODDF 家族;最后一次规则付息到兑付之间那段不规则,用 ODDL 家族。判断错了参数栏都对不上,因为两个家族要的日期根本不是同一组。
  2. 按日期约束填四个日期:ODDF 家族必须满足发行日 < 结算日 < 首次付息日 < 到期日;ODDL 家族必须满足末次付息日 < 结算日 < 到期日。这和 Excel 的约束一模一样,填反了 Excel 返回 #NUM!,本工具会给一句中文提示。
  3. 填票面利率、赎回价与付息频率:票面利率填发行时定好的年利率,不是市场收益率。赎回价按每 100 面值填,正常到期兑付面值就填 100,提前赎回条款有溢价才改。付息频率决定准周期有多长,直接影响奇数期折算成几个标准票息。
  4. 把日计数基准和合同对齐:五个基准值算出来不是同一个数。合同或募集说明书写的是 30/360 就选 0 或 4,写实际天数就选 1 到 3。这一栏是整个计算里最容易被忽略、又最容易造成对账差额的地方。
  5. 看中间量表,不要只看那一个数:结果下面列出了准周期数、首期票息折算系数、应计天数、折现指数。判断有没有填错,看这几个中间量比看最终价格快得多:比如准周期数是 2 就说明这是长首期,如果你以为它是短首期,那就是日期填错了。
深入讲解

奇数期是怎么冒出来的

债券的付息日通常是固定的日历日,比如每年 3 月 1 日和 9 月 1 日各付一次。 可发行日是市场决定的,谁也没法保证正好落在付息日上。 一张 1 月 20 日发行、9 月 1 日第一次付息的半年付债券,第一段计息期只有七个多月, 比标准的六个月多一点;如果它 6 月发行,第一段就只有两个多月,比标准少一大截。 这多出来或少掉的那一截,就是奇数期。

普通的 PRICE 和 YIELD 假设每一期都一样长,遇到奇数期直接失效。 Excel 为此单独准备了四个函数:首期不规则用 ODDFPRICE 和 ODDFYIELD, 末期不规则用 ODDLPRICE 和 ODDLYIELD,每一对里前者由收益率求价格、后者由价格反解收益率。 末期不规则要少见得多,通常出现在提前赎回、条款重组或者到期日被单独约定过的品种上。

参数含义对照

结算日不是今天。 它是这笔交易实际交割、钱货两清的那一天,通常比成交日晚一到两个工作日。 Excel 只认你填进去的日期,不会帮你顺延节假日,所以填之前要先确认交割日到底是哪天。

首次付息日与末次付息日是两套语义。 ODDF 家族要发行日加首次付息日,用来框定那个不规则的开头; ODDL 家族要末次付息日,用来框定那个不规则的结尾。 这也是本工具把两组日期分开存的原因,切换标签不会把另一边的日期改成非法值。

赎回价按每 100 面值填。 正常到期兑付面值就是 100,带提前赎回条款、按 102 或 103 赎回的才改这一栏, 而且这时候到期日应该填赎回日,算出来的是到赎回日的收益率,不是到期收益率。

日计数基准决定天怎么数。 基准 0 和 4 都按每月 30 天、每年 360 天,区别在月末 31 号的处理; 基准 1 用真实天数除以真实年长度;基准 2 分子数真实天数、分母却按 360 天;基准 3 分母按 365 天。 合同写的是哪一种就选哪一种,这一栏不该靠默认值蒙。

为什么 Excel 和券商系统对不上

这是所有 Excel 债券函数共同的问题,在奇数期上被放得更大。 按命中率排序,第一位是日计数基准。Excel 那五个基准值来自美国市场惯例, 国内银行间市场与交易所市场的计息规则跟它们不是一一对应的关系, 硬套一个「差不多」的基准,应计天数就会差出几天,价格随之偏离。

第二位是结算日惯例。真实交割日被 T+1 结算规则和法定假日推着走, Excel 完全不管这些,你填哪天它就算哪天。差一天在普通债券上问题不大, 在奇数期上却可能把结算日推到另一个准周期里去,折现指数直接跳一格。 第三位才是报价小数位、取整规则这些小差别。对账时按这个顺序查,比乱翻公式快。

还有一个隐蔽的差别:ODDLPRICE 用的是单利折现而不是复利。 末期只剩一笔现金流,货币市场惯例就是线性折现,公式里根本没有幂次。 有些系统在这一段用了复利,两边结果自然对不上,而且差额会随剩余期限拉长而变大。

怎么用它做判断

拿到一张新发行的债券报价,最实用的做法是先反解。 把发行日、首次付息日、结算日和对方开的价填进去,用 ODDFYIELD 解出年化收益率, 这个数才是可比的。同期限、同信用等级的其他品种给多少,一对就知道这笔买卖贵还是便宜。 光看「比面值低两块」没有任何信息量,因为奇数首期的存在会让票息本身就和标准期不一样多。

反过来,你心里如果先有一个门槛,比如这类债至少要给到某个收益率才值得占用资金, 那就切到 ODDFPRICE,把门槛填进收益率栏,工具直接告诉你对应的净价是多少。 这就是你的出价上限。一句主观的要求被翻译成一个可以直接报出去的价格, 这是这四个函数在实务里最省事的用法。

结果下面那张收益率梯子是同一件事的批量版:把当前收益率上下各挪一个半百分点重算了一遍。 看一眼净价摆动的幅度,就知道这张券对利率有多敏感,比背久期公式直观。

常见误区

把首期不规则和末期不规则搞混。 判断很简单:不规则的那一段在开头还是结尾。开头用 ODDF,结尾用 ODDL。 两个家族要的日期完全不同,选错了连参数栏都填不满,这时候别硬填,退回去重新判断。

结算日过了首次付息日还在用 ODDF。 第一期一旦付完就翻篇了,剩下全是标准周期,这张债券对买方而言就是普通债券, 该用 PRICE 和 YIELD。Excel 在这种情况下返回 #NUM!,不是它算不了,是它在提醒你选错了函数。

拿净价当成实际付出去的钱。 结果里的主数字是净价,真正划账的是全价,两者差一个应计利息。 奇数期的应计比例本身就是个不规则的分数,这个差额比普通债券更显眼,别忽略。

只盯着最终价格,不看中间量。 准周期数是 1 还是 2,直接告诉你这是短首期还是长首期; 首期票息折算系数小于 1 就是短、大于 1 就是长。这些中间量对不上你的预期, 说明日期填错了,比反复核对最终价格有效得多。

边界与假设

本工具按微软对这四个函数的公开定义实现,面值固定按 100 计, 赎回价与净价都是每 100 面值口径。模型假设票息按约定足额到账、发行人不违约、 收益率在剩余期限内恒定,不含节假日顺延、实际交割日调整、税费与交易成本, 也不处理含权条款的行权路径。ODDFYIELD 用数值方法逼近,小数点后若干位的残差是迭代精度,不是错误。 与托管机构、交易场所对账,请以对方公布的计息与结算口径为准。

风险提示:本工具仅为测算演示,不构成投资建议。债券投资存在利率风险与信用风险,理论价格不等于可成交价格,实际交易请以券商报价与合同约定为准。

常见问题

7 条
什么样的债券才需要用这四个函数?
发行日和付息日对不齐的债券。常见的情况是:债券在 1 月 20 日发行,但付息日固定在每年 3 月 1 日和 9 月 1 日,那么第一段计息期只有一个多月,比标准的半年短一大截,这就是短首期,要用 ODDFPRICE。反过来,如果发行后要等到次年 1 月才第一次付息,第一段跨了一年多,比一个标准周期还长,那就是长首期。末期不规则少见一些,多出现在提前赎回、重组或者到期日被单独约定过的品种上。付息日整整齐齐的普通债券不需要这四个函数,PRICE 和 YIELD 就够了。
为什么 Excel 算出来的价格和券商系统对不上?
八成是日计数基准不同。同一张券、同一个结算日,basis 填 0 是按每月 30 天每年 360 天数,填 1 是按真实天数除以真实年长度,填 2 是分子数真实天数、分母却按 360 天,三者算出的应计天数和折现比例都不一样。国内银行间市场与交易所市场的计息惯例本来就和 Excel 那五个基准不是一一对应的关系,Excel 的基准是从美国市场惯例里来的。其次是结算日惯例:Excel 只认你填进去的那个日期,不做节假日顺延,而真实交割日会被 T+1 结算规则和法定假日推着走。最后才是价格取整、报价小数位这类小差别。对账时按这个顺序查,命中率最高。
ODDLPRICE 为什么用单利折现,不用复利?
这不是简化,是这个函数的原始定义如此。末期不规则的债券在结算日之后只剩一笔现金流:到期那天一次性拿到赎回价加上末期票息。对一笔一年以内的单一现金流,货币市场的惯例是线性折现,也就是除以「1 + 收益率 ÷ 频率 × 剩余期比例」,而不是做指数运算。所以你会发现 ODDLPRICE 的公式里根本没有幂次。这也解释了另一件事:ODDLYIELD 有闭式解,不需要迭代,把公式反解一下就直接出结果;而 ODDFYIELD 因为价格方程带指数,只能用数值方法逼近。
准周期到底是什么,为什么要用它来切分奇数期?
准周期是「假装这张债券一直按标准频率付息」时应该存在的那些付息日。半年付的债券,从首次付息日往前推六个月、十二个月,就得到一串虚拟的日期。奇数首期不管有多长多短,都会落在这串虚拟日期切出来的格子里。有了格子,就可以把不规则的那段折算成「零点七五个标准期」这样的比例,票息按比例发,折现按比例算。这个办法的好处是永远自洽:短首期折算系数小于 1,长首期大于 1,正好一期时等于 1,和普通债券无缝衔接。
净价、全价、应计利息在这里是什么关系?
工具主结果给的是净价,也就是 Excel 这四个函数返回的那个数,中间量表里另外列了应计利息和全价。关系很简单:全价等于净价加应计利息。应计利息是从起息日(或末次付息日)到结算日之间已经产生、但还没到付息日发出来的那部分票息,买方要在净价之外把这笔钱补给卖方,因为下一次付息时这笔钱会全额落到买方账上。真正从账户里划出去的是全价,报价和比价用的是净价。这两个数在奇数期债券上差得比普通债券更明显,因为奇数期的应计比例本身就是个不规则的分数。
结算日已经过了首次付息日,还能用 ODDF 吗?
不能,Excel 会返回 #NUM!,本工具也会拦住并提示。道理很直白:结算日一旦越过首次付息日,那个不规则的第一期已经付完并翻篇了,剩下的全是标准付息周期,这张债券对买方来说就是一张普通债券。这时候应该用 PRICE 和 YIELD,把结算日之后的规则现金流折现就行。同理,ODDL 家族要求结算日必须已经越过末次付息日,如果还没到,说明你还处在规则期里,也轮不到 ODDL 上场。
赎回价填 100 以外的数是什么场景?
带提前赎回条款或者到期溢价兑付的品种。多数债券到期按面值兑付,赎回价就是 100。但有些条款约定发行人可在某个日期按 102 或 103 的价格赎回,这时候如果你要算的是「持有到赎回日」的收益率,到期日就填赎回日、赎回价就填 102 或 103。注意这时候算出来的是到赎回日的收益率,不是到期收益率,两者在含权债券上可能差很多,通常要把所有可能的赎回情形都算一遍,取最保守的那个。

本工具仅为测算演示,不构成投资建议。计算结果受输入假设影响,实际情况请以官方规定与金融机构公布为准。

回到计算器