第二十三讲:基差交易的绩效评估——夏普比率、卡玛比率、索提诺比率、最大回撤、胜率与盈亏比

做基差交易,光会开仓平仓可不够。你得知道自己的策略到底行不行。

我见过不少交易员,账户红彤彤一片,还觉得自己挺牛。问他为什么赚钱,他说“感觉对了”。问他亏在哪,他说“运气不好”。

这不行。做量化交易,必须用数字说话。

今天我们就聊聊,怎么用几个核心指标,给基差交易策略做一次“体检”。

一、先看这张图:绩效评估的核心框架

别急着看公式。先搞清楚,我们到底要评估什么?

基差交易绩效评估核心框架 绩效评估 收益维度 年化收益率 盈亏比 胜率 风险维度 最大回撤 波动率 综合指标 夏普比率 卡玛比率 索提诺比率 收益、风险、综合,三个维度缺一不可

说白了,就是三件事:赚了多少、冒了多大险、性价比如何。

二、收益维度:胜率与盈亏比

先看最简单的两个指标。

2.1 胜率

胜率 = 盈利交易次数 / 总交易次数 × 100%

这个指标最直观。但我要提醒你——别迷信高胜率

我见过一个交易员,胜率高达85%,最后账户还是亏的。为什么?因为他每次赚1块钱就跑,亏一次能亏10块钱。这种策略,胜率再高也没用。

避坑指南: 我曾经见过一个新手,为了追求高胜率,把止损设得特别窄。结果呢?频繁被扫止损,手续费交了一大堆。胜率是高了,但账户缩水了。

2.2 盈亏比

盈亏比 = 平均盈利金额 / 平均亏损金额

这个指标和胜率是“夫妻档”,得一起看。

胜率 盈亏比 策略效果
30% 3:1 可能赚钱
50% 1:1 勉强保本
70% 0.5:1 大概率亏钱

我个人习惯,做基差交易时,盈亏比至少要做到2:1以上。因为基差交易本身波动不大,如果盈亏比太低,根本覆盖不了交易成本。

三、风险维度:最大回撤

最大回撤,就是账户从最高点跌到最低点的幅度。

举个例子:你的账户最高到过100万,后来跌到70万,最大回撤就是30%。

核心观点: 最大回撤决定了你能在这个市场活多久。我见过太多人,策略收益不错,但一次大回撤就把本金亏光了。

做基差交易,我个人建议最大回撤控制在15%以内。超过20%,你就得停下来好好想想了。

四、综合指标:三大比率

这些才是真正考验功力的地方。

4.1 夏普比率

夏普比率 = (策略收益率 - 无风险利率) / 策略波动率

这个指标衡量的是:每承担一单位风险,能获得多少超额收益。

一般来说,夏普比率大于1算及格,大于2算优秀。我做基差交易这些年,能稳定做到1.5以上的策略,已经算不错了。

我的经验: 基差交易的夏普比率通常比趋势跟踪策略高。因为基差回归的规律性更强,波动更小。但要注意,别只看夏普比率,还得看回撤。

4.2 卡玛比率

卡玛比率 = 年化收益率 / 最大回撤

这个指标更“接地气”。它直接告诉你:你冒了多大的回撤风险,换来了多少收益。

我个人觉得,卡玛比率比夏普比率更适合基差交易。为什么?因为基差交易最怕的就是大回撤,卡玛比率正好抓住了这个痛点。

举个例子:

  • 策略A:年化收益20%,最大回撤10%,卡玛比率=2
  • 策略B:年化收益25%,最大回撤20%,卡玛比率=1.25

你选哪个?我肯定选A。回撤小,睡得安稳。

4.3 索提诺比率

索提诺比率和夏普比率很像,但只考虑下行波动率。

说白了,夏普比率把上涨的波动和下跌的波动一视同仁。但索提诺比率认为:上涨波动是好事,不该算作风险。

这个指标对基差交易特别有意义。因为基差交易经常出现“慢涨急跌”的情况。用索提诺比率,能更准确地评估下行风险。

五、实战:用Python计算这些指标

光说不练假把式。我给你一段代码,可以直接用。

import numpy as np
import pandas as pd

def calculate_performance_metrics(returns, risk_free_rate=0.03):
    """
    计算基差交易策略的绩效指标
    returns: 每日收益率序列(pandas Series)
    """
    # 年化收益率
    annual_return = returns.mean() * 252
    
    # 年化波动率
    annual_vol = returns.std() * np.sqrt(252)
    
    # 夏普比率
    sharpe = (annual_return - risk_free_rate) / annual_vol
    
    # 最大回撤
    cumulative = (1 + returns).cumprod()
    running_max = cumulative.cummax()
    drawdown = (cumulative - running_max) / running_max
    max_drawdown = drawdown.min()
    
    # 卡玛比率
    calmar = annual_return / abs(max_drawdown)
    
    # 索提诺比率(只考虑下行波动)
    downside_returns = returns[returns < 0]
    downside_vol = downside_returns.std() * np.sqrt(252)
    sortino = (annual_return - risk_free_rate) / downside_vol
    
    # 胜率与盈亏比
    win_rate = len(returns[returns > 0]) / len(returns)
    avg_win = returns[returns > 0].mean()
    avg_loss = abs(returns[returns < 0].mean())
    profit_loss_ratio = avg_win / avg_loss if avg_loss != 0 else np.inf
    
    return {
        '年化收益率': f'{annual_return:.2%}',
        '年化波动率': f'{annual_vol:.2%}',
        '夏普比率': f'{sharpe:.2f}',
        '最大回撤': f'{max_drawdown:.2%}',
        '卡玛比率': f'{calmar:.2f}',
        '索提诺比率': f'{sortino:.2f}',
        '胜率': f'{win_rate:.2%}',
        '盈亏比': f'{profit_loss_ratio:.2f}'
    }

# 使用示例
# 假设你有一组日收益率数据
# returns = pd.Series([...])
# metrics = calculate_performance_metrics(returns)
# print(metrics)
小技巧: 我建议你每周跑一次这个代码。别等亏钱了才想起来看指标。养成习惯,每周五收盘后跑一遍,心里有数。

六、怎么用这些指标?

指标不是摆设,得会用。

  1. 夏普比率 > 1.5:策略可以继续跑
  2. 卡玛比率 > 2:回撤控制得不错
  3. 最大回撤 < 15%:风险可控
  4. 胜率 + 盈亏比:两者要平衡,别偏科

如果某个指标亮红灯,别急着改策略。先找原因:是市场环境变了?还是参数过拟合了?

重要提醒: 别只看一个指标。夏普比率高,不代表策略好。我见过夏普比率2.5的策略,最大回撤40%。你敢用吗?反正我不敢。

好了,这一讲的内容就到这里。记住:评估策略,就像体检。不能只看体重,还得看血压、血糖、血脂。全面了解,才能走得更远。


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