微信公众号:
1. 货币时间价值
实际上numpy和scipy很强大,包含了计算各种财务指标的函数,可以直接调用,终值(fv)、现值(pv)、净现值(npv)、每期支付金额(pmt)、内部收益率(irr)、修正内部收益率(mirr)、定期付款期数(nper)、利率(rate)等等。
其中,PV为现值,FV为终值;C为现金流,r贴现率,n期限。
2. 年金计算
在n个时期内,每个时期可以获得等额现金流PMT,利率为r,以下是考试笔算时的公式:
普通年金现值:
普通年金终值:
永续债券现值:
其中,c为未来每期可以获得的现金收入,g是c的固定增长率。
年金计算比较简单,相当于等比数列求和。
#自定义计算一系列现金流现值(如年金)的函数
def pv_f(c,r,n,when=1):
'''
c代表每期现金流,可以每期不一样,如c=[100,90,80,120]
r贴现率,也可以每期不一样,如相应的,r=[2%,3%,2%,4%]
n为期数
when=1表示期末计数,默认,即普通年金
when=0表示期初计数,即预付年金
'''
import numpy as np #导入numpy库
c=np.array(c)
r=np.array(r)
if when==1:
n=np.arange(1,n+1)
else:
n=np.arange(0,n)
pv=c/(1+r)**n
return pv.sum()
应用实例1: 有个五年的普通年金年金,每年可获得20000元,假设贴现率为5%,现值是多少?
扩展:如果是预付年金呢?
c=20000
r=0.05
n=5
#调用前文定义的函数pv_f(c,r,n,when=1)
pv1=pv_f(c,r,n,when=1)
print("普通年金现值(年末):%.2f"% pv1)
#如果是预付年金,则when=0
pv2=pv_f(c,r,n,when=0)
print("预付年金现值(年初):%.2f" % pv2)
普通年金现值(年末):86589.53
预付年金现值(年初):90919.01
#使用上2.年金计算公式验证下我们自定义函数是否正确
pv1=20000/0.05*(1-1/(1+0.05)**5)
print("使用计算公式计算(年末):{:.2f}" .format(pv1))
pv2=20000/0.05*(1-1/(1+0.05)**5)*(1+0.05)
print("使用计算公式计算(年初):{:.2f}" .format(pv2))
#使用numpy自带函数验证
import numpy as np
print("numpy自带公式计算(年末):{:.2f}".format(np.pv(r,5,-c),when=0))
pri