3. 收益率计算:简单收益率与对数收益率

收益率计算,是量化金融里最基础、也最容易被忽视的环节。我见过不少新手,上来就对着价格序列跑模型,结果发现回测曲线漂亮得不行,实盘一跑就崩。为什么?收益率算错了。

今天咱们就把这个地基打牢。说白了,收益率就是衡量资产价值变化的指标。但怎么算,里面门道不少。

3.1 简单收益率 vs 对数收益率

先看两个最常用的公式:

简单收益率:R_t = (P_t - P_{t-1}) / P_{t-1}
对数收益率:r_t = ln(P_t / P_{t-1})

你可能会问,干嘛搞两种?我刚开始做量化时也觉得多此一举。直到有一次,我用简单收益率做多期累加,算出来的总收益和实际对不上,查了半天才发现是复利效应在作怪。

简单收益率,直观好理解。你今天赚了5%,明天亏了3%,加起来就是2%。但注意,这是算术加法,不是真实收益。真实收益应该是 (1+5%)*(1-3%) - 1 ≈ 1.85%。

对数收益率,好处在于可加性。你把每天的对数收益率加起来,就等于整个区间的对数收益率。这在时间序列建模里特别方便。

核心区别:

  • 简单收益率:适用于单期、小波动场景
  • 对数收益率:适用于多期累加、统计建模
  • 当收益率很小时(比如日收益率),两者几乎相等

我的习惯:做回测分析时,我一般用对数收益率。但给老板汇报时,我会转成简单收益率,因为老板更关心「我到底赚了多少钱」。

3.2 收益率序列的统计特征

收益率序列不是白噪声。它有自己的脾气。我总结了几条常见特征:

  • 尖峰厚尾:极端值出现的概率比正态分布高。说白了,市场比我们想象中更容易出幺蛾子。
  • 波动率聚集:大波动后面跟着大波动,小波动后面跟着小波动。就像暴风雨来临前,海面不会突然平静。
  • 杠杆效应:下跌时波动率上升得更快。为什么?因为亏钱时大家更慌。
  • 自相关微弱:今天的收益率对明天的预测能力很弱。但波动率有强自相关。

我在做风险因子建模时,经常先跑一个描述性统计:

import numpy as np
import scipy.stats as stats

returns = np.random.randn(1000)  # 模拟数据
mean = np.mean(returns)
std = np.std(returns)
skew = stats.skew(returns)
kurt = stats.kurtosis(returns)

print(f"均值: {mean:.4f}")
print(f"标准差: {std:.4f}")
print(f"偏度: {skew:.4f}")
print(f"峰度: {kurt:.4f}")

偏度看是否对称,峰度看尾部厚度。如果峰度大于3,说明有厚尾。我曾经用这个指标筛掉过一只看似稳健、实则风险极高的策略。

注意:不要只看均值。收益率序列的方差才是风险的核心。很多策略死在「波动率突变」上,而不是方向判断错误。

3.3 除权除息处理

这是个大坑。很多人在回测时忽略了除权除息,结果收益率曲线看起来很美,但那是假的。

举个例子:某股票今天收盘100元,明天除息,每股分红5元。除息后开盘价变成95元。如果你直接用价格算收益率,会发现今天到明天跌了5%。但实际你拿到了5元分红,总资产没变。

怎么处理?我常用的方法是:

  • 前复权:调整历史价格,让价格序列连续。适合看长期趋势。
  • 后复权:调整当前价格,让分红再投资。适合计算真实收益。
  • 等权调整:在除权除息日,把分红加回价格中。

我个人习惯用后复权。因为做对冲策略时,我需要知道每一分钱都去了哪里。

# 简单示例:除息日调整
price_before = 100.0
dividend = 5.0
price_after = 95.0

# 错误计算
return_wrong = (price_after - price_before) / price_before  # -5%

# 正确计算
return_correct = (price_after + dividend - price_before) / price_before  # 0%

避坑指南:我曾经用Wind数据做回测,没注意它默认是前复权。结果策略在分红季表现异常好,其实是数据失真。后来我改用后复权,才看到真实情况。

3.4 知识体系结构图

下面这张图,是我自己梳理的收益率计算核心逻辑。你可以把它当作一个检查清单:

收益率计算知识体系 收益率类型 统计特征 除权除息处理 简单收益率 对数收益率 尖峰厚尾 波动聚集 前复权 后复权 多期累加 / 建模 风险度量 / 回测 真实收益计算 三者相互独立,但在实际建模中需要综合考虑

嗯,这张图基本概括了本章的核心。你想想看,收益率计算看似简单,但每个分支都有坑。我见过最离谱的案例,是有人用未复权的价格算年化收益,结果跑出来20%+,实际只有5%。

所以,我的建议是:

  • 做策略回测时,统一用对数收益率
  • 做业绩归因时,用简单收益率
  • 处理分红、送股、配股时,务必用后复权数据

一句话总结:收益率是量化分析的起点。起点错了,后面全白搭。别嫌麻烦,把这一步做扎实。

专注资料整理