内部收益率

内部收益率

1.什么是内部收益率

内部收益率 (Internal Rate of Return(IRR)),就是资金流入现金总额与资金流出值总额相等的利率,净现值(NPV)等于零时的折现率。完全取决于现金流。是一个报酬率的体现。

2.为什么需要内部收益率

内部收益率是用来评价项目投资财务效益的方法。只能知道目标项目是否值得投资,却不知道值得多少钱投资,并且投资后具体的价值无法知道,一般应用于单个项目投资。

一句话,我花这个钱干这个事能不能挣钱,大概收益率是多少。

但是具体挣多少钱就不是这个数值能体现的,因此需要净现值进行参考。

一个内部收益率低但是净现值高的的项目更值得考虑实施。

预测型项目和采购过程中的固定总价合同(FFP)在计算的时候准确性更高。

在做投资决策时,若IRR大于公司要求的最低报酬率或资本成本时,该方案才是可行的。

3.如何实现内部收益率的计算

内部收益率要用若干个折现率进行试算,直到找到净现值等于零或接近于零的那个折现率。
∑ t = 1 n N C F t ( 1 + I R R ) t − C = 0 N C F t 为 第 t 期 的 现 金 流 ( 第 t 期 的 还 款 本 息 和 ) n 为 项 目 周 期 ( 资 金 流 月 数 , 如 : 五 年 期 投 资 , n = 36 ) I R R 为 内 部 收 益 率 ( 即 测 算 出 的 月 利 率 ) C 为 初 始 投 资 额 ( 即 投 资 金 额 ) 年 化 利 率 ( 单 利 ) = I R R ∗ 12 年 化 利 率 ( 复 利 ) = ( 1 + I R R ) 12 − 1 \sum _{t=1} ^{n} \cfrac{NCF_t} {(1+IRR)^t} -C =0 \\ \\NCF_t 为第t期的现金流(第t期的还款本息和)\\ n为项目周期(资金流月数,如:五年期投资,n=36)\\IRR为内部收益率(即测算出的月利率)\\C为初始投资额(即投资金额)\\年化利率(单利)= IRR*12\\年化利率(复利)=(1 + IRR)^{12} -1 t=1n(1+IRR)tNCFtC=0NCFtttnn=36IRRC=IRR12=1+IRR121

4.具体实现
public class IrrUtil {
    
    //最小差异
    private static final BigDecimal MIN_DIF = new BigDecimal("0.00000001");
    //迭代次数
    private static int LOOP_NUM = 1000;

    /**
     * @desc 使用方法参考main方法
     * @param cashFlow 资金流 即NCF
     * @param costMoney 初始投资额 即 C
     * @return 内部收益率
     */
    public static BigDecimal getIrr(List<BigDecimal> cashFlow, BigDecimal costMoney){
        //初始化最小内部收益率
        BigDecimal minValue = new BigDecimal("0");
        //初始化最大内部收益率
        BigDecimal maxValue = new BigDecimal("1");
        //初始化测试内部收益率
        BigDecimal testValue = new BigDecimal("0");
        //将初始投资额转为负值
        costMoney = costMoney.negate();

        //开始迭代逼近近似值
        while(LOOP_NUM>0){
            testValue =  minValue.add(maxValue).divide(new BigDecimal("2"));
            //计算净现值
            BigDecimal npv = NPV(cashFlow, testValue);
            //将净现值和初始投资额比较
            if(costMoney.add(npv).abs().compareTo(MIN_DIF) == -1){
                break;
            }else if(costMoney.abs().compareTo(npv) == 1){
                maxValue=testValue;
            }else{
                minValue=testValue;
            }
            LOOP_NUM--;
        }
        return testValue;
    }

    /**
     * @param cashFlow 资金流
     * @param rate 测试利率
     * @return 净现值
     */
    private static BigDecimal NPV(List<BigDecimal> cashFlow, BigDecimal rate){
        BigDecimal npv = new BigDecimal("0");
        //参考计算公式理解
        for(int i=0;i < cashFlow.size();i++){
            npv = npv.add(cashFlow.get(i)
                    .divide(rate.add(new BigDecimal("1"))
                            .pow(i+1), 9, BigDecimal.ROUND_HALF_UP));
        }
        return npv;
    }
}
@RunWith(SpringRunner.class)
@SpringBootTest
class test{
    @Test
    public void testIRR(){
        List<BigDecimal> cashFlow = getList();
        BigDecimal costMoney = new BigDecimal("100000");
        BigDecimal irr = IrrUtil.getIrr(cashFlow, costMoney);
        BigDecimal irr12 =  irr.multiply(new BigDecimal("12"));
        /**
         * 0.003979153383625089190900325775146484375
         * 0.047749840603501070290803909301757812500
         */
        System.out.println(irr);
        System.out.println(irr12);
    }
    private  List<BigDecimal> getList(){
        List<BigDecimal> flowInArr=new ArrayList<BigDecimal>();;
        for (int i = 0; i < 23; i++){
            flowInArr.add(new BigDecimal("0"));
        }
        flowInArr.add(new BigDecimal("110000"));
        return flowInArr;
    }
}
5.涉及概念

净现值(Net Presen Value),是一项投资所产生的未来现金流的折现率与项目投资成本之间的差值。

财务净现率(Financial Net Present Value,FNPV),项目计算期内各年的财务净现金流量,按照给定的收益率与项目初期投资额之和,如果大于0证明项目投资在财务上可行。

贴现现金流法(拉巴波特模型,Rappaport Model,DCF法),进行新投资时,市场最低可接受的报酬率。

自由现金流(Free Cash Flow,FCF),用来衡量企业实际持有的能够回报股东的现金,简单表示:“利润 + 折旧 - 投资”。

资本成本,是更现实的再投资率(Reinvestment Rate),再投资率又称内部成长性比率,指企业每年赚取的钱,有多少比例用于投资支出。

资本限量决策,指企业在资本限定的情况下,投资项目组合来获取最大收益的决策。

在线公式编辑器,https://www.matheditor.cn/

你可能感兴趣的:(java,java)