使用python计算内含报酬率

什么是内含报酬率
内含报酬率是指能够使未来现金流入现值等于未来现金流出现值的贴现率,或者说是使投资方案净现值为零的贴现率。
内含报酬率法是根据方案本身内含报酬率来评价方案优劣的一种方法。内含报酬率大于资金成本率则方案可行,且内含报酬率越高方案越优。内含报酬率可以用来评价金融资产的收益率。
python计算内含报酬率
分两种情景,第一种是现金流频率为年频的情况。这是个理想的情况,实际上很少存在,除了年频付息债券,因为很少有金融资产每期现金流之间刚好相差一年。
先上代码:

import numpy_financial as npf


def cal_irr(bond_valuation, par_value, par_rate, n):
    """
    irr(年频付息)
    """
    cf = par_value * par_rate
    cf_list = [-bond_valuation] + [cf] * n
    cf_list[-1] = cf_list[-1] + par_value
    irr = npf.irr(cf_list)
    return irr
    
if __name__ == '__main__':
   bond_valuation = 101  # 现值
   par_value = 100  # 终值
   par_rate = 0.06  # 票息(年频)
   n = 10  # 剩余偿还期
   irr = cal_irr(bond_valuation, par_value, par_rate, n)
   print(irr)
思路:
1、输入项:
	(1)bond_valuation:现值。近似等于金融资产当前市场上最新交易价格。
	(2)n :偿付期。指的是需要付息的时间长度。
	(3)par_value:终值。偿付期结束后金融资产的在未来时刻的价值。
	(4)par_rate:票息。每个偿付期期末可以从金融资产收到的现金。(利息、股息等)
2、计算每期票息现金流:
	cf = par_value * par_rate
3、将现金流合成一个list,t0时刻的现金流为购买该金融资产付出的对价。最后一期现金流=金融资产本金偿还(或者变现)+ 最后一期票息现金流。中间时刻的现金流为票息。
	cf_list = [-bond_valuation] + [cf] * n
	cf_list[-1] = cf_list[-1] + par_value
4、使用irr处理list直接得出内含报酬率:
	irr = npf.irr(cf_list)
5、注意,这里是假设现金流为年频的计算方法,如果现金流为其他频率,需要进行年化处理。以月频为例:
import numpy_financial as npf


def cal_irr_m(bond_valuation, par_value, par_rate, n):
    """
    irr(月频付息)
    """
    cf = par_value * par_rate
    cf_list = [-bond_valuation] + [cf] * n
    cf_list[-1] = cf_list[-1] + par_value
    irr = npf.irr(cf_list)
    irr = (1 + irr) ** 12 - 1       # 年化
    return irr


if __name__ == '__main__':
    bond_valuation = 101  # 现值
    par_value = 100  # 票面价值(终值)
    par_rate = 0.005  # 票息(月频)
    n = 10  # 剩余偿还期
    irr = cal_irr_m(bond_valuation, par_value, par_rate, n)
    print(irr)

你可能感兴趣的:(金融数据分析,python,金融)