2021-05-05

为分享一个计算久期与凸性的代码,为了对学习有更好的激情,我要学会用电脑来计算一些东西。欢迎大家留言。

我这里用的是python,也可以使用excel,后面再更新吧,最近要考试了。


F=int(input("请输入票面价格     F="))
R=float(input('请输入票面利率     R='))
n=int(input('请输入年付息次数   n='))
r=float(input('请输入到期收益率   r='))
T=int(input('请输入债券的期限   T='))

import math
t=T*n                   #计算一共有几期
C=F*R/n                 #计算每期利息
r0=r/n                  #表示每期的到期收益率
a=math.pow(1+r0,t)      #计算1+r/n的t次方,用a代替他
P=C*(1-1/a)/r0+F/a     #计算债券的现值

#下面是计算凸性的部分

x=1                     #期数
s=0                     
while x<=t:
    b=math.pow(1+r0,x)
    CP=C/b              #计算每期利息的现值
    Q=CP/P              #计算利息现值占债券现值的比例
    c=x*(x+1)
    M=Q*c
    s=s+M               #所有利息权重的加总
    x=x+1

q=F/a/P                 #计算面值贴现后占现值的比列
d=t*(t+1)
s0=q*d
S=s+s0
print(S)                #利息与面值的现值的权重
e=math.pow(1+r0,2)
L=S/e                      #得出凸性
print('这个债券的凸性为:L=',L)

#下面是计算久期的部分

i=1                     #期数
j=0                     
while i<=t:
    w=math.pow(1+r0,i)
    DP=C/w              #计算每期利息的现值
    U=DP/P              #计算利息现值占债券现值的比例
    N=U*i
    j=j+N              #所有利息权重的加总
    i=i+1
v=F/a/P
j1=v*t
J=j1+j
print('债券的久期为:J=',J)

 

上一篇:uboot启动流程


下一篇:计算机组成原理实验一报告——运算器