AlgoVesta › 术语表 › 重试逻辑

订单执行

重试逻辑

重试逻辑是一套规则,用于决定对交易所或经纪商发出的失败请求是否需要再次发送、发送多少次、间隔多久,以及最重要的一点——哪些请求绝不能重复发送,因为重复发送可能会开出第二笔订单。

为什么重要

网络和交易场所出现故障时,从外部看起来往往一模一样:超时既可能意味着订单从未到达,也可能意味着订单已被接受、只是确认信息丢失了。重试一个读取请求(余额、持仓、订单状态)是无害的;但在结果不明的失败之后重试一次下单,可能会使仓位翻倍,这比错过一笔交易更糟。重试还会与请求频率限制相互作用:在交易场所出现故障期间的一连串重试,可能导致某个 IP 或密钥被暂时封禁,从而将同一服务器上的其他所有账户一并拖下水。

AlgoVesta 如何处理

AlgoVesta 会区分读取操作和写入操作。诸如获取持仓之类的读取请求,在短暂等待后会重试一次;而下单请求在超时之后不会盲目重试,因为丢失确认信息并不能证明订单本身丢失了。相反,平台会与交易场所进行对账:核对交易所的持仓和成交历史,若发现订单实际上已经下达,则记录该笔订单而不会重复下单。重复防护机制会拒绝在短时间窗口内针对同一账户、同一品种、同一方向的第二个相同信号,从而避免因提供方重新发布消息而开出两笔仓位。当交易场所返回频率限制或封禁响应时,受影响的密钥或服务器会退避而不是持续冲击该交易场所,该状态会显示在仪表盘中。创建失败的保护性订单会被重试并验证,对于外汇账户,若某个仓位的止损无法确认,该设计会将其平仓。参见幂等性与交易所请求频率限制(rate limit)。

示例

一笔买入 0.05 BTC 的订单在 10 秒后超时且没有任何响应。AlgoVesta 不会重新发送该订单,而是查询该账户的当前持仓和最近成交记录,发现一笔与该订单相符的新的 0.05 BTC 多头持仓,将其连同交易所的成交价格一并记录,并为其设置止损和目标。如果查询没有发现任何结果,该信号会被标记为失败并注明超时原因,交易者可以自行决定是否重新发送。

常见错误

实际应用

了解 AlgoVesta 如何自动化这一流程