Python利用最优化算法求解投资内部收益率IRR【一】
一、 内部收益率和净现值
内部收益率(Internal Rate of Return, IRR)其实要和净现值(Net Present Value, NPV)结合起来讲。净现值指的是某个投资项目给公司或企业带来的价值增值,可以简单地用以下公式去计算。
1.净现值:
NPV = CF0 + CF1/(1+r1) + ... + CFt/(1+rt)^t
其中,CF0是初始投资额,是一个负值,代表现金的流出;t表示时间,指第t期;后面的CF1,CF2,...,CFt这些是每期的回报金额,为正值,表示投资所得的收益。r1,r2,...、rt是指每期的折现率。
举个比较通俗的例子,我们花100万元投资了一个一年期理财产品,预期收益率为10%,一年期国债利率为5%,投资是否合算?
这里涉及到折现率的相关知识,简单介绍一下:我们都知道银行存款是有利率的,我们把10000块钱存到银行,一年后,连本带息就会超过10000元。如果我们不把钱存银行,一年后还是10000元钱,不存钱相当于亏掉了那么多利息的钱。也就是说,在存入银行后,一年后的10000元的拿到现在来看,实际是不到10000元的,我可能存9500,一年后就能拿到10000。这就是一个折现的概念,用时间来换利息。
我们再看这个问题,
1年后,预期的现金流就是:
100×(1+10%)=110(万元),
然后,我们按照国债的利率5%来对其折现(假设该产品与国债信用风险相当),即:一年后的110万元,如果我们按信用等级较高的国债去投资,现在价值多少?
答案是:110/(1+5%)。
计算净现值:
NPV = -100 + 110/(1+5%)= 4.7619(万元)
净现值是正的,说明这笔投资合算。当然,这里其实只看年利率就可以做出简单的判断,实际情况下,不论是理财产品还是国债利率都是浮动的。
2.内部收益率
前面我们取的折现率是国债的利率,是一个与投资决策之外的值,也可以理解是外部的收益率。这里内部收益率,指的是使净现值等于0时的折现率,就称为内部收益率(IRR)。我们用一个固定的折现率r去计算,令NPV=0,则
0 = CF0 + CF1/(1+r) + ... + CFt/(1+r)^t
那么,此时的r在数值上与IRR相等。因此,我们只要知道每年的现金流量情况,就能计算出该笔投资的IRR,将IRR与r相比,若IRR>r,则该项目值得投资;若IRR<r,则该项目不值得投资,不如去买同期的稳定国债之类的产品。
3.内部收益率的简单计算
如下表所示,第0年也就是现在,产生了-500万的现金流量,即用500万元去做一个投资,1年、2年、3年后的现金流量均为正的100万元、200万元和300万元。假设还是以5%的国债利率去做折现,这笔投资是否值得?
| 年份 | 现金流 (万元) |
|---|---|
| 0 | -500 |
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
计算内部收益率,将其与国债利率比较,
-500 + 100/(1+IRR) + 200/(1+IRR)^2 + 300/(1+IRR)^3 vs 5%
计算得到
IRR约为8% >5%,该笔投资值得。
从另一个角度看,这笔投资3年后累计现金流为+100万元,如果买3年期利率为5%的国债,则累计现金流为
500×(1+5%)^3-500=78.8125(万元) < 100(万元)
Python利用最优化算法求解投资内部收益率IRR【一】的更多相关文章
- 利用Numpy求解投资内部收益率IRR
一. 内部收益率和净现值 内部收益率(Internal Rate of Return, IRR)其实要和净现值(Net Present Value, NPV)结合起来讲.净现值指的是某个投资项目给公司 ...
- python利用dijkstra算法求解图中最短距离
利用dijkstra算法,来完成图中两个顶点间最短的距离,可以直接复制使用,只需要修改参数即可 def dijkstra_raw(edges, from_node, to_node): "& ...
- python利用kruskal求解最短路径的问题
python利用kruskal算法求解最短路径的问题,修改参数后可以直接使用 def kruskal(): """ kruskal 算法 ""&quo ...
- EM 算法求解高斯混合模型python实现
注:本文是对<统计学习方法>EM算法的一个简单总结. 1. 什么是EM算法? 引用书上的话: 概率模型有时既含有观测变量,又含有隐变量或者潜在变量.如果概率模型的变量都是观测变量,可以直接 ...
- 支持向量机(四)----序列最小最优化算法SMO
在支持向量机(二)和(三)中,我们均遗留了一个问题未解决,即如何求解原问题的对偶问题: 在支持向量机(二)中对偶问题为: 在支持向量机(三)中的对偶问题为: 对于上述两个对偶问题,我们在支持向量机(三 ...
- 序列最小最优化算法(SMO)-SVM的求解(续)
在前一篇文章中,我们给出了感知器和逻辑回归的求解,还将SVM算法的求解推导到了最后一步,在这篇文章里面,我们将给出最后一步的求解.也就是我们接下来要介绍的序列最小最优化算法. 序列最小最优化算法(SM ...
- 【洛谷2624】[HNOI2008] 明明的烦恼(Python+利用prufer序列结论求解)
点此看题面 大致题意: 给你某些点的度数,其余点度数任意,让你求有多少种符合条件的无根树. \(prufer\)序列 一道弱化版的题目:[洛谷2290][HNOI2004] 树的计数. 这同样也是一道 ...
- 【洛谷2290】[HNOI2004] 树的计数(Python+利用prufer序列结论求解)
点此看题面 大致题意: 给定每个点的度数,让你求有多少种符合条件的无根树. \(prufer\)序列 这显然是一道利用\(prufer\)序列求解的裸题. 考虑到由\(prufer\)序列得到的结论: ...
- 利用HTML5 Canvas和Javascript实现的蚁群算法求解TSP问题演示
HTML5提供了Canvas对象,为画图应用提供了便利. Javascript可执行于浏览器中, 而不须要安装特定的编译器: 基于HTML5和Javascript语言, 可随时编写应用, 为算法測试带 ...
随机推荐
- Docker部署FastDFS(附示例代码)
1. FastDFS简介 FastDFS是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文 ...
- IntelliJ IDEA(十二) :IDEA常用配置
idea版本 2019.3.4 配置JDK File--> Project Structure... 修改项目 jdk和项目语言等级 修改jdk版本 File--> Ohter Setti ...
- 2020-2021-1 20209307《Linux内核原理与分析》第六周作业
这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第六周作业> 这个作业的目标 & ...
- js下 Day11、案例
一.成绩分类 效果图: 功能思路分析: 1. 渲染数据 2. 鼠标按下开启拖拽 \1. 给成绩盒子绑定鼠标按下事件(mousedown),用事件委托做多个标签的拖拽 \2. 开启控制拖拽的变量 \3. ...
- CMake将生成的可执行文件保存到其他目录
在运行一些程序的时候,我们一般会把数据文件放在其他位置.而当在修改程序时,需要不断的修改代码,编译,执行.每次编译之后,都得将可执行文件复制到数据文件的目录. 这一问题有两种解决方法,一是直接在数据目 ...
- 旁站和C段的简要解释
旁注与C段嗅探的意义,旁注的意思就是从同台服务器上的其他网站入手,提权,然后把服务器端了,就自然把那个网站端了.C段嗅探,每个IP有ABCD四个段,举个例子,192.168.0.1,A段就是192,B ...
- Hive中的集合数据类型
除了使用础的数据类型string等,Hive中的列支持使用struct, map, array集合数据类型. 数据类型 描述 语法示例 STRUCT 和C语言中的struct或者"对象&qu ...
- 豆瓣读书top250数据爬取与可视化
爬虫–scrapy 题目:根据豆瓣读书top250,根据出版社对书籍数量分类,绘制饼图 搭建环境 import scrapy import numpy as np import pandas as p ...
- (六)、mkdir--创建目录make directory
一.命令详解与命令格式 在文件系统中创建新的目录, 格式:mkdir [-选项] 目录名 目录名既可以是相对路径名,也可是相对路径名 选项: -p或者--parent,创建指定路径中所有不存在 ...
- 修改mysql和MariaDB密码
一.修改mysql密码 UPDATE user SET password=PASSWORD('new_password') WHERE user='root'; 二.修改MariaDB密码 alter ...