3、风险度量指标:最大回撤、夏普比率、索提诺比率、VaR与CVaR

做高频交易,说白了就是在刀尖上跳舞。你策略赚得再多,一次黑天鹅就能让你回到解放前。所以,风险度量这件事,我把它看得比策略本身还重。

今天咱们就来聊聊五个最核心的风险指标:最大回撤、夏普比率、索提诺比率、VaR 和 CVaR。嗯,这五个指标,我几乎每天都会盯着看。

3.1 最大回撤:你的心理承受底线

最大回撤,英文叫 Max Drawdown。它衡量的是:从净值最高点,跌到最低点,你最多亏了多少。

公式很简单:

最大回撤 = (峰值 - 谷值) / 峰值

举个例子。你的账户净值从 100 万涨到 150 万,然后跌到 110 万。那么最大回撤就是 (150 - 110) / 150 = 26.7%。

我个人习惯,会把最大回撤分成三档:

  • 5% 以内:稳健型策略,适合大资金
  • 5% - 15%:进取型策略,适合中等资金
  • 15% 以上:激进型策略,小心脏受不了
⚠️ 注意: 最大回撤只看历史,不代表未来。我曾经见过一个策略,回测最大回撤只有 3%,结果实盘第一天就亏了 8%。为什么?因为回测时没考虑流动性冲击。

3.2 夏普比率:收益与风险的性价比

夏普比率,说白了就是:你每承担一单位风险,能换来多少超额收益。

公式:

夏普比率 = (策略收益率 - 无风险利率) / 策略收益率的标准差

无风险利率,我一般用国债收益率或者银行隔夜拆借利率。高频交易里,这个值通常很小,但你不能忽略。

夏普比率的几个参考值:

夏普比率 评价
< 0.5 不太行,风险调整后收益偏低
0.5 - 1.0 及格,可以接受
1.0 - 2.0 优秀,很多对冲基金的目标
> 2.0 极好,但小心过拟合
💡 我的经验: 高频交易里,夏普比率能做到 1.5 以上,就已经是顶级策略了。别信那些回测报告里动不动 3.0、4.0 的,大概率是数据挖掘出来的。

3.3 索提诺比率:只关心下行风险

夏普比率有个问题:它把上涨的波动和下跌的波动一视同仁。但咱们做交易的,谁在乎上涨波动啊?涨得越多越好。

索提诺比率就是来解决这个问题的。它只考虑下行风险,也就是亏损的波动。

公式:

索提诺比率 = (策略收益率 - 无风险利率) / 下行标准差

下行标准差怎么算?只取收益率低于目标收益率(通常是 0 或无风险利率)的那些数据,计算标准差。

我个人更偏爱索提诺比率。为什么?因为高频交易里,很多策略的收益分布是偏态的——大部分时间小赚,偶尔大亏。夏普比率会被那些小赚的波动拉低,但索提诺比率能更真实地反映风险。

3.4 VaR:在险价值

VaR,全称 Value at Risk。它回答的问题是:在 95% 或 99% 的置信水平下,我最多会亏多少钱?

举个例子。95% VaR 是 10 万,意思就是:有 95% 的把握,你的亏损不会超过 10 万。反过来,有 5% 的概率,你会亏超过 10 万。

计算 VaR 有三种常用方法:

  1. 历史模拟法:直接用历史数据的分位数。简单粗暴,但依赖历史。
  2. 参数法:假设收益率服从正态分布,用均值和标准差算。快,但假设太强。
  3. 蒙特卡洛模拟:随机生成大量路径,统计亏损分布。准,但计算量大。

代码示例(历史模拟法):

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}")
⚠️ 避坑指南: 我曾经用参数法算 VaR,结果实盘时连续两天亏损都超过了 VaR 值。后来一查,发现收益率分布根本不是正态的——尾部太厚了。所以,高频交易里,我建议用历史模拟法或蒙特卡洛。

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 更实用,我强烈推荐
🔑 核心要点: 做高频交易,我每天必看的是最大回撤和 CVaR。最大回撤告诉我「现在亏了多少」,CVaR 告诉我「如果继续亏,最坏情况会怎样」。这两个指标配合使用,基本能覆盖大部分风险场景。

3.7 知识体系图

下面这张图,帮你理清这五个指标的关系:

风险度量指标知识体系 风险度量指标 最大回撤 从峰值到谷值的最大亏损 夏普比率 收益/总风险 索提诺比率 收益/下行风险 VaR(在险价值) 最多亏多少? CVaR(条件VaR) 亏超了平均亏多少? 高频交易中,建议重点关注:最大回撤 + CVaR
💡 实战建议: 别只看一个指标。我习惯把五个指标放在一个仪表盘上,每天扫一眼。如果某个指标突然恶化,比如最大回撤接近阈值,或者 CVaR 突然翻倍,那就得立刻检查策略是不是出了问题。

好了,这五个指标就聊到这儿。记住,风险度量不是目的,控制风险才是。工具再好,也得靠人来用。


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