智用_AI
首页 / 指南 / 自动下单程序故障排查

交易机器人不下单、报错怎么办?自动下单程序的九类故障先查什么

作者 秦深更新 2026-10-12约 7 分钟阅读
智用 AI 站点封面图,本文是自动下单程序九类运行时故障的总览

策略写对了,自己跑的交易机器人(自动下单程序)照样可能在运行时出问题:该下的单没下、请求报错,或者进程没退、日志还在滚,但它的状态、配额或参数已经和账户、行情对不上。这里按「连接与请求」「信号与订单」「数据与参数」三组列出九类故障,每类只讲现象和第一步该查什么,展开的排查步骤放在各自的文章里。

九类故障一览

故障会不会报错第一步查什么
断线后状态错位断线有,重连后的错位没有重连后重新拉持仓和挂单对账
下单请求超时有按自己起的订单号查这张单
限频有(429,继续发会变成 418)响应头 Retry-After
信号没到下单程序不一定警报日志的 Webhook 状态和接收端请求记录
订单时效选错没有订单的时效参数,未成交部分去了哪
换平台后规则不同有时有(下单被拒)该平台的最小下单量、精度、订单类型
行情口径不一致没有程序用的是哪种价格、延迟多少
模拟盘结果带不到实盘没有模拟盘对滑点、成交、手续费的假设
参数漂移没有定期回看实际成交

表里「没有」报错的那几行只能靠主动去查,程序和接口都不会提醒你。

连接与请求:断线、超时、限频

断线:挂单还在,做决策的程序不在

已经挂在平台上的委托单不会因为程序掉线而消失,价格到了照样成交。断线切掉的是另一半:程序收不到成交回报,也发不出新指令。止损如果写在本地逻辑里、靠程序判断价格后再发平仓单,断线期间它就不存在。能挂到平台上的保护性委托,不要留在本地。

重连之后,程序内存里的持仓和挂单还停在断线前。重连后的第一件事应当是重新拉一次真实持仓和挂单,对不上就停下来等人处理,不让程序自己往下猜。

下单请求超时:成没成不知道

请求发出去没等到回应,不等于没下成,直接重发可能变成两张单。下单时带上自己起的订单号,超时后按这个编号查,或者在当前委托和成交记录里找这张单。查到与查不到各怎么处理、没带编号怎么收拾,见 下单请求超时了,这一单到底成没成?

限频:出错后的立即重试最危险

一个请求失败后立刻重试、再失败再重试,循环几秒钟就能把配额用完,到真要撤单时请求也发不出去。收到 429 先停下;响应带 Retry-After 就照它等,没带就让等待时间逐次翻倍并加随机错开,设好封顶值和重试次数。

币安现货 REST API 文档的访问限制一节写明,访问限制按 IP 计算而不是按 API Key;收到 429 后仍继续发会被封禁 IP 并返回 418,封禁时间从 2 分钟到 3 天。撤单、平仓这类请求要留出余量,别让轮询行情的循环把配额吃光。每一步怎么排见 接口返回 429 之后,先做什么、等多久再重试。

信号与订单:信号没到、时效选错、换平台

警报响了,下单程序没动

从图表警报到交易所订单要过四段:警报触发、Webhook 发出、接收端收到、下单程序提交。对照 TradingView 警报日志里的 Webhook 状态和接收端的请求记录,就能定位信号停在哪一段。四段各自怎么核,见 TradingView 警报响了却没下单,Webhook 信号分四段查。

订单时效选错

GTC 把没成交的部分留在盘口等,IOC 成交多少算多少、剩下的撤掉,FOK 不能一次全成就整张撤。程序如果按「下了单就等于全部成交」来记账,用 IOC 时会多记没成交的那部分,用 GTC 时会漏掉还挂在盘口的残单。用一组盘口数字算三种时效的结果,见 IOC、FOK、GTC 有什么区别,下单时该选哪个?

换一家平台,规则跟着变

用 CCXT 这类开源库时,下单、查余额、取 K 线的叫法是统一的;最小下单量、精度、支持的订单类型和限频,仍由各家平台自己定。同一套代码换平台跑之前,这几项要逐项重核,清单在 机器人底层用了 CCXT,换一家平台跑还要重新核哪些东西。

数据与参数:行情口径、模拟盘、参数漂移

程序看到的价格和你看到的不是一个数

最新成交价、盘口买一卖一、指数或标记价是三种口径,同一时刻数值可以不同;再加上数据延迟和还没收线的那根 K 线,程序拿到的「当前价」和图上看到的可能对不上。用错口径的程序,运行时一点毛病没有,决策依据也是偏的。见 AI 工具看到的行情和你看到的不一样:数据源、延迟与口径。

模拟盘的结果带不到实盘

以 Freqtrade 的 dry-run 为例:它用实时行情加模拟钱包,订单不发到交易所;市价单滑点最多算 5%,限价单到价就记成交,手续费按默认档。这几条假设到了实盘不一定成立,切换前逐条核,见 Freqtrade dry-run 的结果哪些带不到实盘。

参数漂移:不报错,只是不再合适

网格的上下轨和间距、趋势策略的周期、止损的百分比,都是在某一段行情里调出来的,隐含的假设是之后的波动和当时差不多。行情换了状态,程序不报错,接口照常返回,它只是按不再合适的参数继续下单。

能看见它的地方只有成交记录:成交频率和设参数时的预期对不上;区间类策略的价格长期贴在一侧,另一边的格子一直没用上;单笔盈亏比在变差。定一个固定的回看节奏,把这段时间的实际成交和当初的假设并排比。调参时怎样留一段没碰过的数据做检验,见 回测调完参数,要留一段没碰过的数据再考一次。

开跑前落实的三件事

  • 每开一个策略,先回答「此刻掉线,这单会怎样」。答不上来就先别开。答案通常指向同一个动作:把保护性委托挂到平台上。
  • 留一个几秒内能停的开关。停下之后不再发新单,并且不依赖改配置、重新部署。
  • 让程序定期把三个数写到你看得到的地方:当前持仓、挂单数量、最近一次成功请求的时间。有这三个数,出了问题能很快分出是上面哪一类;没有就只能翻日志。

策略思路或代码骨架如果是让 AI 帮着出的,它给的参数和阈值要对照官方文档逐项核,原因和四个例子在 AI 给的交易建议为什么不能直接照做。API 密钥的权限和 IP 白名单怎么设,见 币安 API 密钥怎么设才安全。