Skip to content

9.3 回撤分析:回撤持续多久、恢复多久

课前导读

本节目标

学完能解决什么困惑:不只知道最大回撤是多少,还能拆出回撤从哪里开始、跌到哪里、持续多久、多久才修复。

适合基础:已经理解资金曲线、最大回撤、pandas 的 cummax 和简单表格记录的读者。

难度:intermediate

预计用时:约 40 分钟

上一节我们把最大回撤看作体检报告里的重要风险指标。

但最大回撤只有一个数字。

它告诉你最深的坑有多深。

却不告诉你这段下坡走了多久。

也不告诉你从谷底爬回山顶用了多久。

本节用“爬山下坡”的类比来理解回撤分析。

投资中的资金曲线像一条山路。

新高是新的山顶。

从山顶往下走,就是回撤。

走到最低点,是谷底。

重新回到原来的山顶,才算恢复。

真正折磨人的,往往不只是下跌深度。

还有下跌持续的时间和等待恢复的时间。


知识正文

一、用爬山下坡理解回撤

想象你和同学一起爬山。

海拔从 1000 米爬到 1200 米时,大家很兴奋。

随后山路下坡,海拔降到 1100 米。

你没有回到起点。

但你已经离刚才的山顶低了 100 米。

这就是回撤的直觉。

资金曲线也是一样。

账户从 1.00 涨到 1.20。

随后跌到 1.08。

它相对历史高点 1.20 下跌了 10%。

这个 10% 就是当前回撤。

如果之后资金回到 1.20 或更高,这段回撤才结束。

关键直觉

回撤不是“亏没亏本金”的问题,而是“离过去最高点有多远”的问题。

二、回撤的四个核心术语

回撤分析至少要拆成四个问题。

术语通俗解释回答的问题
回撤深度从历史高点跌到低点的幅度这次下坡最深有多深
回撤开始资金离开历史高点后的日期从哪天开始不再创新高
回撤持续时间从离开高点到重新回到高点的时间这段压力持续多久
恢复时间从谷底到重新回到高点的时间从最难受的位置爬回来多久

这四个词听起来接近。

但它们表达的投资体验不同。

深度回答“疼不疼”。

持续时间回答“疼了多久”。

恢复时间回答“最难之后多久才缓过来”。

如果只看最大回撤,容易低估后两个问题。

三、公式:先找到历史高点

回撤计算的第一步,是记录每一天之前见过的最高资金。

这个最高资金常被称为历史高点。

你可以把它理解成“到目前为止爬到过的最高海拔”。

公式很简单:

=1

如果当前资金等于历史高点,当前回撤就是 0。

如果当前资金低于历史高点,当前回撤就是负数。

例如历史高点是 1.20,当前资金是 1.08。

当前回撤就是 1.08 / 1.20 - 1 = -10%。

最大回撤就是整条资金曲线里最负的那个当前回撤。

四、回撤是一段事件,不只是一个点

很多新手把最大回撤当作一个点。

例如“最大回撤 -18%”。

但对投资者来说,回撤更像一段事件。

它有起点。

它有谷底。

它有恢复日。

它还有持续天数。

一段 -15% 的回撤,如果 5 个交易日就恢复,体验可能还可以接受。

另一段 -15% 的回撤,如果 120 个交易日才恢复,心理压力完全不同。

所以专业读回测时,会把回撤事件列成表。

而不是只写一个最大回撤数字。

五、A 股案例:同样深度,不同难熬程度

假设有两条策略资金曲线。

策略甲最大回撤都是 -12%。

策略乙最大回撤也都是 -12%。

看起来它们风险一样。

但细看过程并不同。

策略甲从高点跌到谷底用了 4 个交易日,又用 6 个交易日恢复。

策略乙从高点跌到谷底用了 30 个交易日,又用 80 个交易日恢复。

对新手来说,策略乙更难坚持。

因为每天都看到账户没有创新高,会不断怀疑规则是否失效。

在 A 股里,涨跌停、停牌和 T+1 还可能拉长恢复过程。

如果卖出信号出现时遇到跌停,回撤可能继续扩大。

如果持仓股票停牌,资金曲线可能暂时无法通过交易修正。

这就是为什么回撤分析必须结合交易边界。

风险提醒

回撤持续时间过长时,投资者容易临时改规则、提前放弃或反向追涨。回测报告必须让这种压力提前暴露出来。

六、用表格拆一段回撤

看下面这条假设资金曲线。

日期资金历史高点当前回撤
1 月 2 日1.00001.00000.00%
1 月 3 日1.04001.04000.00%
1 月 4 日1.03001.0400-0.96%
1 月 5 日0.98001.0400-5.77%
1 月 8 日0.95001.0400-8.65%
1 月 9 日0.97001.0400-6.73%
1 月 10 日1.04001.04000.00%
1 月 11 日1.06001.06000.00%

这段回撤从 1 月 4 日开始。

因为这一天资金低于此前高点 1.0400。

谷底出现在 1 月 8 日。

最大深度是 -8.65%。

恢复日是 1 月 10 日。

因为这一天资金重新回到 1.0400。

回撤持续时间可以记录为从 1 月 4 日到 1 月 10 日。

恢复时间可以记录为从 1 月 8 日到 1 月 10 日。

这比只写“-8.65%”更有教学价值。

七、pandas 计算当前回撤

先从最基础的当前回撤开始。

