第3章:收益率计算与分布

各位同学,今天我们来聊聊收益率。这玩意儿看着简单,但坑特别多。我刚开始做量化那会儿,就因为收益率算错,导致整个对冲策略回测数据全废了。嗯,咱们一步步来。

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

先问个问题:你今天赚了10%,明天亏了10%,你亏了吗?

直觉上觉得不赚不赔对吧?但实际算一下:100块涨10%变110,再跌10%变99。你亏了1块。这就是简单收益率的“不对称性”问题。

简单收益率(也叫算术收益率)公式很简单:

R_t = (P_t - P_{t-1}) / P_{t-1}

对数收益率是:

r_t = ln(P_t / P_{t-1})

我个人习惯用对数收益率做建模。为什么?三个原因:

  • 可加性:多期对数收益率直接相加,简单收益率不行
  • 近似正态:对数收益率更接近正态分布,建模方便
  • 时间对称:涨10%和跌10%在对数尺度下是对称的

核心要点:做风险因子建模时,我几乎只用对数收益率。简单收益率只在计算组合收益时才用。

来看个代码示例:

import numpy as np
import pandas as pd

# 模拟价格序列
prices = np.array([100, 102, 98, 105, 103])

# 简单收益率
simple_returns = (prices[1:] - prices[:-1]) / prices[:-1]

# 对数收益率
log_returns = np.log(prices[1:] / prices[:-1])

print("简单收益率:", simple_returns)
print("对数收益率:", log_returns)
print("差异:", simple_returns - log_returns)

你会发现,当收益率很小时,两者几乎一样。但一旦波动大了,差异就出来了。我在做期权对冲时,这个差异直接影响到Delta计算的精度。

3.2 收益率分布特征:尖峰厚尾

教科书上说金融资产收益率服从正态分布。但实际呢?我做了十年风控,从没见过哪只股票收益率是正态的。

真实情况是:尖峰厚尾

  • 尖峰:中间比正态分布更“瘦高”,说明大部分时间波动很小
  • 厚尾:两端比正态分布更“肥”,说明极端行情比预期更频繁

举个例子:正态分布下,超过3个标准差的事件,理论上几百年才发生一次。但2008年金融危机、2015年A股股灾、2020年疫情熔断——这些“黑天鹅”事件,我职业生涯里就碰了好几次。

避坑指南:我曾经用正态分布假设做VaR模型,结果回测时发现实际亏损超出VaR的次数是理论值的3倍。后来改用t分布,才勉强靠谱。记住:金融数据天生就是厚尾的。

为什么会这样?说白了,市场参与者不是理性的。恐慌和贪婪会放大极端行为。你想想看,当所有人都想跑的时候,价格下跌的速度远超正态分布预测的。

3.3 正态性检验:Jarque-Bera检验

既然我们怀疑收益率不服从正态分布,那就得用统计方法验证一下。Jarque-Bera检验(简称JB检验)就是干这个的。

JB统计量的公式:

JB = n/6 * (S² + (K-3)²/4)

其中:

  • S:偏度(Skewness),衡量分布是否对称
  • K:峰度(Kurtosis),衡量分布的“尖峰”程度
  • n:样本量

正态分布的偏度为0,峰度为3。如果JB统计量很大,p值小于0.05,我们就拒绝“数据服从正态分布”的原假设。

来看代码:

from scipy import stats
import numpy as np

# 生成模拟的股票收益率数据(实际中从数据库读取)
np.random.seed(42)
returns = np.random.standard_t(df=3, size=1000)  # t分布模拟厚尾

# Jarque-Bera检验
jb_stat, jb_pvalue = stats.jarque_bera(returns)

print(f"JB统计量: {jb_stat:.4f}")
print(f"p值: {jb_pvalue:.6f}")

if jb_pvalue < 0.05:
    print("拒绝正态性假设:收益率显著偏离正态分布")
else:
    print("无法拒绝正态性假设")

我在项目中一般会同时做三个检验:JB检验、Shapiro-Wilk检验、以及Q-Q图可视化。光看一个数字不够,得结合图形判断。

实战技巧:JB检验对样本量很敏感。样本量太大时,微小的偏离也会被判定为显著。我一般会结合Q-Q图一起看,如果尾部偏离不大,就当作近似正态处理。

3.4 本章知识体系

下面这张图总结了收益率计算与分布的核心逻辑:

收益率计算与分布 - 知识体系 收益率计算 简单收益率:R = (P_t - P_{t-1}) / P_{t-1} 对数收益率:r = ln(P_t / P_{t-1}) 推荐:建模用对数,组合用简单 分布特征 尖峰:中间更集中 厚尾:极端值更频繁 实际数据 ≠ 正态分布 正态性检验:Jarque-Bera JB = n/6 × (S² + (K-3)²/4) p值 < 0.05 → 拒绝正态假设 实战应用 VaR模型 → 用t分布替代正态分布 对冲策略 → 对数收益率保证时间一致性

3.5 小结

这一章我们聊了三件事:

  1. 收益率怎么算:简单收益率和对数收益率,各有各的用途
  2. 分布长什么样:尖峰厚尾是常态,别指望正态分布
  3. 怎么检验正态性:JB检验是快速筛查工具,但别迷信

最后说句实在话:做风控这么多年,我最大的体会就是——别跟数据较劲。它说它不是正态,你就别硬套正态模型。换个t分布、或者用非参数方法,往往效果更好。

核心记忆点:对数收益率 + 厚尾分布 + JB检验 = 市场风险建模的起点。这三样东西,我每个项目都会用到。


公众号:蓝海资料掘金营,微信deep3321