1

我正在使用 QuickFix/J (FIX 4.2) 将订单提交给接受者 FIX 引擎。基本上我需要两个帐户的帮助:

  1. 当我第一次尝试与接受者建立连接时,接受者拒绝初始登录请求,说“Msg Seq No too Low”。在此之后,我的发起者继续将传出序列号增加一,当这个序列号增加时。和没有。接受器引擎匹配所期望的,我得到了稳定的连接。为了加快这个过程,我开始提取预期的序列。不。从接受器引擎发送的拒绝消息中,并更改了传出序列号。我的引擎使用

    session.setNextTargetMsgSeqNum(expectedSeqNo).
    

    但是,稍后,如果我的引擎找到传入的序列号。高于预期,它发送一个重新发送请求。作为响应,另一方发回一个 Sequence Reset msg (35=4, 123=Y)。现在收到这个消息后,传入的序列号。因为我的引擎应该自动设置为它从 Seq Reset msg 收到的那个。但这并没有发生,我的引擎继续要求消息重新发送请求,而传入的序列号没有变化。有趣的是,当我首先没有明确更改传出序列号时(使用 setNextTargetMsgSeqNum),我发现这个东西可以工作。

    为什么我的引擎在收到序列重置消息时没有显示预期的行为?

  2. 我已经和对方谈过了,他们的配置中不会有 ResetOnLogon=Y。因此,每次我的引擎启动时,它通常都会发送带有 seq no 的登录请求。低于预期(从 1 开始)。有没有更好的方法来快速建立连接?就像我可以以某种方式让我的引擎使用序列号。从它下降之前的点恢复?理想的方法应该是什么?

所以我现在将消息保存在一个处理序列号的文件中。然而,再次令人不安的是,我的快速修复启动器引擎没有响应序列重置消息。现在根本没有管理员回电。

我注意到,当我从一台服务器连接到接受器然后关闭该会话并使用不同的服务器使用相同的会话 ID 连接到接受器时,几乎总是没有响应序列重置消息。一旦登录被接受,我希望一切正常。但是,当另一个引擎将序列重置发送到特定数字(基本上是间隙填充)时,我的修复引擎不会响应它,这意味着它不会重置其预期的序列号并继续向接受者发送重新发送请求。任何帮助将不胜感激!

4

1 回答 1

10

对于正常的 FIX 会话使用,您可以配置会话开始和结束时间并让引擎管理序列号。例如,如果您的会话从上午 8:00 到下午 4:30 处于活动状态,那么 QuickFIX/J 将在上午 8:00 之后(或 8:00 后第一次启动引擎时自动将传出和传入序列号重置为 1:如果当时发动机已经启动,则为 00 AM)。

(问题 #1)。您是正确的,您的引擎应该在序列重置后使用新的传入序列号。鉴于这适用于成千上万的 QuickFIX/J 用户,请考虑一下您可能正在做什么来改变这种行为。例如,您是否有管理消息回调,它可能会引发异常。您是否查看过日志文件以查看是否有任何提示?

(问题2)。如果您使用的是持久性 MessageStore(FileStore、JdbcStore 等),那么您的传出序列号将在您重新启动时可用。

于 2012-01-06T11:39:56.747 回答