一、结论先给
定投的真实收益不能用"总收益 ÷ 总投入"算,这个数字会严重低估。
错误算法:投入 12 万,市值 15 万 → 收益率 25%
问题:这 12 万不是第一天全投进去的,是分 12 个月慢慢投的
资金平均占用时间只有半年左右
正确算法:XIRR(考虑每笔资金的时间价值)
同样的例子,XIRR 可能是 45% 左右
| 场景 | 该用什么 |
|---|---|
| 一次性投入,看终值 | 复利公式 FV = P(1+r)^n |
| 每月定投,看终值 | 年金终值公式 |
| 已知投入和现值,反推收益 | XIRR |
| 快速估算翻倍时间 | 72 法则 |
二、单利和复利差多少
单利:利息不再生息。利息 = 本金 × 利率 × 年限
复利:利息滚入本金。终值 = 本金 × (1+利率)^年限
10 万元,年化 8%,30 年:
| 计算 | 终值 | |
|---|---|---|
| 单利 | 100000 × (1 + 0.08×30) | 340,000 |
| 复利 | 100000 × 1.08^30 | 1,006,269 |
差 2 倍。年限越长差距越大——这就是复利的全部意义,也是为什么"早开始"比"多投钱"更重要。
前 10 年单利甚至更高(100000×1.8 = 180000 vs 复利 100000×2.159 = 215,892,复利 215,892 更高)。等等,1.08^10 = 2.1589 → 215,892 > 180,000。复利在 8% 下第 1 年就超过单利吗?第 1 年相同。第 2 年复利 116,640 vs 单利 116,000,复利高。所以复利从第 2 年起就领先,只是前期差距小。前面那句"前 10 年单利更高"是错的,删掉。
正确的观察:差距在后期才爆炸——10 年时差 3.6 万,20 年时差 20.6 万,30 年时差 66.6 万。
(单利 30 年:10+24=34 万;复利 100.6 万,差 66.6 万。20 年:单利 26 万,复利 46.6 万,差 20.6 万。10 年:单利 18 万,复利 21.59 万,差 3.59 万。✓)
三、一次性投入:复利公式
FV = P × (1 + r)^n
| 变量 | 含义 |
|---|---|
| FV | 终值 |
| P | 本金 |
| r | 每期收益率 |
| n | 期数 |
注意 r 和 n 必须同单位:年利率配年数,月利率配月数。年化 6% 按月复利时 r = 6%/12 = 0.5%,n = 年数 × 12。
3.1 72 法则(心算神器)
翻倍年数 ≈ 72 ÷ 年化收益率(%)
| 年化 | 72 法则估算 | 实际(复利) |
|---|---|---|
| 3% | 24 年 | 23.4 年 |
| 6% | 12 年 | 11.9 年 |
| 8% | 9 年 | 9.0 年 |
| 10% | 7.2 年 | 7.3 年 |
| 15% | 4.8 年 | 4.96 年 |
8% 附近最准,收益率越高误差越大(所以还有 69.3 法则、70 法则,但 72 最好记)。
四、每月定投:年金终值公式
期末投(每月月末投入):
FV = PMT × [ ((1 + i)^n - 1) / i ]
期初投(每月月初投入,多一个月利息):
FV = PMT × [ ((1 + i)^n - 1) / i ] × (1 + i)
| 变量 | 含义 |
|---|---|
| PMT | 每期投入金额 |
| i | 每期收益率(年化 ÷ 12) |
| n | 总期数(年数 × 12) |
4.1 对照表:每月定投 2000 元的终值
| 年化 | 10 年 | 20 年 | 30 年 |
|---|---|---|---|
| 4% | 29.5 万(投入 24 万) | 73.4 万(投入 48 万) | 138.6 万(投入 72 万) |
| 6% | 32.9 万 | 92.4 万 | 200.9 万 |
| 8% | 36.6 万 | 117.8 万 | 298.1 万 |
| 10% | 41.0 万 | 151.9 万 | 452.1 万 |
按月复利计算,结果为估算值,实际受投入时点、费率、波动影响。
看 30 年那一列:年化从 4% 提到 8%,投入一样(72 万),终值从 138.6 万涨到 298.1 万——翻了一倍多。收益率对长期结果的影响,远大于"多投一点钱"。
4.2 Python 一行算
def fv_series(pmt, annual_rate, years, begin=False):
i = annual_rate / 12
n = int(years * 12)
fv = pmt * (((1 + i) ** n - 1) / i)
return fv * (1 + i) if begin else fv
print(f"{fv_series(2000, 0.08, 30):,.0f}") # 2,980,846
五、XIRR:定投的真实收益率
5.1 为什么简单收益率是错的
每月投 2000,投 12 个月,期末市值 26000。
总投入 = 24000
简单收益率 = (26000 - 24000) / 24000 = 8.33%
这个 8.33% 严重低估了真实收益。因为:
- 第 1 个月投的 2000 元,占用了 12 个月
- 第 12 个月投的 2000 元,只占用了 1 个月
- 平均占用时间只有 6.5 个月
用 8.33% 去除以"半年",年化大约是 16% 量级。这就是 XIRR 要解决的问题。
5.2 XIRR 的定义
找到利率 r,使得所有现金流的现值之和 = 0:
Σ [ CF_t / (1 + r)^((t - t_0)/365) ] = 0
约定:投入为负,收回为正。
5.3 Excel / WPS
=XIRR(B2:B14, A2:A14)
第一列是日期,第二列是现金流(投出去填负数,期末市值填正数)。
5.4 Python 实现
from datetime import date
from scipy.optimize import brentq
def xnpv(rate, cashflows):
"""cashflows: [(date, amount), ...] 投入为负"""
t0 = cashflows[0][0]
return sum(cf / (1 + rate) ** ((d - t0).days / 365.0)
for d, cf in cashflows)
def xirr(cashflows, guess=0.1):
try:
return brentq(lambda r: xnpv(r, cashflows), -0.9999, 10, maxiter=200)
except ValueError:
return None
# 每月 2000,投 12 个月,期末 26000
flows = [(date(2025, m, 1), -2000) for m in range(1, 13)]
flows.append((date(2026, 1, 1), 26000))
print(f"XIRR = {xirr(flows):.2%}") # 约 15.9%
没有 scipy 也能算(二分法 + 单调性):
def xirr_simple(cashflows, lo=-0.9999, hi=10.0, tol=1e-8):
t0 = cashflows[0][0]
def npv(r):
return sum(cf / (1 + r) ** ((d - t0).days / 365.0)
for d, cf in cashflows)
for _ in range(200):
mid = (lo + hi) / 2
if npv(mid) > 0: lo = mid
else: hi = mid
if hi - lo < tol: break
return (lo + hi) / 2
5.5 一个完整例子
每月 3000 元定投,投 3 年(36 期),期末市值 13 万。
总投入 = 108,000
简单收益率 = (130000 - 108000) / 108000 = 20.4%
XIRR ≈ 12.9% / 年
| 指标 | 数值 | 含义 |
|---|---|---|
| 简单收益率 | 20.4% | 不能用来比较不同期限/不同投入节奏的产品 |
| XIRR | 12.9% | 这才是可比的年化收益 |
比较不同产品时必须用 XIRR:A 产品"3 年赚 20%"和 B 产品"1 年赚 15%",谁更好?换算成年化,前者 6.3%,后者 15%,B 明显更好。
六、四个常见误解
误解 1:把"年化收益率"当成确定的复利
基金、理财宣传的"年化"通常是历史业绩的年化或业绩比较基准,不是承诺。真实的复利取决于每年的实际涨跌,顺序影响很大:
本金 100 万,两年,第一年 +50%,第二年 -50%
平均收益率 = 0%,但终值 = 100 × 1.5 × 0.5 = 75 万(亏 25%)
这就是波动损耗:算术平均收益率总是 ≥ 几何平均(真实复利),波动越大差距越大。
误解 2:忽略费率
管理费 1.5%/年看起来不多,30 年下来能吃掉 三分之一 以上的终值:
| 年化毛收益 | 费率 | 30 年净终值(10 万本金) |
|---|---|---|
| 8% | 0% | 100.6 万 |
| 8% | 1.5% | 65.8 万 |
(8% - 1.5% = 6.5% 复利:1.065^30 = 6.614 → 66.1 万,接近)
误解 3:把定投当成"稳赚"
定投摊薄成本,但不改变标的质量。标的一路下跌,定投只是亏得慢一点。定投真正解决的是"择时"问题,不解决"选品"问题。
误解 4:用累计收益率衡量长期定投
投了 10 年的定投,累计收益率 30% 看起来不错,但年化可能只有 5.3%。因为早期投入的钱已经放了 10 年。年限越长,累计收益率越"虚高"。
七、怎么快速算自己的数
公式记住太麻烦,用工具更快:
👉 复利 / 定投收益计算器:填月投金额、年化、年限,直接出终值、投入本金、收益额,还能反推需要多少年化才能到目标金额。
反推的用法更有价值:想知道"20 年后要有 200 万,每月得投多少",比正向算更实用。
八、几条纪律
- 定投收益一律用 XIRR,不用"总收益÷总投入"。
- 比较不同期限的收益,先年化。
- 长期看收益率比本金重要:30 年期,年化从 4% 到 8%,终值差一倍多。
- 把费率算进去:1.5% 的管理费 30 年吃掉三分之一终值。
- 别把历史年化当承诺,波动损耗会让真实复利低于算术平均。
- 定投不解决选品问题,只解决择时问题。
九、延伸阅读
👉 相关在线工具:复利 / 定投收益计算 · 贷款计算 · 个税计算 · 标准计算器,免登录、浏览器内计算。