量化交易员的 X 光机:MAE/MFE 如何一眼看穿你的策略“内伤”?

0 阅读8分钟

你还在用“胜率”和“盈亏比”评判策略?太嫩了。
真正让散户和私募拉开差距的,是这两张图:MFE(最大潜盈)和 MAE(最大潜亏)。
今天,我把聚宽回测里花了 3 个月才磨出来的诊断模块直接送你,顺便手把手教你解读。
—— 一个在实盘里踩过无数坑的量化交易员


先看一个扎心的真相

很多回测跑出来曲线漂亮的策略,一上实盘就跪。
为什么?因为回测报告的“最终盈亏”掩盖了持仓过程中的全部血腥挣扎

举个真实例子(来自用户代码里的真实数据):
某策略买入了某只股票,买入价 10 元,最后 10.5 元卖出,赚 5%。
很美好对不对?
但如果告诉你,这只股票在持仓期间先跌了 15%(MAE = -15%),然后才慢慢爬回 10.5 元呢?

  • 账户一度浮亏 15%,你抗不抗得住?
  • 如果当时有另一只股票在涨,你会不会提前割肉?
  • 实盘里,99% 的散户会在 –8% 时就止损出局,根本等不到那最后的 5% 盈利。

这就是策略的“内伤”——最终盈利掩盖了“死扛”的代价。
而 MAE 和 MFE 正是帮你看穿这层内伤的 X 光机。


什么是 MAE / MFE?(大白话版)

  • MFE(Maximum Favorable Excursion):买入后,在持仓周期内,股价曾经涨到过的最高幅度
    比如上面例子,最高涨到过 +12%,那么 MFE = 12%。

  • MAE(Maximum Adverse Excursion):买入后,在持仓周期内,股价曾经跌到过的最低幅度
    上面例子,最低跌到 -15%,那么 MAE = -15%。

关键点
MFE 衡量的是“你本来最多能赚多少”,MAE 衡量的是“你最多曾亏多少”。
如果最终盈利远小于 MFE,说明止盈效率低,坐过山车没卖
如果最终盈利为正但 MAE 却很深,说明买入点太差,靠死扛换回来的盈利,资金使用效率极低。


实战:用代码生成的 MFE / MAE 散点图诊断策略

用户提供的聚宽代码已经集成了 calc_and_plot_mae_mfe 函数,运行后会生成两张经典的散点图。
我来告诉你到底怎么看

第一张图(左图):MFE图 —— 诊断你的“止盈/卖出”能力

  • MFE的意思是“最大潜盈”:也就是你买入这只股票后,在卖出之前,它最多曾经浮盈过百分之几(图中的横轴 X轴)。
  • 纵轴(Y轴) 是你最后真正卖出时,落袋为安的实际盈亏

🔍 怎么看你的这张图?

  1. 看那条黑色的斜虚线:这条线叫“神仙线”。如果一个点落在这条线上,说明你买入后,在它涨到最高点的那一瞬间,你精准把它卖了,一分钱利润都没回撤。
  2. 看你的红点(赚钱的单子):你的红点距离虚线有比较大的距离。
    • 举个例子:横轴在 40% 的位置,往下看对应的纵轴大概在 20% 左右。这意味着:这只股票你买入后,最多曾经涨了 40%,但你没卖,硬生生看着它跌回来,最后只赚了 20% 走人。利润回撤了一半!
  3. 看右下角的蓝点(赚钱变亏钱的单子):在横轴 10%~15% 的区间,有很多蓝点。这意味着:这些股票你明明曾经浮盈过 10% 多,但你没止盈,最后拿成了亏损(跌到了 0 轴以下)割肉出局。

最常见的“傻白甜”情况

大量蓝点(亏损交易)散落在右下角——利润回撤区
典型特征:

股票曾经涨了 10%、15%,你没卖,最后跌下来,倒亏 5% 离场。

诊断结论:你的策略缺乏动态止盈,或者跟踪止盈阈值太宽。
优化方向:加入回撤跟踪止盈,比如“盈利超过 8% 后,从最高点回撤 3% 就卖出”。

另一种糟糕情况

红点和蓝点大量集中在左上方(MFE 很小但最终盈利很大)——这很少见,一般是日内高频或者 T+0。


第二张图(右图):MAE图 —— 诊断你的“买点/止损”能力

  • MAE的意思是“最大潜亏”:也就是你买入这只股票后,在卖出之前,它最多曾经把你套牢过百分之几(图中的横轴 X轴,越往左套得越深)。
  • 纵轴(Y轴) 依然是你最后的实际盈亏。

