3、风险度量指标:最大回撤、夏普比率、索提诺比率、VaR与CVaR
做高频交易,说白了就是在刀尖上跳舞。你策略赚得再多,一次黑天鹅就能让你回到解放前。所以,风险度量这件事,我把它看得比策略本身还重。
今天咱们就来聊聊五个最核心的风险指标:最大回撤、夏普比率、索提诺比率、VaR 和 CVaR。嗯,这五个指标,我几乎每天都会盯着看。
3.1 最大回撤:你的心理承受底线
最大回撤,英文叫 Max Drawdown。它衡量的是:从净值最高点,跌到最低点,你最多亏了多少。
公式很简单:
最大回撤 = (峰值 - 谷值) / 峰值
举个例子。你的账户净值从 100 万涨到 150 万,然后跌到 110 万。那么最大回撤就是 (150 - 110) / 150 = 26.7%。
我个人习惯,会把最大回撤分成三档:
- 5% 以内:稳健型策略,适合大资金
- 5% - 15%:进取型策略,适合中等资金
- 15% 以上:激进型策略,小心脏受不了
3.2 夏普比率:收益与风险的性价比
夏普比率,说白了就是:你每承担一单位风险,能换来多少超额收益。
公式:
夏普比率 = (策略收益率 - 无风险利率) / 策略收益率的标准差
无风险利率,我一般用国债收益率或者银行隔夜拆借利率。高频交易里,这个值通常很小,但你不能忽略。
夏普比率的几个参考值:
| 夏普比率 | 评价 |
|---|---|
| < 0.5 | 不太行,风险调整后收益偏低 |
| 0.5 - 1.0 | 及格,可以接受 |
| 1.0 - 2.0 | 优秀,很多对冲基金的目标 |
| > 2.0 | 极好,但小心过拟合 |
3.3 索提诺比率:只关心下行风险
夏普比率有个问题:它把上涨的波动和下跌的波动一视同仁。但咱们做交易的,谁在乎上涨波动啊?涨得越多越好。
索提诺比率就是来解决这个问题的。它只考虑下行风险,也就是亏损的波动。
公式:
索提诺比率 = (策略收益率 - 无风险利率) / 下行标准差
下行标准差怎么算?只取收益率低于目标收益率(通常是 0 或无风险利率)的那些数据,计算标准差。
我个人更偏爱索提诺比率。为什么?因为高频交易里,很多策略的收益分布是偏态的——大部分时间小赚,偶尔大亏。夏普比率会被那些小赚的波动拉低,但索提诺比率能更真实地反映风险。
3.4 VaR:在险价值
VaR,全称 Value at Risk。它回答的问题是:在 95% 或 99% 的置信水平下,我最多会亏多少钱?
举个例子。95% VaR 是 10 万,意思就是:有 95% 的把握,你的亏损不会超过 10 万。反过来,有 5% 的概率,你会亏超过 10 万。
计算 VaR 有三种常用方法:
- 历史模拟法:直接用历史数据的分位数。简单粗暴,但依赖历史。
- 参数法:假设收益率服从正态分布,用均值和标准差算。快,但假设太强。
- 蒙特卡洛模拟:随机生成大量路径,统计亏损分布。准,但计算量大。
代码示例(历史模拟法):
import numpy as np
def calculate_var(returns, confidence_level=0.95):
"""
计算 VaR
:param returns: 收益率序列
:param confidence_level: 置信水平,默认 95%
:return: VaR 值
"""
sorted_returns = np.sort(returns)
index = int((1 - confidence_level) * len(sorted_returns))
var = -sorted_returns[index]
return var
# 示例
daily_returns = np.random.normal(0.001, 0.02, 1000)
var_95 = calculate_var(daily_returns, 0.95)
print(f"95% VaR: {var_95:.4f}")
3.5 CVaR:比 VaR 更进一步
VaR 有个致命缺陷:它只告诉你「最多亏多少」,但没告诉你「如果亏超了,平均会亏多少」。
CVaR,也叫条件 VaR 或期望损失,就是来补这个窟窿的。它计算的是:在亏损超过 VaR 的那些情况下,平均亏损是多少。
公式:
CVaR = E[损失 | 损失 > VaR]
还是刚才那个例子。95% VaR 是 10 万,CVaR 可能是 15 万。意思就是:如果你真的亏超了,平均会亏 15 万。
我个人认为,CVaR 比 VaR 更实用。为什么?因为 VaR 只关心那个「门槛」,而 CVaR 关心的是「门槛后面的地狱有多深」。高频交易里,一次极端亏损可能直接爆仓,所以 CVaR 能让你更清楚地看到尾部风险。
代码示例(CVaR 计算):
def calculate_cvar(returns, confidence_level=0.95):
"""
计算 CVaR
:param returns: 收益率序列
:param confidence_level: 置信水平,默认 95%
:return: CVaR 值
"""
sorted_returns = np.sort(returns)
index = int((1 - confidence_level) * len(sorted_returns))
tail_returns = sorted_returns[:index]
cvar = -np.mean(tail_returns)
return cvar
# 示例
cvar_95 = calculate_cvar(daily_returns, 0.95)
print(f"95% CVaR: {cvar_95:.4f}")
3.6 五个指标的关系与选择
这五个指标,不是让你全用的。你得根据策略类型来选。
| 指标 | 适用场景 | 我的建议 |
|---|---|---|
| 最大回撤 | 所有策略,尤其是资金管理 | 必看,这是你的止损底线 |
| 夏普比率 | 收益分布对称的策略 | 经典指标,但别迷信 |
| 索提诺比率 | 收益分布偏态的策略 | 高频交易首选 |
| VaR | 监管报告、风险限额 | 合规必备,但不够全面 |
| CVaR | 尾部风险控制 | 比 VaR 更实用,我强烈推荐 |
3.7 知识体系图
下面这张图,帮你理清这五个指标的关系:
好了,这五个指标就聊到这儿。记住,风险度量不是目的,控制风险才是。工具再好,也得靠人来用。
公众号:蓝海资料掘金营,微信deep3321