什么情况下必须立刻停手
- 拿一份五类信号的清单,对着眼前这个异常判断该不该立刻停手,而不是先去查原因
- 用「等待期里它还会不会继续动手」这一条把异常分成不能等和可以等两档,并给被判为「可以等」的那一档补上时间点和责任人
- 用三条检查过一遍自己的急停设计,并按一套固定动作定期演练它、量出从决定停到确认不再下单之间的真实延迟
- 停手之后按固定顺序收拾:先抄一份对手方给出的真实状态,再逐格过挂单、持仓、止损挂在哪一层、会不会被自动拉起、未落库状态、恢复条件
半夜两点被告警震醒,你要在三十秒内回答的只有一个问题:现在该不该停手。
这一篇不解释故障是怎么发生的——数据为什么会静默停更、账为什么会分叉、程序停了之后心跳为什么还在发、重发一笔单为什么可能变成双倍仓位,实盘跑起来之后该盯着什么 和 回测跑通了,实盘还差五件事没写 已经把机制讲完了。这一篇只给动作:看到什么就停、什么能等到收盘、急停设计怎么检查和演练、停完之后按哪几格收拾。
先划清边界
一句话分开两个决策:停用问「这套方法还行不行」,靠几十笔以上的长期证据,判据怎么写见 一个策略什么时候该停掉;停手问「这套东西现在还在我控制之下吗」,只看现场状态,不看业绩。
由此定下这篇所有判据共用的口径:现场判据不需要准,只需要够快。 下面每一条都是按这个口径写的——宁可多停,不赌少停。
还有一条边界先钉死:单纯亏钱不在这份清单上,它是策略层信息,该走停用判据。
清单一:看到这五类信号,先停,别研究
一、数据不新鲜或明显失真
怎么看:拿手上最新一根行情的时间戳减去当前时间,盯这个差值;同时看有没有不可能的取值——价格跳到一个不该出现的位置、成交量变成零、某个字段突然空了。
判据:行情时间明显落后于现在,就是停手信号。 不需要先弄清是交易所维护还是自家路由器抽风。
这个差值该怎么持续盯、程序为什么不会自己喊出来、数据侧还有哪些坑,见 实盘跑起来之后该盯着什么、数据的坑 和 数据自查。本篇只用它当判据。
二、持仓、余额、挂单与对手方对不上
怎么看:读对账报告的分类结果。
判据:一旦对账里出现「不知道成没成交」这一类,就是停手信号,不需要再往下追问它到底成没成。对账该怎么分类、为什么正确的产物是暴露歧义而不是自动纠正,实盘跑起来之后该盯着什么 拆得很细。
配套一条禁令,写在这里因为它属于「停手之后的动作」:不要补平差额。 不让程序自动补,你自己半夜也别手动补——这两件事是同一个错误,只是后者慢一点。
三、下单大面积失败
怎么看:下单成功率、按原因分类的拒绝计数,跟昨天比。
判据:失败率明显抬头就停手,具体是限流、资金、权限还是委托本身不合法,停完再查。失败原因怎么分类统计见 实盘跑起来之后该盯着什么;为什么这时候绝不能自动重试、客户端订单号怎么用,见 回测跑通了,实盘还差五件事没写。
本篇只补一条推论,因为它决定你停手后的动作顺序:下单在大面积失败的时候,你的止损多半也正处在发不出去的状态。 所以这一类信号触发后,第一时间要确认的不是订单,是保护还在不在——具体怎么确认,见最后一节第 3 格。
四、行为超出你预料的范围
怎么看:只看两个量——频率和单量。一天动手几次、单笔多大、同一品种是不是在反复进出。拿它们跟你事先写下来的那份「正常范围」比。
判据:超出日常范围,先降级到不开新仓 + 人工看一眼,不一定要立刻全停。
这条判据有个必须提前做的动作:把「正常」写下来。 正常一天几笔、单笔什么量级、进出间隔多久算正常。没有这个基线,异常永远不会自我介绍,它只会表现成一串你事后才觉得「好像有点多」的记录。
五、你说不清它刚才为什么那么做
怎么看:随手挑最近一笔真实成交,试着用一句话说出它依据的是哪条规则。说不出来,就是命中。
判据:一旦你无法用一句话说清它刚才那个动作的依据,就停手。 停完再慢慢看,看懂了再开。
它必须被写成正式判据而不是一种模糊不安,理由很实际:前面四条都是别人踩过的已知坏情况,而你没列进清单的那些,全都会先以「我看不懂了」这一个共同形态冒出来。
最后补一句边界:绝大多数监控指标不该接到急停上,接多了你会得到一个天天在停的系统。平时该盯哪些读数见 实盘跑起来之后该盯着什么,这一篇只管其中直接对应「立刻停」的那几个。
清单二:哪些一秒都不能等,哪些可以等到收盘
判据只有一句:在你等待的这段时间里,它还会不会继续动手? 同一条口径在报警分级上怎么用,实盘跑起来之后该盯着什么 讲过。
不能等的那一档:程序还在循环里、还有下单能力。上面第一、二、五类全在这里;第三类如果你还不确定止损处在什么状态,也归这里。
可以等的那一档:这段时间里它一个动作都产生不了。典型是市场已经收盘,或者你已经把下单能力停掉之后才发现的遗留问题。
这里有个前提必须点破:「等到收盘再说」默认了市场会收盘。 做外汇、加密品种、跨时区标的的人没有这个奢侈品——你的「收盘」得自己造,而造它的手段恰恰就是停手本身。 所以对这类市场,别再纠结「要不要为了排查而停」:排查本来就需要一段没有动作的窗口,而停手是你手上唯一能造出这个窗口的工具。
最后一条纪律,方向和直觉相反:需要写死时限的是「可以等」那一档,不是「不能等」那一档。 不能等的当场就把你摁住了,忘不掉;可以等的会从「等到明天早上」漂成「等我这周有空」。所以每一件判为可以等的事,落笔时必须带上两样东西:一个具体的时间点,和一个具体的人。 少任何一样,「等」和「不管」在结果上没有区别。
清单三:拿三条检查你的急停设计
第一条:不依赖被停的那个东西配合
验法:假设主循环已经卡死、消息通道已经断了,你手上还有没有一个动作能让它发不出单?如果你的答案是「我去后台点停止」,那你只有一层。
第二层不能依赖第一层还活着。 这一层该怎么实现、为什么它必须在循环够不着的地方生效,实盘跑起来之后该盯着什么 讲得很细,本篇不重复。你要做的只是确认它存在。
再往外越硬:撤掉或更换密钥(程序在权限上根本发不出单)、把钱挪走(最硬的额度限制永远是「那个账户里没有那么多钱」)。这几层的授权逻辑见 把下单权交给 AI 之前。
自查一句话:你至少要有两层。
第二条:失联即停,而不是收到指令才停
验法:拔掉你自己这一端的网线,然后什么都不做。它多久会自己停摆?
规则要长在程序自己身上:多长时间没能拿到新的行情就自我停摆,多长时间没能报一次平安就自我停摆。验法:拔掉网线,然后什么都不做,看它多久自己停下来。
阈值我不给数,但定这个数的原则可以直接抄:明显长于日常抖动,明显短于「行情能走出你承受不了的幅度」所需要的时间。 定完记一句:这个数将来只准往紧了调,往松调必须写清理由。
第三条:停止状态本身要能被外面读到
验法:让它停一次,然后只看你的仪表盘——你能不能一眼看出它现在是停着的?
注意「进程还在跑」不等于「系统在工作」——机制见 实盘跑起来之后该盯着什么。落到动作上就两条:停的时候要有一条明确的通知发出来,仪表盘上要有一格专门显示它此刻处在哪个状态里。
顺手排除这几个反模式
- 把急停做成「在对话里发一句停下来」。 这依赖那个正在出问题的东西愿意听你的。
- 把急停做成一个要登录后台、点五下才能到的按钮。 半夜、着急、手机屏幕——每多一步,失败率就往上跳一截。
- 把急停和这台机器绑在一起。 机器本身出问题的时候,按钮跟着一起没了。
- 只有一个人知道怎么按。 把步骤写在纸上,贴在一个不需要开电脑就能看到的地方。
- 把急停和平仓绑在一起。 停下来和处置已有仓位是两个决定,后者需要一次单独的、你本人认可的授权,见 把下单权交给 AI 之前。
清单四:演练,以及必须量出来的那个数
没演练过的急停等于没有急停。
数一下这条链上有多少环节:闸门那段代码、开关所在的目录、触发用的脚本、撤密钥的流程、纸上的步骤、你自己对「第一步该干什么」的记忆。每一环都会无声腐坏,而且只在你按下去的那一刻才暴露。
怎么演练:
- 在模拟环境或空仓时段做,别在手上有真实持仓的时候试——演练本身也是一次状态变更,别让它变成一次事故。
- 走完整条链,不只是点那个按钮:包括撤密钥这一层,也包括照着纸上的步骤真做一遍。
- 演练完把恢复流程也走完。「怎么把它安全地开回来」和「怎么停」是同样容易生锈的一半。
- 硬规则:每次换机器、换密钥、改部署方式之后,必须重演一次。 这三件事最常在你毫不知情的时候剪断链条上的某一环。
要量的那个数,多数人从来没量过:从你决定停,到你能确认「它确实不会再下新单了」,中间过了多久。 注意后半句不是「我点了停止」——中间还要找入口、执行、再回去核对一遍。这段时间就是你真实的急停延迟,你所有关于「停手能挽回多少」的估计都建立在它上面,而量出来往往比想象的长一个量级。
演练还有第二个产物:把清单从「知识」变成「手上的动作」。 半夜两点人不读文档,只会做自己做过的事。
清单五:停完之后,按这个顺序收拾
按下急停,停掉的只是「新的动作」,不是「已有的暴露」。 你的账户在停手那一刻的风险敞口,跟停手前一秒一模一样。
第 0 步(顺序不能反):去券商或交易所那边,把此刻的真实持仓、真实挂单、真实可用资金抄一遍——抄对面那台机器给出的数字,不是你程序里的记录,也不是你的仪表盘。
不是先去翻日志查原因。 日志不会跑掉,而你按停手多半就是因为已经不信任自己那份记录了——再拿它当排查起点,等于用一把刚判定为坏的尺子去量东西。先查原因的典型下场,是四十分钟后才发现有一笔仓位一直没人管。
拿到快照之后,下面这几格一格一格过:
1. 还挂在市场上的委托。 它们在交易所那边,不会因为你的程序停了而消失。有的框架提供了「停止时是否撤销全部挂单」的开关——这个开关的存在本身就说明停止和撤单是两件事。它是否影响已有持仓、默认是开还是关,以你手上那个版本的文档为准。
2. 已经持有的仓位。 停手之后它们还在市场里随行情涨跌。手工去对手方那边平掉、还是重启后用「只出不进」那一档慢慢收尾,是一个只能由你本人在清醒状态下做的决定。急停按钮的职责到「不再产生新动作」为止。 有的框架会在进入停止状态时提醒你还剩几笔未平仓——它只解决「你知道」,不解决「谁去处理」。
3. 你的止损挂在哪一层。 程序端止损随程序一起停,这件事 实盘跑起来之后该盯着什么 已经讲透。本篇只补它在停手这一刻的分岔:交易所端的条件委托不会跟着停——那是一张真实躺在对手方系统里的委托,机器关了、网断了,它照样在等触发。平时两者差别不大,停手这一刻差别巨大。
所以这一格的动作很明确:按急停之前(或者按完的第一件事)确认自己属于哪一种;如果是程序端的,停手之后必须补一个决定——要么手工在对手方那边挂一张条件委托顶上,要么承认这段时间是裸的,并且有人一直盯着。
4. 会不会被自动拉起来。 进程守护、计划任务、容器的重启策略分不清你这次是崩溃还是主动停手。你得停到那一层去,否则你会看到一个自己复活的系统,而且它复活之后往往从一个更干净、更无知的状态开始。
5. 没来得及落库的那部分状态。 强杀进程会留下「单已经发出去了、记录没写上」的空白,恢复之前必须完整对一次账。留痕为什么写在动作之前,见 回测跑通了,实盘还差五件事没写 和 把下单权交给 AI 之前。
6. 时间和原因,当场记下来。 停在哪一刻、看到的是什么、你当时怎么判断的——人对二十分钟前的记忆比想象中不可靠得多。
7. 恢复的条件,谁来定。 跟停用判据一样,恢复条件必须事前写好,不能是「等我觉得没问题了」。一个只有停止条件、没有恢复条件的系统会以两种方式失败:要么你在还没查清的时候手痒重开了,要么它永远停在那儿,而你也永远没做那个正式的决定。
一张表:什么信号,配什么动作
| 现场信号 | 立刻停手 | 先降级观察 | 只记录不动作 |
|---|---|---|---|
| 行情时间戳不再往前走 | ✔ | ||
| 价格或成交量出现不可能的取值 | ✔ | ||
| 持仓、余额、挂单与券商对不上 | ✔ | ||
| 出现「不知道成没成交」的中间状态 | ✔ | ||
| 下单大面积失败、报错率明显上升 | ✔ | ||
| 你说不清它刚才那个动作的依据 | ✔ | ||
| 下单频率或单量明显超出日常范围 | ✔ | ||
| 单个数据字段偶发缺失但很快恢复 | ✔ | ||
| 网络短暂抖动、单笔请求超时后成功 | ✔ | ||
| 今天亏得比平时多 | ✔(走停用判据) |
本文讨论的是自动交易系统在工程层面的故障识别与紧急停止操作,不是搭建指南,也不认为把交易自动化能带来任何收益。文中不提供任何具体阈值、参数或可直接照抄的规则,所有涉及数值的地方都需要你结合自身情况判断,涉及具体工具的行为以你手上那个版本的官方文档为准。文中对开源项目的描述来自阅读指定快照的源码与文档,是阅读得出的机制说明,不是运行结果,也不构成对这些项目的推荐。任何形式的自动下单都涉及真实资金的不可逆损失。完整风险提示见 免责声明。
说清楚:本站不建议个人投资者做全自动实盘交易
这是 E 线的最后一篇。回头看这一篇列的所有动作:分层的急停、失联自停、状态可见、演练、停完那张逐格清单——它们没有一条能让你多赚一分钱,而且每一条都需要一个随时在场的人。 上线前要补的代码见 回测跑通了,实盘还差五件事没写,这一篇是上线后要养的能力,两端加起来才是全部账单。
自动交易真正省掉的,是你手动点确认的那几秒;它加上去的,是一份 7×24 的值班责任。 所以本站立场很明确:不建议个人投资者做全自动实盘交易。
更划算的三条路:让程序出信号、你来点确认,几乎保留了全部好处而去掉全部不可逆性;只在模拟环境里跑,跑到经历过几次真正难看的行情;把它当成监控而不是执行器,让它盯着,触发条件时叫你。至于容量和延迟这些约束怎么把预期拉回地面,延迟和容量 那篇算过账。
小结
- 停手只看现场状态,不看业绩。 判据不需要准,只需要够快。单纯亏钱不在这份清单上。
- 五类立刻停手的信号:行情时间戳落后或取值不可能、对账出现「不知道成没成交」、下单大面积失败、频率或单量超出你事先写下的正常范围(这档可先降级)、你说不清它刚才为什么那么做。
- 「能不能等」只问一句:等待期里它还会不会继续动手。 做 7×24 品种的人得靠停手自己造一个收盘窗口;而必须写死时限和责任人的,恰恰是被判为「可以等」的那一档。
- 急停过三条检查:循环卡死时还有没有第二层能停它(外面还有撤密钥、把钱挪走);拔网线它会不会自己停摆;只看仪表盘能不能一眼认出它停着。
- 没演练过的急停等于没有急停。 空仓时段走完整条链、连恢复流程一起走;换机器、换密钥、改部署之后必须重演。要量的数是从决定停到确认它不再下新单之间的真实延迟。
- 停完第一件事不是查原因,是抄一份对手方给出的真实持仓、挂单和资金,然后逐格收拾挂单、持仓、止损层级、自动拉起、未落库状态、当场留痕、恢复条件。最要命的一格是止损——程序端止损随程序一起停,交易所端条件委托不会。
一句话收尾:闻到煤气味先关阀门,别站在厨房里研究是哪个灶眼漏的。
本文为投资教育整理,关键数据与结论请结合下列权威来源验证。
- freqtrade 源码 freqtrade/worker.py、freqtrade/freqtradebot.py(process_stopped / check_for_open_trades)、freqtrade/enums/state.py(本地仓库快照 commit b3404c9,2026-08-18 读取) ↗
- freqtrade 文档 docs/configuration.md 中关于「停止时撤销挂单」开关的说明(同一快照 b3404c9) ↗
- Vibe-Trading 源码 agent/src/live/halt.py、agent/src/live/runtime/reconcile.py(本地仓库快照 commit 3a752d5,2026-08-04 读取) ↗
- 本文为阅读上述快照的源码与文档所得的机制说明,不是运行结果,未接入任何真实账户 ↗