← 返回量化与 AI 投研概念库

追踪止损:止损线跟着价格往上爬,代价是你会被反复扫出去

最后更新 2026-08-18
R2 · 注意风险

有一种亏法,比直接亏钱更让人睡不着:你买进去之后它涨了三成,你舍不得走,觉得还能再看看;然后它掉头,一路跌回你的成本附近,你最后平推出场。整个过程你一分钱没亏,但你清清楚楚知道自己丢掉了什么。

复盘的时候你会想:要是有个办法,让我在它涨的时候不用做决定,在它掉头的时候自动把我踢出去,就好了。

这个想法有名字,叫追踪止损。它听上去像是把上面那个遗憾一次性解决掉——但它其实是拿一种痛苦换了另一种痛苦。换来的那种更隐蔽,也更贵。

先说人话:它到底是件什么事

想象你在斜坡上往上搬一个很重的箱子。你搬不动一整段,只能挪一小截歇一会儿。歇的时候箱子会往下溜,所以你每往上挪一段,就在箱子后面塞一块楔子。

关键在于这块楔子怎么用:它只往上塞,绝不往下退。 箱子往上走了一米,楔子就跟上一米;箱子往下溜一点,楔子待在原地不动。结果就是箱子随时都能继续往上,但永远不可能一路滑回坡底——你挪上去的每一段,都被身后那块楔子锁住了。

这就是追踪止损的全部。价格创出新高,你的退出线跟着往上抬;价格往回走,退出线纹丝不动。价格哪天真的跌到那条线上,你就出场,出场的位置比你的成本高。

日常里更贴切的一个东西是棘轮扳手——顺着一个方向能拧,反着拧就空转。追踪止损就是给你的退出位置装了个棘轮。

现在说代价,还是那个箱子。楔子塞得离箱子越近,你锁住的高度越多,可箱子正常的晃动就会坐到楔子上——你以为它开始滑坡了,其实它只是晃了一下,而你已经收工走人。楔子塞得远一点,箱子能自由晃动了,可它真滑起来的时候,你也会多丢一大截。

近了被误伤,远了保不住。这个矛盾没有解,只有取舍。 后面讲的所有东西,都是围着这一句转的。

投资层:它替你解决的其实是人性问题

先把「止损」这个词说清楚。止损是你事先定好的一条退出线,价格跌到那里就走人,用来给单次错误封一个上限(术语卡在 /glossary/zhisun/)。普通止损那条线定死在成本下方某个位置,从头到尾不动。追踪止损唯一的改动是:让这条线跟着你已经赚到的部分往上爬。

这个小改动解决的问题,其实不在市场那边,在你这边。

行为金融里有个观察叫处置效应——人赚了就急着跑,亏了反而死扛。赚一点就落袋,是因为怕这点浮盈飞了;亏了不肯认,是因为卖掉就等于承认自己错了。这两件事合起来的效果是:你所有的赢单都小,所有的输单都大。Vibe-Trading 的交易日志技能把它列在行为偏差诊断表的第一行,配的改进建议也很直接:把止损写死,同时别让盈利的仓位过早兑现。

追踪止损正好把这两头都从你手上拿走了。亏损那一端有硬底,不许你死扛;盈利那一端有一条只涨不跌的线,不许你手一抖就跑,也不许你把浮盈全部还回去。

它还有一层承认现实的意思:它压根不打算帮你卖在顶部。 它的假设是你抓不到顶——没人抓得到——所以它只保证一件事:从最高点往回走了约定的幅度,就出场。你注定会在顶部之下卖出,注定要交出一段回撤,这段回撤是这套办法的门票钱,不是它出了故障。

想不清楚「止损应该怎么定」这件事本身的,先看 /quant/zhisun-lianghua/,那篇讲的是止损从心理问题变成数学问题的过程;追踪止损是那个数学问题的一个变体,不是替代品。

代价:为什么震荡行情里你会被反复扫出去

这条只涨不跌的线,跟价格之间隔多远,叫追踪距离。整个取舍就压在这个距离上。

价格每天都在无意义地晃动。有一部分晃动跟趋势没关系,就是买卖双方你来我往的正常噪音——这个品种今天没什么事发生,它也会上下摆几个点。你的追踪距离如果比这个噪音还窄,那么在任何一段横盘里,价格只要正常晃一圈,就会碰到那条线,你被扫出局。第二天它又晃回去了,趋势一点没变,只有你不在场上。

这就是所谓「被扫」。它不是判断错了,是你的容错空间设得比噪音还小。

