QuickFix/N: 将 FIXT1.1 与 FIX5.0 一起使用时如何键入消息?



>上下文

我有一个测试接受器和发起者。我使用的是 QuickFix/N 1.7 版本。如果我将接受器和启动器都配置为FIX 4.4,则一切正常。 什么都不做,只是连接,然后将传入/传出的检测信号消息记录到调试控制台。一切正常,见下文。

相应地将两个配置文件从 FIX 4.4 更改为 FIX 5.0。一切正常(我的意思是心跳消息仍然来来去去(,但回调的消息参数不再是类型化(心跳(运行时实例消息,而是基类。

诊断:

  • 所有引用的规范文件都已就位。如果我故意破坏 TransportDataDictionary 路径或 AppDataDictionary 中的字符,我得到了预期的异常
  • 使用开箱即用的规范文件,完全没有自定义。

问题:

为什么消息实例不是 FIX 5.0 事例中的类型化运行时实例消息,而是在 FIX 4.4 事例中键入的? 这是预期的行为还是我错过了什么?

代码展品:

Initiator IApplication 实现中的代码,用于生成输出行:

public void ToAdmin(Message message, SessionID sessionID)
{
Debug.WriteLine($@"(A)OUT: {message.GetType()}{message}");
}
public void FromAdmin(Message message, SessionID sessionID)
{
Debug.WriteLine($@"(A)IN: {message.GetType()}{message}");
}

使用 4.4 配置时,我看到这个:(消息类型为QuickFix.FIX44.Heartbeat(

Logon - FIX.4.4:TEST01->MYACCEPTOR
(A)IN: QuickFix.FIX44.Heartbeat8=FIX.4.4 9=5335=034=249=MYACCEPTOR52=20170715-15:00:31.59656=TEST0110=179
(A) OUT: QuickFix.FIX44.Heartbeat8=FIX.4.4 9=5335=034=249=TEST0152=20170715-15:00:31.60456=MYACCEPTOR10=169
(A) OUT: QuickFix.FIX44.Heartbeat8=FIX.4.4 9=5335=034=349=TEST0152=20170715-15:00:36.61056=MYACCEPTOR10=172
(A) IN: QuickFix.FIX44.Heartbeat8=FIX.4.4 9=5335=034=349=MYACCEPTOR52=20170715-15:00:36.61556=TEST0110=177

使用 5.0 和配置时,我看到这个:(消息类型只是QuickFix.FIX50.Message(

Logon - FIXT.1.1:TEST01->MYACCEPTOR
(A)IN: QuickFix.Message8=FIXT.1.19=5335=034=249=MYACCEPTOR52=20170715-15:06:16.92256=TEST0110=003
(A) OUT: QuickFix.Message8=FIXT.1.19=5335=034=249=TEST0152=20170715-15:06:16.93056=MYACCEPTOR10=002
(A) OUT: QuickFix.Message8=FIXT.1.19=5335=034=349=TEST0152=20170715-15:06:21.93656=MYACCEPTOR10=005
(A) IN: QuickFix.Message8=FIXT.1.19=5335=034=349=MYACCEPTOR52=20170715-15:06:21.94156=TEST0110=001

初始化器的 FIX5.0 配置:

[DEFAULT]
ConnectionType=initiator
ReconnectInterval=2
FileStorePath=store
FileLogPath=log
StartTime=00:00:00
EndTime=00:00:00
UseDataDictionary=Y
TransportDataDictionary=..specFIXT11.xml
AppDataDictionary=..specFIX50.xml
SocketConnectHost=127.0.0.1
SocketConnectPort=1111
LogoutTimeout=5
ResetOnLogon=Y
ResetOnDisconnect=Y
[SESSION]
BeginString=FIXT.1.1
DefaultApplVerID=FIX.5.0
SenderCompID=TEST01
TargetCompID=MYACCEPTOR
HeartBtInt=5

接受器的 FIX5.0 配置:

[DEFAULT]
ConnectionType=acceptor
SocketAcceptPort=1111
StartTime=00:00:00
EndTime=00:00:00
FileLogPath=log
UseDataDictionary=Y
ResetOnLogon=Y
ResetOnLogout=Y
ResetOnDisconnect=Y
[SESSION]
BeginString=FIXT.1.1
DefaultApplVerID=FIX.5.0
SenderCompID=MYACCEPTOR
TargetCompID=TEST01
FileStorePath=store
TransportDataDictionary=..specFIXT11.xml
AppDataDictionary=..specFIX50.xml

快速修复存储库中 FIX4.4 的数据字典包含 -

<message name="Heartbeat" msgtype="0" msgcat="admin">
<field name="TestReqID" required="N" />
</message>

这是心跳消息的正式定义。

FIX 5.0 数据字典中缺少此定义,导致快速修复引擎将其视为通用消息。

将检测信号消息定义添加到FIX 5.0数据字典应该可以解决您的问题。

相关内容

最新更新