如何使用重新发送请求处理旧订单

How old orders should be treated with a resend request

有时我的 quickfixN 引擎与交换器失去连接,当它重新连接时,交换器意识到缺少消息并要求重新发送。然后我的引擎发送消息。

然而,订单往往是旧的,而且我通常会随后发送订单取消请求。然而,当交易所在重新发送消息时按顺序执行消息时,很有可能会执行订单。

处理这个问题的正确方法是什么?即,我怎样才能告诉交易所不要执行这些订单,或者,我怎样才能阻止 quickfixN 重新发送旧订单?

我不知道是否有通用的 "correct" 方法来处理这个问题。

在我们的系统中,我们总是,总是用间隙填充来响应,

Exchange: "Hey, we're missing sequences 537 through 542!"

Us: "Don't worry about it. Expect sequence 545 next."

545 不是拼写错误——我们可能在他们的重发请求传输时已经发送了 543 和 544。

此技巧专门用于避免您面临的那种困境。 通过拒绝发送旧消息,您至少可以保留对执行的控制权。

为了说明更大的视角,我们所做的是,当我们对订单启动任何操作时,我们将订单标记为 "in progress,",这意味着它不能以任何方式进一步操作(amended/CFO '编辑或取消)。只有当我们收到 ACK, 执行报告时,我们才会删除此状态。因此,如果交易所错过了与该订单相关的消息,该订单只会以 "stuck" 结束(并在前端突出显示)。不理想,但同样,至少它没有失控。然后交易者只需重新输入所需的订单。 (请注意,这是我们 不会 重新发送使交易者能够安全地重新输入订单的消息的保证。)没有系统,它只是再试一次并继续前进,无需复杂的序列场景解析。

资料来源:在连接超过 10 家加拿大交易所的订单输入系统上工作,供超过 50 家加拿大经纪人使用。