29、订单流交易中的绩效评估:收益率、最大回撤、胜率、盈亏比、索提诺比率
做订单流交易的朋友,经常会问我一个问题:
「我每天盯盘累死累活,到底怎么才算真的赚钱了?」
嗯,这个问题问得好。光看账户余额涨了,不代表你水平高。我见过太多人,一个月赚了30%,下个月一把亏光。说白了,绩效评估不是算总账,而是拆解你的交易行为。
今天我们就来聊聊订单流交易里,那几个绕不开的核心指标。我个人习惯把这五个指标称为「交易体检五项」——收益率、最大回撤、胜率、盈亏比、索提诺比率。
收益率:最直观,也最容易被骗
收益率谁都会算。期末净值减去期初净值,再除以期初净值。但这里有个坑——你用的是算术收益率还是几何收益率?
举个例子:你本金10万,第一周赚50%,变成15万。第二周亏50%,变成7.5万。算术平均收益率是0%,但你的钱少了2.5万。这就是算术收益率的欺骗性。
我在项目中遇到过一位交易员,他给我看月度收益表,每个月都是正收益,年化60%。我仔细一算,他用的算术平均,而且中间有几次大额出入金。实际几何收益率只有12%。
R = (期末净值/期初净值)^(1/n) - 1。
最大回撤:你的心脏承受力测试
最大回撤,说白了就是从最高点到最低点,你亏了多少。这个指标直接反映你的风控水平。
订单流交易有个特点:行情突变时,流动性瞬间枯竭。你可能看到订单簿上挂单很厚,但真到止损时,滑点能让你多亏好几个tick。
我记得有一次做股指期货的订单流策略,回测时最大回撤只有5%。实盘跑了两个月,遇到一次闪崩,最大回撤直接干到12%。为什么?因为回测用的是理想成交价,实盘有滑点和延迟。
胜率:别被高胜率忽悠了
很多新手喜欢追求高胜率,觉得10笔交易赢8笔就是高手。你想想看,如果每笔赢1%,但输的那两笔各亏10%,你的账户还是亏的。
订单流交易里,胜率往往不会太高。因为我们在抓的是「不平衡」和「吸收」这些微观结构信号,这些信号本身就有一定的随机性。我自己的订单流策略,胜率一般在45%到55%之间。
为什么会这样?因为订单流交易的本质是赚取流动性溢价,而不是预测方向。你是在跟做市商抢饭吃,胜率能过50%已经不错了。
盈亏比:真正的利润引擎
盈亏比,也叫赔率。就是你平均每笔盈利除以平均每笔亏损。这个指标比胜率重要得多。
举个例子:
| 交易员 | 胜率 | 盈亏比 | 期望值 |
|---|---|---|---|
| A | 60% | 1:1 | 0.2 |
| B | 40% | 3:1 | 0.6 |
看到没?B的胜率只有40%,但期望值是A的三倍。订单流交易里,我建议把盈亏比放在第一位。我个人习惯是至少做到2:1,低于这个比例的策略,我基本不会实盘。
索提诺比率:比夏普更懂你
夏普比率大家可能都听过,但它有个问题——它把上涨波动和下跌波动一视同仁。你想想看,上涨波动是好事啊,为什么要惩罚它?
索提诺比率就聪明多了。它只考虑下行波动,也就是亏损的那部分波动。公式是:
索提诺比率 = (策略收益率 - 无风险利率) / 下行标准差
下行标准差怎么算?只取收益率低于目标收益率(通常是0)的那些数据点,计算它们的标准差。
我在项目中遇到过一位做期权做市的同行,他的夏普比率只有0.8,但索提诺比率高达3.5。为什么?因为他经常小赚,偶尔大亏,但大亏的次数极少。夏普比率被那些小赚的波动拉低了,但索提诺比率真实反映了他的风控能力。
把这些指标串起来
光看单个指标没用,得综合看。我一般用这个顺序:
- 先看最大回撤——能不能接受?不能就pass。
- 再看索提诺比率——下行风险控制得好不好?
- 然后看盈亏比——有没有正的期望值?
- 最后看胜率和收益率——作为辅助参考。
说白了,活得久比赚得快更重要。订单流交易是持久战,不是百米冲刺。
def performance_report(equity_curve, risk_free_rate=0.03):
# 收益率
total_return = equity_curve[-1] / equity_curve[0] - 1
# 最大回撤
peak = np.maximum.accumulate(equity_curve)
drawdown = (equity_curve - peak) / peak
max_drawdown = drawdown.min()
# 胜率与盈亏比
trades = get_trades_from_equity(equity_curve)
win_rate = len([t for t in trades if t > 0]) / len(trades)
avg_win = np.mean([t for t in trades if t > 0])
avg_loss = abs(np.mean([t for t in trades if t < 0]))
profit_loss_ratio = avg_win / avg_loss if avg_loss != 0 else np.inf
# 索提诺比率
daily_returns = np.diff(equity_curve) / equity_curve[:-1]
downside_returns = daily_returns[daily_returns < 0]
downside_std = np.std(downside_returns)
sortino = (np.mean(daily_returns) - risk_free_rate/252) / downside_std
return {
'total_return': total_return,
'max_drawdown': max_drawdown,
'win_rate': win_rate,
'profit_loss_ratio': profit_loss_ratio,
'sortino_ratio': sortino
}
嗯,代码很简单,但很实用。你把它集成到你的交易系统里,每天跑一遍,心里就有底了。
知识体系图
下面这张图,是我自己梳理的订单流交易绩效评估框架。你可以把它当成一张检查清单。
这张图的核心逻辑就是:先控风险,再谈收益。你按这个顺序去评估你的策略,基本不会出大问题。
交易系统化学习资料 微信Strategy888888