复利与定投收益怎么算:单利复利、XIRR 真实收益率与 72 法则

一、结论先给

定投的真实收益不能用"总收益 ÷ 总投入"算,这个数字会严重低估。

错误算法:投入 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 万,每月得投多少",比正向算更实用。

八、几条纪律

  1. 定投收益一律用 XIRR,不用"总收益÷总投入"。
  2. 比较不同期限的收益,先年化。
  3. 长期看收益率比本金重要:30 年期,年化从 4% 到 8%,终值差一倍多。
  4. 把费率算进去:1.5% 的管理费 30 年吃掉三分之一终值。
  5. 别把历史年化当承诺,波动损耗会让真实复利低于算术平均。
  6. 定投不解决选品问题,只解决择时问题。

九、延伸阅读

👉 相关在线工具:复利 / 定投收益计算 · 贷款计算 · 个税计算 · 标准计算器,免登录、浏览器内计算。

还有 65 个免费在线工具

纯前端实现,不用注册,数据不上传服务器。

浏览全部工具