做时间的朋友,必须知道收益咋算

新年好,我们度过了艰难的 2020,迈进了 2021 的征程,在新年伊始,我们一起学习一个新技能,使我们能拥有看到未来的眼睛

比起对时间、精力的投资,对金钱的投资更容易理解和显现

那么面对纷繁复杂的投资种类,哪个才是对我们有利的呢?当然要看收益率高呀

那如何计算收益率呢?

年化复合回报 15% 意味着什么

如果有一个投资标的,年化复合收益率是 15%,那么 100 年后(虽然我们可能活不了这么久),能获得少倍的收入?

虽然我们可以写成计算公式,但我们的大脑并不适合计算小数的幂运算,

对于这个问题,计算公式是:

\[(1+15\%)^{100}=?\]

这样用 Python 一行代码就搞定:

1
2
(1+0.15)**100
# 1174313.4507002793

对,你没看错,是 117 万倍!,也就是投入一块钱,最终收益竟然是 117 万

这个并非假设的例子,2019 年的时候,可⼝可 乐公司上市⼀百周年。⼈们算了⼀下,在这⼀百年间,可⼝可乐公司竟然为股东创造了 15% 的年化复合回报率!

果然,收益率是很大程度上反映了投资标的的好坏

定投的收益

定投就是,定期定额,持续对某个标的的投资,可以参见《定投到底好不好 —— python 告诉你答案》

对于一个具有某个平稳收益率的标的,使用定投策略,在一段时间后,能获得多少收益呢?

通过设定收益率、定投周期、定投额度,就可以算出来,不过手工计算比较麻烦,可以直接使用 Numpy 提供的 FV 函数很方便的计算

FV 函数参数是:

  • rate, 收益率
  • nper:投资期数
  • pmt:每期定投金额
  • pv:期初已有金额,即现值
  • when:表示各期计算收益的时间点,期初为 0,期末为 1,默默为期末

假设,按月定投,每月定投 1000,月收益率为 10%,定投 12 个月,即一年的最终金额是多少:

1
2
3
import numpy_financial as npf
npf.fv(0.1, 12, -1000, 0)
# 21384.28376721003
  • 注意:numpy 将在 1.2 及以后版本,会将经济类公式去除,而专门用模块 numpy_financial 做经济类公式库,为了升级方便,建议使用 numpy_financial
  • numpy_financial 通过 pip install numpy-financial 安装
  • numpy 中 负数表示投入,正数表示获取,因此 -1000 表示投入 1000

如果在同样的条件下,想要在某个时间点,收获一定的金额,每期应该投入多少呢?比如一年后要得到 5万元,计算每月的投入

1
2
3
import numpy_financial as npf
npf.pmt(0.1, 12, 0, 50000)
# -2338.165755014362

可以得出,每月至少投入 2338.17 元

pmt 与 fv 的区别只是后面的两个参数含义不同

分别是,期初金额和终值金额

定期不定额的收益率

定投虽好,不过实际操作中难免有各种异常情况,漏投,或多投在所难免,甚至将一部分提现

这种情况下如何计算自己的收益率呢?

我们可以利用 irr 这个函数,其全称为(Internal Rate of Return),即内部报酬率,不过名称还是不太明显,我们看看如何应用吧

假设有一个定投项目,下面是每期定投的金额和支出:

期数 投入 提现 实际投入
1 -1000 0 -1000
2 0 100 100
3 -1500 200 -1300
4 -2000 0 -2000
5 -800 6000 5200

注意,金额都是相对于投资者来说的,负数为支出,正数为收入

我们做如下计算

1
2
3
4
import numpy_financial as npf
pmts = [-1000, 100, -1300, -2000, 5200]
npf.irr(pmts)
# 0.10969579295711918

pmts 为每期投入金额,因为是可变的,所有存入数组里

最终得到的结果是,不定额投资 5 期, 最终收益率为 10.96%

有了这个函数赶紧算算那些保险方案,看看承诺的收益率是否与实际相符

不定期不定额的收益率

直接在看问题,一般都会被难到,不知如何下手

但实际上这种投资操作更为实际,有钱就投,没钱不投,钱多多投,钱少少投,才是我们平常人的投资风格

如何计算收益率呢?

xirr 闪亮登场

xirr 源自于 Excel 中的计算公式

看起来问题很复杂,而 xirr 函数却很简单,即 收益率=xirr(资金流, 日期流)

不过遗憾的是 numpy-financial 模块中并未提供 xirr 函数,需要引入另外的算法

GitHub 找到了一个简单的库 https://github.com/Tacombel/XIRR.py

下载其中的 XIRR.py 放在根目录下,引用即可

假设有这样的投资记录

日期 现金
2019-02-04 -300.3
2019-06-17 -500.5
2019-11-18 741.153
2020-04-27 -600.6
2020-10-19 1420.328547

来计算看看

1
2
3
4
5
6
7
8
9
10
11
12
13
from XIRR import xirr
import datetime

dates = [datetime.date(2019, 2,4), 
datetime.date(2019, 6, 17), 
datetime.date(2019,11, 18),
datetime.date(2020,4, 27),
datetime.date(2020,10, 19)]

values = [-300.3,-500.5,741.153,-600.6,1420.328547]

xirr(values, dates)
# 输出为: 0.779790640991537

实际的收益率为 77.98%

有了 irrxirr 两个函数,投资世界是否变得清晰多了

总结

如果有什么方法让流失的时光留住,那就对时间做定投,正如在 2020 总结篇 中说的:做时间的朋友,成为长期主义者

我们知道长期主义者与非长期主义者的最大区别在于,对待积累的方式

只有让流走的时间、精力、金钱积攒起来,发挥价值,才能使我们走的更远更宽

期望今天的分享能让你从另外的角度上看待投资,让我们以更快的速度成长,比心~

参考

示例代码:https://github.com/JustDoPython/python-examples/tree/master/taiyangxue/rate-of-return

Python Geek Tech wechat
欢迎订阅 Python 技术,这里分享关于 Python 的一切。