4、最大回撤控制:回撤的定义与测量、回撤修复时间、动态止损与回撤控制

聊到资金管理,绕不开的一个话题就是「回撤」。

我见过太多策略,回测曲线漂亮得像教科书,一上实盘就崩。为什么?因为回测里的回撤是「纸面回撤」,实盘里的回撤是「真金白银的煎熬」。今天我们就来把这层窗户纸捅破。

4.1 回撤的定义与测量

先给个最朴素的定义:回撤,就是从最近的高点,跌到当前低点的幅度。说白了,就是「你账户里最多亏了多少」。

但这里有个坑——很多人只看「最大回撤」这一个指标。我个人习惯,至少看三个维度:

  • 绝对回撤:从最高点到最低点的金额差。比如账户从100万跌到80万,绝对回撤就是20万。
  • 相对回撤:绝对回撤 / 最高点净值。上面那个例子,相对回撤就是20%。
  • 当前回撤:从最近一次创出新高后,到现在的跌幅。这个指标最实时,也最扎心。

我在项目中遇到过一位交易员,他只看最大回撤,觉得15%以内都能接受。结果有一次连续回撤了12%,他以为「还没到极限」,结果第13天直接崩到18%。为什么?因为他忽略了「回撤的连续性」——连续回撤和单次回撤,对人的心理冲击完全不同。

核心公式:

回撤率 = (当前净值 - 历史最高净值) / 历史最高净值 × 100%

注意:这里的「历史最高净值」是滚动计算的,不是固定值。

嗯,这里要注意:回撤不是亏损。亏损是相对于成本价,回撤是相对于最高点。你100万入场,涨到150万再跌回120万,亏损是0(还赚20万),但回撤是20%。

4.2 回撤修复时间

这个指标,很多人不重视,但我认为它比回撤幅度本身更重要。

回撤修复时间,就是从回撤的最低点,重新涨回前高所用的时间。为什么重要?因为时间是有成本的。

举个例子:

  • 策略A:最大回撤20%,修复时间3个月
  • 策略B:最大回撤15%,修复时间12个月

你选哪个?我选A。因为3个月后你就能重新开始赚钱,而B策略虽然回撤小,但你要熬一整年。这一年里,你的资金被「锁死」在回撤中,机会成本极高。

我的经验法则:

回撤修复时间超过6个月的策略,除非年化收益超过30%,否则直接放弃。我曾经踩过这个坑——一个策略回撤修复用了11个月,年化才12%,算下来还不如买理财。

怎么计算修复时间?很简单:

# 伪代码示例
def calc_recovery_time(equity_curve):
    peak = equity_curve[0]
    recovery_days = []
    for i, value in enumerate(equity_curve):
        if value > peak:
            peak = value
        elif value < peak * 0.9:  # 回撤超过10%
            # 找到修复到前高的日期
            for j in range(i, len(equity_curve)):
                if equity_curve[j] >= peak:
                    recovery_days.append(j - i)
                    break
    return np.mean(recovery_days) if recovery_days else 0

你想想看,如果回撤修复时间越来越长,说明什么?说明策略的「弹性」在变差。这时候就要警惕了,可能是市场环境变了,也可能是策略本身在退化。

4.3 动态止损与回撤控制

固定止损?那是新手干的事。真正的量化交易,用的是动态止损

什么叫动态止损?就是止损线不是固定的,而是随着账户净值的变化、市场波动率的变化、策略状态的变化而调整。

我常用的几种动态止损方法:

  1. 移动止损(Trailing Stop):止损线跟随最高点上移。比如设定回撤5%就止损,那么当净值从100万涨到120万,止损线就从95万上移到114万。
  2. 波动率止损:根据当前市场的波动率(比如ATR)来设定止损宽度。波动率大的时候,止损宽一点;波动率小的时候,止损窄一点。
  3. 时间止损:如果持仓超过一定时间还没盈利,强制平仓。这个在期权策略里特别有用——因为时间价值每天都在衰减。

避坑指南:

我曾经犯过一个错误:把移动止损设得太紧,结果频繁被假突破扫出场。后来我加了一个「确认机制」——只有连续两个收盘价跌破止损线,才执行止损。虽然多亏了0.5%,但避免了80%的假信号。

回撤控制的核心,其实就一句话:别让亏损失控。怎么做到?

  • 设定总账户的「硬止损线」——比如总回撤超过20%,全部清仓休息一周
  • 每个策略单独设止损——一个策略亏完了,不影响其他策略
  • 回撤加速时,主动减仓——如果连续3天回撤超过2%,仓位减半

我个人习惯,会在交易系统中嵌入一个「回撤监控模块」:

class DrawdownController:
    def __init__(self, max_drawdown=0.15, recovery_threshold=0.05):
        self.max_drawdown = max_drawdown
        self.recovery_threshold = recovery_threshold
        self.peak = None
        self.current_drawdown = 0
        
    def update(self, current_value):
        if self.peak is None or current_value > self.peak:
            self.peak = current_value
        self.current_drawdown = (self.peak - current_value) / self.peak
        
        if self.current_drawdown > self.max_drawdown:
            return "STOP_ALL"  # 全部停止
        elif self.current_drawdown > self.max_drawdown * 0.8:
            return "REDUCE_50%"  # 减半仓
        else:
            return "NORMAL"

这个模块每天跑一次,一旦触发「STOP_ALL」信号,系统自动把所有持仓平掉,然后发邮件通知我。嗯,我承认,有时候半夜被邮件吵醒挺烦的,但总比爆仓强。

4.4 知识体系总览

下面这张图,是我自己整理的回撤控制知识框架。你可以把它当成一个「检查清单」——每次设计策略时,对着这张图过一遍,基本不会漏掉关键点。

最大回撤控制体系 回撤定义与测量 • 绝对回撤:金额差 • 相对回撤:百分比 • 当前回撤:实时监控 • 最大回撤:历史极值 公式:回撤率 = (峰值-谷值)/峰值 回撤修复时间 • 修复天数计算 • 平均修复时间 • 修复时间趋势 • 机会成本评估 经验:修复时间 > 6月需警惕 动态止损与回撤控制 • 移动止损 • 波动率止损 • 时间止损 • 硬止损线 核心:别让亏损失控 三者联动:测量 → 评估 → 控制,形成闭环 实战检查清单: □ 是否定义了三种回撤指标? □ 是否计算了回撤修复时间? □ 是否设置了动态止损规则? □ 是否有硬止损线? □ 回撤加速时是否自动减仓? □ 是否监控修复时间趋势?

这张图里,三个模块是环环相扣的。你先要测量回撤,然后评估修复时间,最后用动态止损来控制。缺了任何一个环节,资金管理都会出问题。

最后说一句:回撤控制不是用来「消灭回撤」的,而是用来「管理回撤」的。没有回撤的策略,往往也没有收益。我们要做的,是把回撤控制在可接受的范围内,然后耐心等待修复。

本章核心要点:

  • 回撤要分三个维度看:绝对、相对、当前
  • 回撤修复时间比回撤幅度更重要
  • 动态止损是回撤控制的核心手段
  • 建立回撤监控模块,自动化执行

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