2. 资产收益率与风险度量:单资产收益率计算与风险度量
各位同学,咱们今天聊点实在的。做量化投资,第一步不是找代码,也不是调参数,而是搞清楚你手里拿的资产到底是个什么脾气。说白了,就是收益率和风险怎么算。
我刚开始做量化那会儿,踩过一个坑:直接用简单收益率去算长期回报,结果发现数据越算越离谱。后来才明白,不同场景下该用不同的收益率定义。今天咱们就把这个事彻底讲透。
2.1 单资产收益率计算
2.1.1 简单收益率
简单收益率,也叫百分比收益率。公式很简单:
R_t = (P_t - P_{t-1}) / P_{t-1}
其中 P_t 是今天的价格,P_{t-1} 是昨天的价格。
举个例子:昨天股价 100 元,今天涨到 105 元,那简单收益率就是 (105-100)/100 = 5%。
优点:直观,好理解。你跟客户说「今天赚了5%」,谁都听得懂。
缺点:时间不可加。什么意思?你算一周的总收益率,不能直接把每天的收益率加起来。比如第一天涨5%,第二天跌5%,总收益率不是0%,而是 (1+5%)*(1-5%)-1 ≈ -0.25%。
2.1.2 对数收益率
对数收益率,也叫连续复利收益率:
r_t = ln(P_t / P_{t-1})
还是刚才的例子:ln(105/100) ≈ 4.88%。
你可能会问:为什么比简单收益率小一点?嗯,这就是数学上的一个特性——对数收益率永远小于等于简单收益率,而且价格波动越大,差距越明显。
对数收益率的核心优势:时间可加性。一周的对数收益率,等于每天对数收益率之和。这在做时间序列分析时特别方便。
我个人习惯:做回测和统计分析时,一律用对数收益率。只有在跟客户汇报时,才转成简单收益率。
2.2 资产风险度量:方差与标准差
收益率算完了,接下来就是风险。风险怎么量化?最经典的就是方差和标准差。
方差衡量的是收益率偏离平均水平的程度。公式:
σ² = (1/n) * Σ(R_i - μ)²
标准差就是方差的平方根:σ = √σ²
为什么用标准差而不用方差?因为标准差的单位和收益率一样,都是百分比,更直观。比如某只股票日收益率标准差是2%,意思就是每天涨跌2%左右是常态。
我在项目中遇到过一个问题:用样本方差还是总体方差?
如果你用的是历史数据去估计未来的风险,记得用样本方差(分母是 n-1)。因为样本方差是无偏估计,能更好地反映真实波动。
# Python 代码示例
import numpy as np
# 假设有5天的收益率数据
returns = np.array([0.02, -0.01, 0.03, 0.01, -0.02])
# 样本方差(分母 n-1)
sample_var = np.var(returns, ddof=1)
sample_std = np.std(returns, ddof=1)
print(f"样本方差: {sample_var:.6f}")
print(f"样本标准差: {sample_std:.4f}")
2.3 协方差与相关系数矩阵
单资产的风险算完了,那多个资产之间怎么衡量关系?这就轮到协方差和相关系数出场了。
2.3.1 协方差
协方差衡量两个资产收益率一起变动的方向:
Cov(R_A, R_B) = (1/n) * Σ(R_A,i - μ_A)(R_B,i - μ_B)
协方差为正:两个资产同涨同跌。协方差为负:一个涨,另一个跌。
但协方差有个问题:它的数值大小没有统一标准。比如股票A和B的协方差是0.02,这算大还是小?没法判断。
2.3.2 相关系数
相关系数把协方差标准化到[-1, 1]之间:
ρ = Cov(R_A, R_B) / (σ_A * σ_B)
- ρ = 1:完全正相关,两个资产走势一模一样
- ρ = -1:完全负相关,一个涨另一个必然跌
- ρ = 0:不相关,两个资产独立波动
我曾经犯过一个错:以为相关系数低就一定能分散风险。后来发现,市场暴跌时,所有资产的相关系数都会趋近于1。这就是所谓的「危机时刻,相关性趋同」。嗯,这个坑我替你们踩过了。
2.3.3 协方差矩阵
当你有N个资产时,把所有两两之间的协方差放在一个矩阵里,就是协方差矩阵:
Σ = [[σ₁², Cov₁₂, ..., Cov₁ₙ],
[Cov₂₁, σ₂², ..., Cov₂ₙ],
...
[Covₙ₁, Covₙ₂, ..., σₙ²]]
这个矩阵是马科维茨模型的核心输入。你想想看,没有它,你就没法做投资组合优化。
2.4 本章知识体系
下面这张图帮你理清本章的核心逻辑:
2.5 实战中的注意事项
最后,分享几个我在实战中总结的经验:
- 数据频率选择:日收益率波动大,但信息丰富;周收益率更平滑,适合长期分析。我一般先用日数据做分析,最后汇报时转成年度化数据。
- 异常值处理:股票停牌、分红、拆股都会导致收益率异常。记得做数据清洗,不然协方差矩阵会失真。
- 滚动窗口:别用全部历史数据算一个固定的协方差矩阵。市场在变,我习惯用滚动12个月的数据,每月更新一次。
- 年度化处理:日标准差乘以√252(交易日天数),就得到年化标准差。这个转换在汇报时很常用。
公众号:蓝海资料掘金营,微信deep3321