跳到主要内容

复利与年化

直觉

「一年涨 10%」听起来很美好,但怎么涨决定了真实的结局:是每天稳稳涨一点(复利),还是某天暴涨一次?复利让收益滚动放大,同时也带来一个隐藏成本——波动率拖累:同样的平均收益,波动越大,最终到手越少。

数学原理

算术平均 vs 几何平均

nn 期的收益率为 R1,,RnR_1,\dots,R_n

算术平均=1ntRt,几何平均=(t(1+Rt))1/n1\text{算术平均} = \frac{1}{n}\sum_{t} R_t, \qquad \text{几何平均} = \left(\prod_{t}(1+R_t)\right)^{1/n} - 1
「人话」解释:该用哪个?

算术平均是「每期平均赚多少」,适合做单期统计(如估方差、夏普)。 几何平均才是「真正复利下来的平均增速」,适合算长期年化收益。 长期看,几何平均 \leq 算术平均,差的就是波动率拖累。

年化

设一年有 kk 个周期(日 k=252k=252、月 k=12k=12)。对对数收益,年化最干净:

μann=krˉ,σann=σk\mu_{\text{ann}} = k\cdot \bar r, \qquad \sigma_{\text{ann}} = \sigma\sqrt{k}

简单收益,复利年化收益率为:

Rann=(1+Rg)k1R_{\text{ann}} = (1+R_g)^{k} - 1

波动率拖累

当收益近似正态时,几何与算术平均有著名关系:

RgRˉ12σ2R_g \approx \bar R - \tfrac{1}{2}\sigma^2

也就是说,每多一份方差,复利收益就被吃掉一半

可运行案例:高波动如何侵蚀复利

我们模拟平均收益完全相同、但波动不同的两条路径,比较它们的几何平均(真实年化)。

import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(11)

mean_daily = 0.05 / 252          # 两条路径的"算术"日均收益相同
vols = [0.10, 0.40]              # 低波动 vs 高波动(年化)
T = 252 * 5                      # 5 年

plt.figure(figsize=(9, 3.8))
for vol in vols:
  r = rng.normal(mean_daily, vol/np.sqrt(252), T)
  equity = 100 * np.cumprod(1 + r)
  arith = r.mean()
  geom = (1 + r).prod() ** (1/len(r)) - 1
  drag = 0.5 * (r.std(ddof=0))**2 * 252      # 年化拖累 ≈ 0.5σ²
  plt.plot(equity, label=f"年化波动{vol:.0%}  几何年化{geom*252:.2%}  拖勒≈{drag:.2%}")
  print(f"波动{vol:.0%}: 算术年化{arith*252:.2%}  几何年化{geom*252:.2%}  差≈{(arith-geom)*252:.2%}")

plt.axhline(100, color="gray", lw=0.8)
plt.title("同样平均收益,高波动让复利结果大打折扣")
plt.xlabel("交易日"); plt.ylabel("资金(起点100)"); plt.legend(fontsize=9)
plt.tight_layout(); plt.show()

动手改一改

vols 改成 [0.10, 0.40, 0.80]——年化波动 80% 时,即便算术平均为正,几何年化可能变成负的。这就是为什么风控如此重要。

小结

  • 单期统计用算术平均,长期年化用几何平均
  • 年化:对数收益 ×k\times k、波动率 ×k\times\sqrt{k}
  • 波动率拖累 RgRˉ12σ2R_g \approx \bar R - \tfrac12\sigma^2:波动越大,复利越受伤。