麻烦在于,噪音的宽度自己会变。同一个品种,安静的时候一天动一两个点,热闹起来一天能窜五六个点。你按安静时期定的追踪距离,一到热闹时期就全线失效——止损位在那里没动,市场的正常呼吸幅度已经翻了两三倍。所以按固定百分比追踪,本质上是在假设波动率恒定,而波动率恰恰是最不恒定的东西。

对付这一层的常规思路,是让追踪距离跟着波动幅度走:波动大就放宽,波动小就收紧。度量波动幅度的现成工具是 ATR,/indicator/atr/ 那篇把它讲透了——它不判方向,只回答「这个品种最近一根 K 线平均能晃多大」,追踪止损需要的正是这个数。freqtrade 的策略回调文档里也确实给了这种写法的示例:把止损位设在当前价格下方若干倍 ATR 处,随着价格上移重算。

还有另一类做法,是把追踪线交给一个自己会往前爬的指标。抛物线转向指标(SAR)就是干这个的,它给每根 K 线配一个点位,趋势走得越久点位贴得越紧。/indicator/sar/ 那篇专门讲了它在横盘里被反复打脸的老毛病——那个毛病和这里说的「被扫」是同一件事的两种说法,只是换了个计算方式而已。换指标换不掉这个矛盾。

系统层:真实系统里它长什么样

到这里再看代码,你会发现前面讲的每一句话都能在里面找到对应的一行。

只上不下,是一行注释

freqtrade 把止损位的调整收在交易对象的一个方法里。它先根据传进来的当前价格算出一个新的止损位,然后决定要不要采纳。核心判断是这样的:

# stop losses only walk up, never down!
if (
    allow_refresh
    or (higher_stop and not self.is_short)
    or (lower_stop and self.is_short)
):

那行注释就是整个概念的定义:止损只往上走,从不往下走。做空的时候方向反过来,逻辑是同一个。除了明确要求「刷新」的那条特殊路径,任何试图把止损位往回挪的调用,都会走到 else 分支里,日志上留一句「保持当前止损」,什么也不做。

这一行是概念,剩下的全是配套。 你脑子里那个「等它涨回来我再走」的念头,之所以危险,正是因为它做的是这行代码明确禁止的事——把线往下挪。

四种形态,其实在回答同一个问题

freqtrade 的文档把止损列成了几种模式:固定不动的、跟着涨的、进入盈利后换一个更紧的距离跟、以及只有到了某个盈利门槛才开始跟。对应的开关分别叫 trailing_stop(总开关)、trailing_stop_positive(盈利后启用的那个更紧的距离)、trailing_stop_positive_offset(切换的盈利门槛)、trailing_only_offset_is_reached(门槛之前干脆完全不跟)。

看着像四个功能,其实它们在回答同一个问题:从什么时候开始收紧,收多紧。

为什么要分阶段?因为刚建仓那会儿,你的浮盈是零,这时候收紧毫无意义——线一紧,任何一次正常回踩都会把你踢出去,而你连成本都没赚回来。等仓位跑出一段安全垫之后再收紧,代价才划得来。这就是「门槛」存在的理由:在没有利润可保护的阶段,不要为了保护利润付出被扫的代价。

代码里对应的判断很直白:

if not (self.trailing_only_offset_is_reached and bound_profit < sl_offset):
    if self.trailing_stop_positive is not None and bound_profit > sl_offset:
        stop_loss_value = self.trailing_stop_positive

盈利没到门槛就整段跳过,到了才换成那个更紧的追踪距离。

一个思维错误,被做成了启动失败

配置校验里有一条很值得看:如果切换后的追踪距离设了值,而那个盈利门槛小于等于它,程序直接报配置错误,拒绝启动。

这条规则背后是个纯粹的算术:假设你要求盈利到某个幅度才切换到新的追踪距离,而这个新距离比那个幅度还宽,那么切换的一瞬间,新算出来的止损位仍然在你的成本之下。你以为自己「锁住了利润」,实际上锁住的是一笔亏损。

工程上的处理方式很值得学:他们没有写进文档让你注意,而是让这种配置根本跑不起来。一个容易犯的思维错误,被翻译成了一次启动失败。

报告里那个单独的退出原因

交易对象上有个布尔标记,一旦止损位被追踪调整过就置真。它唯一的用处是在成交出场的时候分岔:退出原因到底记成普通止损,还是记成追踪止损。枚举里这两个是分开的两项。

