订单执行
幂等性是指同一操作执行多次与执行一次的效果相同;在交易自动化中,这意味着一个信号被传递两次、或一笔订单请求在网络错误后被发送两次,最终只会形成一个仓位,而不是两个。
重复在消息系统中很常见:Telegram 可能将一条被编辑过的消息当作新事件传递,某个 webhook 发送方在没有及时收到确认时会重试,交易者也可能两次点击"发送测试信号"。如果没有幂等性,每一次重复都会变成一笔带有真实保证金的真实订单。而这个问题往往正好在系统承压最大的时候出现——也就是交易场所出现拥堵或故障期间,此时重试和重复投递会成倍增加。
AlgoVesta 在多个环节应用了幂等性。传入的 Telegram 消息会按照其消息标识符进行记录,因此同一条消息不会被处理两次。重复防护机制会在短时间窗口内拒绝针对同一账户、同一品种、同一方向的第二个信号,从而吸收重复发布和重复点击;被拒绝的操作会连同原因一并记录,而不是被悄悄丢弃。下单请求在结果不明的失败之后不会被盲目重试;平台会与交易所的持仓和成交历史进行对账,判断订单是否真的存在之后再决定是否采取行动。每个策略都有自己独立的 webhook 令牌,每一次执行都与触发它的信号一一对应,因此同一个信号不可能被两条路径同时执行。参见重试逻辑和TradingView 机器人页面。
某 TradingView 警报设置在一分钟图表上,由于某个策略设置的原因,在同一根 K 线内两次触发了完全相同的消息。第一次请求在 ETHUSDT 上开出多头仓位。第二次请求在 20 秒后到达,被重复防护机制以"同一时间窗口内相同品种和方向"为由拒绝;该请求会在信号日志中显示为被拦截,并注明重复原因,不会开出第二个仓位。