第二十三讲:基差交易的绩效评估——夏普比率、卡玛比率、索提诺比率、最大回撤、胜率与盈亏比
做基差交易,光会开仓平仓可不够。你得知道自己的策略到底行不行。
我见过不少交易员,账户红彤彤一片,还觉得自己挺牛。问他为什么赚钱,他说“感觉对了”。问他亏在哪,他说“运气不好”。
这不行。做量化交易,必须用数字说话。
今天我们就聊聊,怎么用几个核心指标,给基差交易策略做一次“体检”。
一、先看这张图:绩效评估的核心框架
别急着看公式。先搞清楚,我们到底要评估什么?
说白了,就是三件事:赚了多少、冒了多大险、性价比如何。
二、收益维度:胜率与盈亏比
先看最简单的两个指标。
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.5:策略可以继续跑
- 卡玛比率 > 2:回撤控制得不错
- 最大回撤 < 15%:风险可控
- 胜率 + 盈亏比:两者要平衡,别偏科
如果某个指标亮红灯,别急着改策略。先找原因:是市场环境变了?还是参数过拟合了?
好了,这一讲的内容就到这里。记住:评估策略,就像体检。不能只看体重,还得看血压、血糖、血脂。全面了解,才能走得更远。
公众号:蓝海资料掘金营,微信deep3321