python
import pandas as pd

equity = pd.Series(
    [1.00, 1.04, 1.03, 0.98, 0.95, 0.97, 1.04, 1.06],
    index=pd.to_datetime(
        [
            "2024-01-02",
            "2024-01-03",
            "2024-01-04",
            "2024-01-05",
            "2024-01-08",
            "2024-01-09",
            "2024-01-10",
            "2024-01-11",
        ]
    ),
)

high_water_mark = equity.cummax()
drawdown = equity / high_water_mark - 1

result = pd.DataFrame(
    {
        "equity": equity,
        "high_water_mark": high_water_mark,
        "drawdown": drawdown,
    }
)

print(result)

cummax 是这段代码的关键。

它每天记录“到今天为止见过的最高资金”。

只要当前资金低于这个最高资金,回撤就是负数。

当资金重新等于或超过历史高点,回撤回到 0。

八、如何记录回撤事件

当前回撤是一列数据。

回撤事件是一张表。

你可以按下面的逻辑手工记录。

text
如果今天回撤等于 0,说明资金在历史高点。
如果昨天回撤等于 0,今天回撤小于 0,说明新回撤开始。
在回撤过程中,持续更新最低资金和最深回撤。
如果回撤重新等于 0,说明这段回撤恢复,记录结束日期。

这个伪代码比直接写复杂函数更适合新手。

因为它让你先理解“事件”的边界。

什么时候开始?

什么时候最深?

什么时候恢复?

每个问题都需要明确答案。

九、回撤记录表应该长什么样

一份合格的回撤记录表可以包含这些字段。

回撤编号开始日期前高资金谷底日期谷底资金最大深度恢复日期持续交易日恢复交易日备注
12024-01-041.04002024-01-080.9500-8.65%2024-01-1053示例

“备注”列不要空着。

你可以写当时市场环境。

例如指数下跌、持仓遇到跌停、信号延迟、成本放大、样本股票停牌。

这些备注帮助你区分两类问题。

第一类是市场正常波动。

第二类是规则或数据存在缺陷。

如果很多回撤都来自同一类原因,就值得回到规则里检查。

十、回撤分析里的三个误区

第一个误区,是只看最大回撤。

最大回撤很重要。

但第二大、第三大回撤也可能频繁发生。

如果策略每隔一两个月就回撤 -8%,新手也可能很难坚持。

第二个误区,是忽略未恢复回撤。

如果回测结束时资金还没有回到前高,这段回撤仍在进行中。

它不应该被轻轻带过。

第三个误区,是把回撤全归咎于市场。

市场下跌当然会影响资金曲线。

但如果你的规则在跌停日假设能卖出,在停牌日假设能调仓,那就是回测设置问题。

回撤表能帮助你把这些原因写清楚。

十一、从三重角度读回撤

从老师角度,回撤是训练学生风险感知的材料。

它让你知道“赚钱路上也会有下坡”。

从投资者角度,回撤是最真实的心理压力测试。

你需要问自己:如果账户从高点跌 15%,并且 60 个交易日没有恢复,我还能按规则行动吗?

从量化开发角度,回撤是检查回测流程的报警器。

异常深或异常快的回撤,可能来自行情,也可能来自数据错位、成本漏算或成交假设过于理想。

这三个角度合起来,回撤分析就不再只是一个负数。

它变成了资金曲线的病历。


交互实验室

练习:制作你的回撤记录表

请使用下面这条假设资金曲线。

日期资金
第 1 天1.0000
第 2 天1.0300
第 3 天1.0200
第 4 天0.9900
第 5 天0.9700
第 6 天1.0100
第 7 天1.0300
第 8 天1.0500
第 9 天1.0200
第 10 天1.0600

请完成三步。

第一步,为每一天计算历史高点和当前回撤。

第二步,找出所有回撤事件,不只找最大的一次。

第三步,填写下面的回撤记录表。

回撤编号开始日期前高资金谷底日期谷底资金最大深度恢复日期持续交易日恢复交易日你会如何处理
1待填待填待填待填待填待填待填待填待填
2待填待填待填待填待填待填待填待填待填

最后一列“你会如何处理”很重要。

不要只写“继续观察”。

请写得具体一点。

例如:检查是否遇到跌停、确认信号是否延后一日、复核成本是否扣除、记录是否仍在规则允许范围内。

可执行小任务

把你在 9.2 中使用的资金曲线拿出来。

不要重新写策略。

只做回撤分析。

输出一张回撤记录表。

如果回测结束时还有一段回撤没有恢复,请在恢复日期写“未恢复”。

这能训练你承认风险尚未结束,而不是用漂亮结论盖过去。


核心复盘

知识清单

  • [ ] 我知道当前回撤是当前资金相对历史高点的下跌幅度。
  • [ ] 我知道最大回撤只是最深的一次,不等于完整回撤分析。
  • [ ] 我能区分回撤深度、持续时间和恢复时间。
  • [ ] 我会用 cummax 计算历史高点,并用表格记录回撤事件。
  • [ ] 我会在 A 股语境下检查涨跌停、停牌、T+1 和滑点是否放大了回撤。

金句总结

回撤不是资金曲线上的一个负数,而是一段从山顶下坡、谷底等待、再爬回山顶的真实经历。

本文档仅供学习交流用途,不构成任何投资建议。股市有风险,入市需谨慎。