偶尔我的quickfixN引擎会失去与交换机的连接,当它重新连接交换机时,会发现缺少消息并要求重新发送。然后我的引擎发送消息。
然而,订单通常都是旧的,我经常会发送订单取消请求。然而,当交易所在重新发送时按顺序执行消息时,订单很有可能被填补。
处理这个问题的正确方法是什么?即,如何告诉交易所不要执行这些订单,或者如何停止quickfixN重新发送旧订单?
答案 0 :(得分:2)
我不知道是否有一种普遍“正确”的方式来处理这个问题。
在我们的系统中,我们始终总是以Gap Fill响应,即
交流:“嘿,我们错过了序列537到542!”
我们:“别担心。接下来预计序列545。”
545不是拼写错误 - 我们可能已经发送了543和544,而他们的重发请求正在传输。
这种技巧明确地避免了你所面临的那种困境。 拒绝发送旧邮件,您至少可以控制执行。
为了说明更大的视角,我们所做的是,当我们对订单发起任何操作时,我们将订单标记为“正在进行中”,这意味着它不能以任何方式进一步采取行动(修改/ CFO或取消) )。只有当我们收到ACK,即执行报告时,我们才会删除此状态。因此,如果交换机错过了与该订单有关的消息,那么该订单最终会“卡住”(并在前端得到突出显示)。不理想,但至少它不会失控。交易者然后只需重新输入所需的订单。 (请注意,这是非常保证我们不会重新发送使交易者能够安全地重新输入订单的消息。)在没有系统的情况下,它只需再次尝试并继续前进,而不需要用于复杂的序列场景解析。
资料来源:在连接> 10加拿大交易所的订单输入系统上工作,由> 50加拿大经纪人使用。