止盈:为什么它比止损难,因为你要亲手砍掉自己赚得最多的那一笔
两种痛,你多半都尝过。
一种是:赚了 8%,你想着落袋为安,卖了。三个月后你再打开那张走势图,它翻了一倍。你没亏钱,但你整整难受了一个季度。
另一种是:账面赚了 20%,你告诉自己再拿拿,说不定还有一段。然后它一路吐回来,最后你在 -5% 的位置认了。
于是你去找答案,看到的建议大同小异:「设个止盈点」「赚够就走」「分批出货」。这些话都不算错,但它们绕开了这件事最难的地方——止损和止盈,看起来是一对,实际上根本不是同一类问题。
先说人话:难在哪
先把两件事摆一起看。
止损,是在跟「亏损继续扩大」较劲。你和这条规则是一伙的——它替你砍掉的,是你本来就不想要的东西。执行止损难,难在心理上不愿承认自己错了,但至少你脑子里清楚:这刀该砍。
止盈不一样。你砍掉的,是你本来就想要的东西。而且越是赚得多的那一笔,越先被它砍掉。
换个生活里的场景。你在站台等车,来了一辆能到但要绕大半个城的公交。上,还是不上?上了,直达车可能两分钟后就到;不上,直达车可能四十分钟后才来,也可能今天压根不来。你手里没有时刻表,也没有任何人能告诉你后面还有没有车。
**止盈就是每天都在做这个决定,而且做完了永远能看到「另一条路会怎样」。**这就是它最折磨人的地方——止损做对了,你看到的是「幸好跑了」;止盈做对了,你看到的往往还是「早知道再拿拿」。人的反馈系统在这件事上是坏的。
投资层:三种止盈,各自在放弃什么
「该在哪走」没有标准答案,但常见的三条路各自放弃的东西,是能说清楚的。搞清楚这个,比记住任何一个数字都有用。
固定止盈:赚够 X% 就走
最直觉的一种。定一个百分比,到了就卖。
它的好处很实在:可执行、不纠结、不给情绪留缝。缺点也同样实在——它把你收益里最赚钱的那部分剪掉了。
这里有个反直觉的事实,值得慢慢想。绝大多数依赖趋势的做法,收益不是均匀摊在每笔交易上的,而是极少数几笔大赚,扛起了全部战绩,剩下的一大堆小赚小亏基本互相抵消。如果你设了固定止盈,那么问题来了:那几笔本来能翻倍的,会在赚到 X% 的那一刻被你卖掉;而那些注定要亏的,止盈根本管不着,它们照亏不误。
结果就是:**止盈只对赢的那一边生效,不对输的那一边生效。**你剪掉了收益分布的右尾,却一根汗毛都没碰左尾。胜率会变好看,因为小赚变多了;总收益却可能变差,因为那几笔本该撑起全局的大赚没了。
这不是说固定止盈一定不好。如果你做的是均值回归类的判断——认为价格偏离太多会回来——那么「回到常态就走」本身就是逻辑的一部分,右尾本来也不存在。**关键在于你的止盈方式,得和你赚钱的逻辑对得上。**逻辑靠右尾吃饭,就别用一把剪刀天天修右尾。
分批止盈:先卖一部分,剩下的继续拿
第二条路是折中:涨到第一档卖三分之一,第二档再卖三分之一,剩下的一路拿到某个退出信号。
它买的是什么?**是心理成本。**卖掉一部分之后,你对剩下那部分的容忍度会显著变高——因为最难受的那种「全部还回去」的场景已经被部分排除了。很多人拿不住盈利单,不是因为判断变了,是因为账面浮盈带来的焦虑到了顶。分批止盈是拿一部分收益去买这份安稳。
它放弃的是什么?**是纯粹性和可检验性。**一笔交易变成了三笔,每一笔的成本基准、收益率怎么算,全都变复杂了。更麻烦的是,分批之后你很难说清「这套方法到底行不行」——因为结果被你的分批节奏搅在一起了。后面讲系统层的时候,你会看到这个记账问题在真实回测框架里有多具体。
按波动率止盈:目标跟着行情的脾气走
第三条路不给固定百分比,而是让目标随波动幅度伸缩:这阵子行情躁,目标就放远;行情闷,目标就收近。
衡量「躁还是闷」最常用的工具是 ATR(平均真实波幅,意思是最近一根 K 线平均能晃多大的一个钱数)——它只量幅度不管方向,ATR 那篇把算法和常见误用讲得更细,这里只用它当输入。
这条路的道理是:一个平时一天晃 1% 的品种和一个一天晃 6% 的品种,用同一个「赚 5% 就走」,含义完全不同——前者是难得的一段行情,后者可能就是一天的正常噪音。用固定百分比,等于假设所有品种、所有时期的波动是一样的,而这个假设从来不成立。
它放弃的是确定性。目标价每天都在动,你没法提前告诉自己「涨到多少我就走」,只能交给程序算。而且波动率本身是滞后的——它描述已经发生的波动,不保证明天。
别把止盈的问题当成止损的问题来解。 常见的错法是「我把止损收紧一点,就等于变相止盈了」。不对:收紧止损改变的是你能承受多大的回撤,它作用在下跌上;止盈作用在上涨上。两者的输入、触发时机、心理机制全不一样。止损那一侧怎么从心理问题变成数学问题,止损那篇是正主;让止损跟着盈利往上爬的那种做法属于追踪止损,也是另一件事。术语卡见 止损。
系统层:四个真实系统,四种完全不同的答案
概念讲完,看它在真实系统里长什么样。有意思的是,这四个系统对「止盈」这件事的处理方式差别极大,甚至有一个根本没有止盈这个东西。
| 系统 | 它的止盈长什么样 | 背后的假设 |
|---|---|---|
| freqtrade 的 ROI 表 | 目标随持仓时间递减,越拿越低 | 时间本身是成本 |
| freqtrade 的仓位调整 | 允许分批减仓,但记账规则很硬 | 一笔交易可以有很多次退出 |
| Vibe-Trading 的谐波技能 | 目标价来自结构,分三档 | 走多远由形态决定,不由百分比决定 |
| qlib 的 Topk 轮动 | 没有止盈 | 卖不卖不看赚了多少,看还排不排得上号 |
做法一 · 让止盈目标随时间往下走
freqtrade 里最核心的止盈机制叫 ROI 表,配置成「持仓多少分钟 → 至少赚多少才走」的一张对照表。文档里的示例长这样(这是说明用的示例,不是推荐值):
"minimal_roi": {
"40": 0.0,
"30": 0.01,
"20": 0.02,
"0": 0.04
}
从下往上读:刚开仓时要赚够 4% 才走;拿了 20 分钟,门槛降到 2%;30 分钟降到 1%;到 40 分钟,只要不亏就走。
这张表背后的想法值得单独拎出来:**它把「拿得太久」本身当成一种坏消息。**如果一笔交易开进去半天没动静,那当初判断它会动的那个理由,多半已经不成立了。与其死等原定目标,不如降低要求先撤,把仓位腾出来。
代码里的实现干脆得出乎意料——从表里挑出所有「时长门槛 ≤ 已持仓时长」的档位,取其中最大的那个键,用它对应的门槛值:
roi_list = [x for x in self.minimal_roi.keys() if x <= trade_dur]
if roi_list:
roi_entry = max(roi_list)
min_roi = self.minimal_roi[roi_entry]
拿到门槛之后的判断只有一行:当前收益率超过它,就走。它不看你有没有创新高,不看形态,只看两个数——赚了多少、拿了多久。
这套机制还有个更激进的用法:把某一档的目标设成负数,意思是「到点无论盈亏一律清仓」。这时它已经不是止盈了,是时间止损——承认「这个判断的有效期已经过了」。
如果这张静态表不够用,框架还留了一个回调,让你按品种、按持仓时长、按开仓标签动态返回一个目标值,两者取更低的那个先触发。这里的设计取向很清楚:止盈门槛的默认方向是往下调,不是往上调。
顺带一提,若你完全不配这张表,框架会用一个高到几乎不可能触发的默认值,等于关掉止盈(这是当前的默认行为,可配置)。也就是说,止盈在这个系统里是你主动选择加上的约束,不是天生就有的。
做法二 · 分批止盈的记账,比你想的复杂
同一个框架允许你在持仓期间分批减仓。但它的文档里有几条规则,恰好把前面说的「分批止盈放弃了可检验性」落到了实处:
- **减仓不改变持仓均价。**你卖掉一半,剩下那一半的成本还是原来那个均价。
- **止损仍然按最初的开仓价算,不按均价算。**这条尤其容易踩——你分批加过仓、又分批减过仓,脑子里的「成本」早就变了,但系统里的止损基准没变。
- **部分退出时的收益率,是相对当时的持仓均价算的;而最后一笔全平时的收益率,是按整笔交易投入的总资金算的。**同一笔交易,中途那几个百分比和最后那个百分比,基准根本不是一回事。
文档里给的算例把这件事摊得很开:分几次买、分几次卖之后,「已实现收益」和「收益率」这两个数会一路变,而且中间某一步的收益率完全可能高于最终的收益率——不是算错了,是分母换了。
**分批止盈真正的代价在这里:你的绩效统计从此不再是一个干净的数。**你看到的平均收益率、胜率、盈亏比,全都掺进了你的分批节奏。想判断这套方法本身行不行,就得先把分批的影响剥出来,而这件事非常难。
文档里还有一句提醒值得抄下来:这类回调在实盘里会以很高的频率被反复调用,如果你的减仓条件写得松(比如「某指标低于某值就减一点」),它会在同一根 K 线里反复触发,直到把仓位削光。这不是止盈逻辑错了,是**「持续为真的条件」被当成了「发生一次的事件」**——这是所有分批逻辑的通病。
做法三 · 目标价来自结构,不来自百分比
Vibe-Trading 的谐波形态技能给出了第三种取向。它的止盈不写百分比,而是三个由形态本身推出来的位置:先看回撤的浅档,再看深档,最后看形态起点那一档。
这背后的假设和前两种完全不同:**价格能走多远,不由你想赚多少决定,由这段行情的结构决定。**你觉得该赚 10%,市场不会因为这个多给你一分。
同一份材料在讲另一类形态时也是同样的写法——止盈位设在某个前期高点上方,止损位设在某个中枢下方。全是位置,没有一个百分比。
这种做法天然就是分批的(三档目标对应分三次减),也天然有一个硬约束:**形态不成立的时候,它一个目标都给不出来。**它不是万能的止盈公式,它是「这类判断自带的退出定义」。这其实是个更普适的原则——**好的止盈通常不是外挂上去的一条规则,而是你入场理由的反面。**你因为什么进去,那个理由消失了你就该出来。
做法四 · 组合层面根本没有「止盈」
最值得琢磨的是 qlib 的做法。它有一个非常常用的组合策略:每个调仓日按模型打分排序,持有分数最高的那几只,每次换掉其中几只,用新的顶部候选补上。
翻遍这个策略的参数,你找不到任何一个和「赚多少走」有关的东西。有的是:持仓数量、每次换几只、卖出时挑哪几只(垫底的还是随机的)、最短持有天数、涨跌停时要不要交易。
**在这个视角里,「赚了多少」压根不是卖出的理由。**卖出的唯一理由是:它在最新的排序里掉出去了,或者有更值得占这个坑的标的。一只已经涨了很多的股票,只要还排在前面,就继续拿着;一只刚买进去就跌的,只要排名没掉,也不动。
这是「机会成本」思维的纯粹版本:仓位是稀缺的,你手里的坑就那么几个,唯一该问的问题不是「这笔赚够了吗」,而是「有没有更该占这个坑的」。
这两类系统的差别不是技术偏好,是它们对世界的假设不同。单笔交易型的系统假设一笔交易有明确的生命周期,所以需要定义终点;组合轮动型的系统假设持仓是流动的,终点这个概念本身就不存在,只有相对排名。你在为自己选止盈方式之前,先想清楚自己站在哪一边——很多纠结其实来自站错了队。
为什么止盈的回测数字更容易骗人
这一节是本篇最想让你带走的东西。同一份回测报告里,止盈那部分的数字,可信度天然低于止损那部分。原因有三层。
**第一层:K 线里的「触及」不等于「成交」。**回测框架看到的是一根 K 线的四个数——开、高、低、收。它不知道这根 K 线里价格是怎么走的。freqtrade 的做法是:如果这根 K 线的最高价够到了止盈目标,就当作你在目标价成交了,并且用「不能超出这根 K 线范围」作为兜底,把成交价夹在最低价和最高价之间。文档还专门说明了一种情况:如果最低价对应的收益已经高于你的止盈目标,那成交价会取那个更高的值——因为你不可能在 K 线之外成交。
**这是个偏乐观的假设。**现实里止盈通常靠限价单实现,价格摸到你的价位不代表轮得到你成交——前面还排着队。而止损那一侧的性质相反:跌破就走,通常是市价,触及基本一定成交(代价是滑点)。**一乐观一悲观,落在同一份报告里,止盈的贡献就被系统性地高估了。**这不是某个框架写得不好,任何只拿到「开高低收」四个数的回测都必须做这类假设,区别只在于它有没有把假设写在文档里让你看见。
**第二层:多个退出条件撞在同一根 K 线上,谁先执行是「假设」,不是事实。**这份文档把评估顺序写得很明白:退出信号排最前,然后是止损,然后是 ROI 止盈,最后才是追踪止损。它还特意点出一个后果——因为止损排在止盈前面,回测里「止损离场」的笔数往往比实盘更多。
更微妙的一句是:ROI 止盈的优先级高于追踪止损,因此收益被「封顶」在 ROI 那个位置。这句话把本篇开头那个矛盾说得再清楚不过——**在这个系统里,止盈就是天花板,追踪止损就是地板,天花板永远先生效。**你无法既设一个 5% 的止盈、又指望追踪止损帮你吃到 30%。这不是 bug,是必然。
**第三层:止盈参数天生是过拟合的重灾区。**文档里有一句大白话:如果你把止盈设成 1%,那就别指望这套方法能赚超过 1%,因为每笔到 1% 就走了;反过来设成 55%,那大概率永远碰不到。
听起来是废话,危险恰恰在这里。当你拿止盈参数去做优化搜索时,它是所有参数里最容易凭空刷高胜率的那一个:把止盈调小,胜率立刻上去,资金曲线立刻变平滑,各种「看起来很专业」的比率指标一起变好。你会以为自己找到了规律,其实只是把「大赚」换成了一堆「小赚」,同时把真正的收益来源砍掉了。这种「一调就变好、变好得毫无阻力」的参数,正是过拟合最爱藏身的地方。
「止盈让胜率变高了」几乎不能说明任何事。 胜率和赚不赚钱是两回事:把止盈设得足够小、止损设得足够远,胜率能刷到很高,同时一次大亏就把几十次小赚全吞掉。判断一个止盈参数好不好,要看它对总收益、最大回撤、以及大赚那几笔是否被砍掉的联合影响,不能只看胜率那一栏变绿了。这背后是期望值而不是命中率的问题,期望值与概率思维那篇讲的是同一件事。
失效边界与常见误用
**把止盈当成「保住利润」的工具。**止盈保不住任何东西,它只是把不确定的浮盈换成确定的落袋,同时放弃后面所有可能。这个交换在什么时候划算,取决于你的方法靠什么赚钱,不存在一个普遍答案。
**用「这次卖飞了」去否定整套规则。**单次结果几乎不携带信息。一个止盈规则的价值,只能从足够多次、足够长时间的分布上看,而人的记忆恰好相反——你会记住那几次卖飞的,忘掉那些「幸好卖了」的。这种记忆偏差会持续推着你把止盈往后放,直到某一次彻底还回去。
**忽略成本和税费。**分批止盈把一笔交易拆成好几笔,每一笔都要付一次成本。频繁分批在纸面上损失不大,落到实际收益里未必。
**在赚钱的那一侧不对称地宽容自己。**很多人止损执行得很硬,止盈却全凭感觉——因为砍亏损时有规则替你背锅,砍利润时没人替你背。结果是:亏损被规则限制住了,利润却被情绪管着。长期看,这等于你把最难的那一半交给了状态最差的自己。
**忘了亏出去的钱不对称。**赚了不走导致回撤,回撤的修复难度不是线性的——亏损的不对称数学那篇讲得很透。这是「适度止盈也有它的道理」的硬依据,尽管它同样不告诉你该设多少。
小结
- 止盈难,是因为它和「让利润奔跑」直接冲突:它只对赢的那一边生效,剪掉的恰好是收益里最值钱的右尾,而对亏损那一侧毫无作用。
- 三条路各有代价:固定止盈买的是可执行性,卖的是大赚;分批止盈买的是心理承受力,卖的是绩效的可检验性;按波动率止盈买的是对行情脾气的适配,卖的是「提前知道自己在哪走」的确定性。
- 真实系统的四种答案差别极大:目标随持仓时间递减(把「拿太久」当坏消息)、允许分批但记账基准很硬(止损仍按初始开仓价)、目标由结构给出(形态不成立就没有目标)、以及组合轮动里干脆没有止盈(只问排不排得上号)。
- 止盈的回测数字系统性偏乐观:K 线触及被当成成交、多个退出条件的先后顺序是假设、止盈天花板永远先于追踪止损生效。
- 止盈参数是最容易刷高胜率的参数,也因此是过拟合的重灾区。看它好不好,别只看胜率那一栏。
一句话记住这篇:卖点没有正确答案,只有「你到底靠什么赚钱」的答案——想清楚这个,止盈自然就有了形状。
本文所引源码与文档均来自上述快照版本,是阅读代码得出的机制说明,不是运行结果;具体行为请以你手上那个版本为准。回 量化与 AI 投研概念库 看其它概念各自在说什么,仓位与退出的系统方法在 风险管理卷R;本站内容为投资教育,不构成任何投资建议,边界见 免责声明。
本文为投资教育整理,关键数据与结论请结合下列权威来源验证。
- freqtrade 源码快照 b3404c9(2026-08-18):freqtrade/strategy/interface.py(min_roi_reached_entry / custom_roi)、freqtrade/optimize/backtesting.py(_get_close_rate_for_roi)、docs/configuration.md、docs/backtesting.md、docs/strategy-callbacks.md ↗
- qlib 源码快照 79633dd(2026-07-23):qlib/contrib/strategy/signal_strategy.py(TopkDropoutStrategy) ↗
- Vibe-Trading 源码快照 3a752d5(2026-08-04):agent/src/skills/harmonic/references/PRZ交易.md ↗