债券专题一:基础指标计算

本文详细介绍了债券价格的计算公式,包括麦考利久期和价格凸性,并提供了Python代码示例,用于计算10年期、面值100元、票息6%的债券在6.5%市场收益率下的价格、久期和凸性。
摘要由CSDN通过智能技术生成

目录

1. 基础公式

1.1 价格

1.2 久期

1.3 凸性

2. 代码复现

3. 实际案例


本文主要介绍债券的价格,久期以及凸性的计算公式。

1. 基础公式

1.1 价格

附息债券的估值:

其中: 

P0:  在时刻0时的债券价格

CFt : 在t时刻收到的现金(息票利息)

CFn : 在偿还日n时刻收到的现金(息票利息和本金)

Rt : 从0到ti时段的即期利率

N : 现金流的次数

1.2 久期

麦考利久期:

其中:

Dmod: 修正久期

DP: 价格久期

P:  当前支付的债券价格(包括应付利息)

D: 麦考利久期

Y: 债券的到期收益率

n: 现金流的次数

1.3 凸性

凸性:(部分公式中含有二分一这个系数,此处选择用不含二分之一的公式)

其中:

CP: 价格凸性

P : 当前支付的债券价格(包括应付利息)

Y: 债券的到期收益率

CFt: 在t时刻收到的现金(息票利息)

n: 现金流的次数

2. 代码复现

考虑到常用性,代码中假设债券的面值为100,付息频率为一年一次。

import pandas as pd


class BOND_BASIC(object):
    # 计算基础指标:价格、久期、凸性
    def __init__(self, coupon, T, yields):
        self.coupon = coupon  # 票息
        self.T = T  # 期限
        self.yields = yields  # 收益率

    def P(self):
        # 计算债券价格,保留两位小数
        value_list = []
        for x in range(1, self.T + 1):
            print('sss', x)
            if x == self.T:
                value = 100 * (1 + self.coupon) / (1 + self.yields) ** x
            else:
                value = 100 * self.coupon / (1 + self.yields) ** x
            value_list.append(value)
        return round(sum(value_list), 2)

    def D(self):
        # 计算债券久期,保留两位小数
        value_list = []
        p = BOND_BASIC.P(self)
        for x in range(1, self.T + 1):
            if x == self.T:
                value = x * 100 * (1 + self.coupon) / (1 + self.yields) ** x
            else:
                value = x * 100 * self.coupon / (1 + self.yields) ** x
            value_list.append(value)
        return round(sum(value_list) / p, 2)

    def C(self):
        # 计算债券凸性,保留两位小数
        value_list = []
        p = BOND_BASIC.P(self)
        dis = (1 + self.yields) ** 2
        for x in range(1, self.T + 1):
            if x == self.T:
                value = x * (x + 1) * 100 * (1 + self.coupon) / (1 + self.yields) ** x
            else:
                value = x * (x + 1) * 100 * self.coupon / (1 + self.yields) ** x
            value_list.append(value)
        return round(sum(value_list) / p / dis, 2)

3. 实际案例

问题:某10年期,面值为100,票息率6%(每年付息一次),当前的市场收益率为6.5%,求该债券的价格,久期和凸性?

求解的代码为:(代码续接第二小节)

if __name__ == '__main__':
    coupon, T, yields = 0.06, 10, 0.065
    model = BOND_BASIC(coupon, T, yields)
    p, d, c = model.P(), model.D(), model.C()
    out_df = pd.DataFrame({'票息': [format(coupon, '.2%')], '期限': [T],
                           '到期收益率': [format(yields, '.2%')], '价格': [p],
                           '久期': [d], '凸性': [c]})

最终得到的结果为:

本期分享到此结束,有何问题欢迎沟通。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值