别小看这个区分。它意味着你事后能数出来——这一批交易里,有多少笔是撞上原始止损(判断错了),有多少笔是被那条爬上来的线扫掉的(判断没错,但没扛住震荡)。这是衡量追踪止损代价的唯一诚实办法。 只看总收益,你永远分不清自己是被市场教育了,还是被自己的参数扫了。

顺带一个反直觉的限制,文档里写得很清楚:追踪止损开启、并且止损位已经被调整过之后,改配置也改不动这笔单子的止损了。棘轮转过去就转过去了,连你自己都退不回来。

回测里的追踪止损,格外会骗人

这是本篇最想让你带走的部分。追踪止损是所有交易规则里,回测成绩最不可信的一类,原因不在规则本身,在于历史数据的分辨率不够。

回测就是拿历史数据把一套规则从头走一遍,看看会赚会亏(细节见 /quant/huice-shi-shenme/)。问题是,回测通常用的是 K 线——每根 K 线只有四个数:开盘、最高、最低、收盘。这四个数里没有先后顺序。 一根日线告诉你今天最高摸到过 10.8、最低探到过 9.6,但没告诉你是先冲高再回落,还是先砸坑再拉起来。

对追踪止损来说,这个顺序恰恰是生死攸关的。先冲高,止损线跟着抬上去了,再回落就可能被打掉;先砸坑,止损线还在低位,那一坑没打到线,然后冲高、收在高位——同一根 K 线,两种顺序,一种出场一种没出场,结果天差地别。

freqtrade 的回测假设文档把这件事摊开来写了,几条规则值得逐条读:

假设 内容 为什么这么定
顺序 追踪止损按「先到最高价、再到最低价」处理 先用高点抬止损,再用抬过的止损判断低点是否触发
保护 普通止损按「先到最低价」处理 优先保护资本,宁可判定为已止损
一致性 新止损位只有在这根 K 线的最低价之下才被采纳 否则它在这根 K 线内就该被触发了,不能算作有效抬升
建仓根 建仓那根 K 线上就触发追踪的,用门槛价而不是最高价起算 避免在无从得知的路径上取最有利的那个点
优先级 目标收益的退出规则先于追踪止损结算 同一根 K 线上两者都成立时,收益被封在目标值

注意这里同时出现了两个方向相反的假设:追踪止损假设高点先到(对持仓不利,止损被抬到更容易触发的位置),普通止损假设低点先到(对持仓不利,更容易被判定出局)。两条都朝着「宁可保守」的方向靠,但保守的定义在两处是反的。这不是自相矛盾,是刻意的——因为路径未知,只能挑那个不会高估成绩的解释。

第三条尤其精巧:新止损位必须低于这根 K 线的最低价才被采纳。否则的话,程序等于用「这根 K 线整体的高点」去抬止损,再假装这个止损在同一根 K 线内没被触发——那就是拿后面才知道的信息给前面的决策打掩护,属于典型的前视偏差。

实用的推论有两个。 一是:如果你的追踪止损成绩在换成更细的数据周期之后明显变差,那说明它原来赚的是「K 线内路径假设」的钱,不是市场的钱。二是:追踪距离越窄,你的成绩对这套假设越敏感,因为窄距离意味着 K 线内部的每一次晃动都可能触发,而那些晃动在数据里根本看不见。

还有一层是 A 股特有的。Vibe-Trading 的规则库里记着:涨跌停会阻止止损执行——跌停封板的时候,卖单挂在那里没人接,你的止损位在图上被穿过去了,成交没有发生。回测里那条平滑的退出线,在封板那天是不存在的。跳空也是同理:开盘价直接低于你的止损位,成交发生在更低的地方,而不是线上。追踪止损保护的是「已经赚到的利润」这个概念,它保护不了「一定能在这个价位出去」这件事。

参数优化出来的追踪止损,多半是假的

freqtrade 的参数寻优模块(hyperopt,就是让程序自动去搜一组让历史成绩最好的参数)里,有一块专门的追踪止损搜索空间,把追踪距离、盈利门槛、要不要等门槛都当成可调旋钮一起搜。

它有个实现细节挺见功力:搜索的不是门槛本身,而是门槛与追踪距离之间的差值,再把门槛加出来。这样前面那条「门槛必须大于追踪距离」的约束天然永远成立,搜索器不会浪费时间去试非法组合。工程上很漂亮。

