import numpy as np
Facevalue=1000
# 债券付息(面值*利率),假设每年付息一次
Payment=0.05*Facevalue
# 市场利率
Rate=0.06
# 到期还本,ExtraPayment额外现金流为本金
ExtraPayment=Facevalue
# 债券期现为10年
NumPeriods=10
# 每年年末付息
Due=0
PresentVal=abs(np.pv(Rate,NumPeriods,Payment,ExtraPayment,Due))
print(PresentVal) #该债券价格低于926.4,则被低估,高于926.4,则被高估
结果为:926.3991294858529
2.# 固定现金流终值计算函数
FutureVal=fv(Rate,NumPeriods,Payment,PresentVal,Due)
Rate:贴现率
NumPeriods:贴现周期
Payment周期现金流
Due:现金流计息方式(0为周期末付息,1为周期初付息)
PresentVal:现金流现值 # FutureVal:现金流终值
代码如下:
import numpy as np
Facevalue=1000
# 债券付息(面值*利率),假设每年付息一次
Payment=0.05*Facevalue
# 市场利率
Rate=0.06
# 到期还本,ExtraPayment额外现金流为本金
ExtraPayment=Facevalue
# 债券期现为10年
NumPeriods=10
# 每年年末付息
Due=0
FutureVal=abs(np.fv(Rate,NumPeriods,Payment,PresentVal,Due))
print(FutureVal)
结果如下:2318.079494238091
净现值法(NPV)将现金流用必要收益率贴现计算NPV值,若NPV>0,则可行,否则不可行
内部收益率法假设NPV=0,计算必要贴现率,若IRR大于必要收益率则可行,反之不可行
净现值NPV计算函数 PresentVal=npv(Rate,CashFlow)
Rate:必要收益率
CashFlow:现金流序列向量
PresentVal:现金流现值
代码如下:
import numpy as np
# 现金流
CashFlow=[-8000,2500.1500,3000,1000,2000]
# 利率
Rate=0.08
PresentVal1=-8000+2500/1.08+1500/1.08**2+3000/1.08**3+1000/1.08**4+2000/1.08**5
PresentVal1=np.npv(Rate,CashFlow)
print(PresentVal1)
结果如下:-849.137888777871
4.# 内部收益率计算函数
Return=irr(CashFlow)
Return :内部收益率
代码如下:
import numpy as np
CashFlow=[-8000,2500,1500,3000,1000,2000]
Return=np.round(np.irr(CashFlow),4) #round() 方法返回浮点数x的四舍五入值。如round(80.23456, 2) : 80.23
print(Return)
结果如下:0.0839
5.# 年现金流计算
若投资100万买房,还款期20年,每月还6000元,则贷款利率为多少?若改为每月还8000,贷款利率不变,则还款期限为多长?
年金利率函数rate Rate=rate(NumPeriods,Payment,PresentValue,FutureValue,Due) NumPeriods:现金流周期
Payment:现金流支出
FutureValue:现金流终值,函数默认为0
Due:现金流计息方式(0为周期末付息,1为周期初付息) PresentVal:现金流现值
Rate:利息率(贴现率)
代码如下:
import numpy as np
# 贷款现值
PresentValue=1000000.0
# 每次还款金额
Payment=-6000.0
# 还款次数
NumPeriods=20*12
# 现金流终值为0
FutureValue=0
# 每周期还款一次,0为周期末付息
Due=0
# 调用rate函数
Rate=np.around(np.rate(NumPeriods,Payment,PresentValue,FutureValue),4)
print(Rate)
结果为:0.0032
继续求解,
年金周期函数nper NumPeriods=nper(Rate,Payment,PresentValue,fv,Due)
Rate:贴现率
Payment:现金流收入(支出)
PresentValue:现金流现值
fv:现金流终值,默认值为0
Due:现金流计息方式
NumPeriods:现金流周期
import numpy as np
# 贷款现值
PresentValue=1000000.0
# 每次还款金额
Payment=-8000.0
# 现金流终值为0
FutureValue=0
# 每周期还款一次,0为周期末付息
Due=0
# 月利率,银行的现行计息方式
Rate=0.0389/12
# 调用nper计算还款周期
NumPeriods=np.nper(Rate,Payment,PresentValue,fv=0,when='end')
print(NumPeriods/12)
结果如下:13.377524805437297
本期分享就到这里,边学习边分享。