🔍 怎么看你的这张图?

  1. 看红点的集中区域:非常棒!你绝大多数赚大钱的红点,都紧紧贴在最右侧(X轴 0% 到 -5% 之间)。
    • 这意味着:你的策略买点极其精准! 股票一买进去,几乎没有怎么跌(最多跌两三个点),就直接起飞了。你做这套策略的心态会非常好,因为极少需要忍受深度套牢的折磨。
  2. 看蓝点的底部边界:你的蓝点在向下延伸到 -10% 到 -15% 左右时,就基本没有了,形成了一个水平的切面。
    • 这意味着:你现在的策略里应该已经有了明确的止损线,一旦跌破某个阈值,系统就自动切断了亏损,没有让亏损无限放大(没有出现 -30%、-40% 的点),这是非常成熟的风控。
  3. 看左上角的红点(死扛回本区):有极少数几个红点,横轴在 -15% 甚至 -20% 左右。这意味着这几笔交易买入后暴跌被深套,但你一直“装死”死扛着没卖,最后居然被你熬到了赚钱出局。

需要警惕的危险信号

第一象限左上角(MAE 很深,比如 –15%,但最终盈利为正)。
这意味着:策略经常抄底抄在半山腰,先被套 15%,然后死扛到涨回来赚一点

实盘中会出现两个致命问题:

  1. 资金利用率低:钱长时间被套在亏损仓里,错过其他机会。
  2. 心态爆炸:连续几次扛单后,大概率会忍不住割在最底部。

优化方向

  • 优化买入过滤,比如加入均线多头排列、量价确认等信号。
  • 或者严格止损,宁愿降低胜率也要避免深度回撤。

另一个极端:右下角(MAE 不深,但最终亏损)

说明买点其实可以,但卖点太差。可能是过早止损或者止盈太贪。


代码里的“自动极端交易复盘”功能

用户代码里还有一个 plot_extreme_trades_bs 函数,会自动提取所有单笔盈亏超过 ±5% (自行设置你可以设置成10或者20)的交易,并画出该股票在买卖点附近的 K 线图(含成交量、MA5/10/20)。

这个功能极其强大——它会让你亲眼看到:

  • 那笔 +20% 的大赚交易,是不是刚好买在了起爆点?
  • 那笔 –10% 的大亏交易,是不是追在了最高位?

实盘中,我会把这两张散点图和 k 线图打印出来贴在墙上,每周复盘一次。
如果你发现自己策略的 MFE 始终比最终利润大很多,或者 MAE 动不动就 –10%,那你就该立刻停止实盘,回去改策略。


一个真实的改进案例

我去年优化一个“小市值 + 资金流入”策略,原始回测年化 85%,但模拟盘一直跑不出来。
跑了一遍 MAE/MFE 散点图,发现:

  • 70% 的盈利交易 MFE > 15%,但最终盈利平均只有 6% —— 严重坐过山车。
  • 亏损交易的 MAE 平均 –9%,但最终只亏 –4% —— 说明止损太松,很多本该 –5% 止损的扛到了 –12% 才割。

于是加入了两个模块:

  1. 浮动止盈:盈利 > 8% 后,启动移动回撤止损(回撤 5% 卖出)。
  2. 硬止损:任何持仓,浮亏达到 –6% 立即平仓。

改完后,年化下降到 28%,但最大回撤从 22% 降到 9%,夏普率从 0.9 升到 1.4
更重要的是,实盘持仓体验舒服多了,不再“每天吃救心丸”。


现在,轮到你了

我已经把完整的聚宽代码贴在开头了(可以直接复制到聚宽研究环境运行)。
你只需要:

  1. 把你的回测 ID 填进 backtest_config 列表。
  2. 运行,等待拉取日线数据(第一次会慢点)。
  3. 重点看:
    • MFE 散点图:红点离虚线多远?
    • MAE 散点图:左边红点是不是太多?
    • 极端交易 K 线图:大赚大亏的买卖点是否合理?

如果你看完图后发现自己策略“内伤严重”,别慌——这不是失败,而是进阶的开始。
顶尖量化交易员和普通爱好者的区别,从来不是有没有圣杯,而是愿不愿意用显微镜审视每一笔交易的挣扎过程。

🎁 源码获取

请关注公众号,量化学习实战笔记。回复关键词:【回测分析工具

免责声明:

本账号所有量化策略和量化技术仅作技术交流和量化思路分享,不构成任何投资建议,据此操作风险自负,本人不承担任何直接或间接责任。股市有风险,入市需谨慎。

代码使用提示
本文代码基于聚宽平台。
注意:get_price 拉取日线数据可能较慢,建议先跑一个小范围回测测试。
如果你有多个回测,可以把 ID 都放进 backtest_config,会合并分析。
MAE/MFE 函数计算的是以买入日开盘价为基准的波动,因为无法精准获取盘中实际成交时的分钟级价格,但作为趋势判断足够用。

觉得有用?点赞点“♥”,让更多人摆脱“幸存者偏差式”的回测自嗨。