3、风险与收益度量:收益率计算、标准差与方差、夏普比率、最大回撤、VaR与CVaR

各位同学,咱们今天聊点实在的。做资产配置,说白了就是在风险和收益之间找平衡。你想想看,如果只看收益不看风险,那跟闭着眼睛开车有什么区别?我做了这么多年量化,见过太多人栽在「收益幻觉」上。今天我就把几个最核心的度量工具掰开揉碎了讲给你听。

3.1 收益率计算:别被数字骗了

收益率这东西,看着简单,其实坑不少。我个人习惯用对数收益率,为什么?因为它有可加性,时间序列分析时特别方便。

简单收益率 vs 对数收益率

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

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

我在项目中遇到过一件事:有个同事用简单收益率算年化收益,结果因为复利效应,算出来的数字比实际高了一大截。嗯,这里要注意——多期收益率一定要用几何平均,别用算术平均。

# 计算年化收益率
import numpy as np

daily_returns = [0.001, -0.002, 0.003, ...]  # 日收益率序列
total_return = np.prod([1 + r for r in daily_returns]) - 1
annual_return = (1 + total_return) ** (252 / len(daily_returns)) - 1

小技巧:用对数收益率做回归分析时,残差更接近正态分布。这是我踩过坑之后才学乖的。

3.2 标准差与方差:风险的「体温计」

标准差衡量的是收益率的波动性。说白了,就是看你的资产组合「上蹿下跳」得有多厉害。方差是标准差的平方,两者本质一样,但标准差有量纲,更容易理解。

你想想看,如果一个策略的年化收益是20%,但标准差是30%,那这策略其实挺危险的。为什么?因为按照正态分布,你有16%的概率亏损超过10%。

注意:标准差假设收益率服从正态分布,但实际市场有肥尾效应。我曾经用标准差做风控,结果遇到黑天鹅事件,直接被打穿。所以别迷信标准差,它只是个参考。

# 计算年化波动率
import numpy as np

daily_returns = np.array([...])
daily_vol = np.std(daily_returns, ddof=1)
annual_vol = daily_vol * np.sqrt(252)  # 252个交易日

3.3 夏普比率:性价比之王

夏普比率 = (组合收益率 - 无风险利率) / 标准差。它衡量的是每承担一单位风险,能获得多少超额收益。我个人习惯用夏普比率来筛选策略,低于1的基本不看。

经验值参考

夏普比率评价
< 0.5一般,不如买国债
0.5 - 1.0还行,可以接受
1.0 - 2.0优秀,值得配置
> 2.0小心,可能是过拟合

我曾经见过一个策略,夏普比率高达3.5,结果实盘一个月就亏了20%。为什么?因为回测时用了未来函数。所以夏普比率高不一定是好事,得结合其他指标看。

3.4 最大回撤:投资者的「心理底线」

最大回撤,就是从最高点到最低点的最大跌幅。这个指标比标准差更直观,因为它直接告诉你「最多亏多少钱」。我一般用最大回撤来设定止损线。

举个例子,如果一个策略的最大回撤是15%,那你的心理承受能力至少得能扛住这个幅度。不然的话,跌到一半你就割肉了,后面涨回来也跟你没关系。

# 计算最大回撤
def max_drawdown(equity_curve):
    peak = np.maximum.accumulate(equity_curve)
    drawdown = (equity_curve - peak) / peak
    return np.min(drawdown)

避坑指南:我曾经用日频数据算最大回撤,结果忽略了盘中回撤。实际上,盘中回撤可能比日频回撤大得多。所以建议用高频数据算,或者至少用日内最低价。

3.5 VaR与CVaR:风险管理的「最后防线」

VaR(Value at Risk)是在给定置信水平下,未来一段时间内的最大可能损失。比如95% VaR是100万,意思是有95%的概率亏损不超过100万。但VaR有个致命缺陷——它不关心尾部风险。

CVaR(Conditional VaR)弥补了这个缺陷。它计算的是超过VaR那部分损失的平均值。说白了,就是「如果最坏的情况发生了,平均会亏多少」。

VaR vs CVaR

指标含义缺点
VaR最大可能损失(给定概率)忽略尾部风险
CVaR尾部损失的平均值计算更复杂

我个人习惯用CVaR做风控。为什么?因为VaR只能告诉你「95%的情况下不会亏超过X」,但CVaR能告诉你「如果真亏了,平均会亏多少」。你想想看,哪个更有用?

# 计算VaR和CVaR
import numpy as np

returns = np.array([...])
confidence = 0.95

# VaR
var = np.percentile(returns, (1 - confidence) * 100)

# CVaR
cvar = returns[returns <= var].mean()

注意:VaR和CVaR都假设历史会重演。但市场不会简单重复。我经历过2015年股灾,那段时间VaR模型基本失效。所以一定要结合压力测试。

3.6 知识体系总览

下面这张图把本章的核心逻辑串起来了。你可以看到,从收益率计算出发,逐步深入到风险度量,最后用夏普比率做综合评估。

风险与收益度量知识体系 资产配置优化 收益率计算 标准差与方差 夏普比率 最大回撤 VaR与CVaR 综合应用:风险预算、投资组合优化、压力测试 每个指标都有其适用场景,建议组合使用

好了,这一章的内容就这些。记住,风险度量不是目的,控制风险才是。下次你看到某个策略收益很高,先别急着跟投,拿这几个指标过一遍再说。

专注资料整理