但也正因为漂亮,它更容易让人放松警惕。追踪止损的参数是回测成绩最敏感的一组旋钮——把追踪距离收窄一点点,历史曲线可能立刻好看很多,因为它恰好躲开了历史上那几次特定的回撤。躲开的是那几次,不是「回撤」这类事情。这就是把噪音当成了规律,/quant/guonihe-jiqi/ 讲的正是这个。

🚧 避坑

搜出来的追踪距离,是历史噪音的形状,不是市场的性质。 判断它是不是幻觉,有个不难做的检查:把这组参数往两边各挪一点,看成绩是缓慢下降还是断崖式垮掉。缓慢下降说明你站在一片平地上,断崖说明你站在一根针尖上——而针尖的位置,是历史数据凿出来的,未来不会再有同一根针。

失效边界与常见误用

把追踪止损当止盈用。 它俩解决的是相反的问题:止盈是「到了这个价我就走,不管后面涨不涨」,追踪止损是「我不知道该在哪走,所以让它自己跟着涨,直到跌回来为止」。前者接受少赚,后者接受回吐。想同时要「不少赚」和「不回吐」,是想要一件不存在的东西。

同时开着追踪止损和自定义止损逻辑。 freqtrade 的文档明确建议二选一,理由是两者会打架——追踪机制把止损往上推的时候,你的自定义函数可能压根不想推,而由于「只上不下」的规则,被推上去的那个值还退不回来。两个都想管同一件事,结果是谁也管不好。

忘了杠杆会放大追踪距离的实际含义。 文档把止损定义成「这笔交易愿意承担的风险」,所以杠杆越高,同样的止损比例对应的价格波动越小。在高杠杆下,一个看起来很宽松的追踪距离,实际留给价格的呼吸空间可能窄得可笑——正常的日内晃动就足以把你扫出去。

以为它能对抗跳空。 追踪止损只是一条线,线不产生成交。价格从线的上方直接跳到线的下方,你拿到的是跳空之后的价格。

在脑子里做反向追踪。 「等它涨回我成本我就走」「这个位置我再给它一次机会」——这两句话做的事,是把那条线往下挪。它是代码里被 else 分支明确拒绝的操作,也是绝大多数大亏的起点。你脑子里那个棘轮没人给你装,得自己装。

用它掩盖入场问题。 一套入场规则本身没有正期望,套上追踪止损也不会有。追踪止损改变的是收益的分布形状——把赢单拉长、把输单截短,它不能把一个负期望的规则变成正的。

小结

  • 追踪止损 = 让退出线跟着价格往上爬,只上不下;它解决的是「浮盈全部还回去」和「赚一点就急着跑」这两件事,本质上是把人性问题机械化。
  • 它的代价是被震荡反复扫出局。追踪距离窄了被噪音误伤,宽了保不住利润,这个矛盾没有解,只有取舍;而噪音的宽度自己会变,所以固定百分比的追踪距离迟早会失配。
  • 真实系统里,整个概念浓缩成一行「止损只往上走」的判断;分阶段收紧(门槛之前不跟、门槛之后换更紧的距离)是为了避免在没有利润可保护时白付被扫的代价;「门槛必须大于追踪距离」这条被做成了启动校验,让一个思维错误跑不起来。
  • 回测里它格外会骗人:K 线只有四个数,看不出高点低点谁先发生,而这个顺序对追踪止损是生死攸关的。成绩对「K 线内路径假设」越敏感(追踪距离越窄越敏感),越应该怀疑。
  • 退出原因把「普通止损」和「追踪止损」分开记,是衡量它代价的唯一诚实办法——数一数有多少笔是被自己的参数扫掉的。
  • 参数寻优能把追踪距离搜得很漂亮,但漂亮的那个值多半是历史噪音的形状。挪一点看看是缓降还是断崖。

一句话记住这篇:你可以规定自己愿意还回去多少,但你规定不了市场什么时候停下来——把这两件事搞混,就是追踪止损坑人的全部原因。

本文所引源码与文档均来自上述快照版本,是阅读代码得出的机制说明,不是运行结果;文中出现的参数名与行为请以你手上那个版本为准。回 量化与 AI 投研概念库 看其它概念各自在说什么,或到 风险管理卷R 看止损与仓位的完整方法论;本站内容为投资教育,不构成任何投资建议,边界见 免责声明

内容有错、看不懂、或想看下一篇?告诉我们 →

本文为投资教育整理,不构成任何投资建议;不荐个股/基金、不预测点位、不承诺收益。关键数据与结论请结合权威来源自行验证,并见风险免责声明