QuickFix / N:使用FIXT1与FIX5.0时如何输入键入的消息?

时间:2017-07-15 15:16:31

标签: quickfixn

上下文

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

我相应地将两个配置文件从 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

Intiator的FIX5.0配置:

[DEFAULT]
ConnectionType=initiator
ReconnectInterval=2
FileStorePath=store
FileLogPath=log
StartTime=00:00:00
EndTime=00:00:00
UseDataDictionary=Y
TransportDataDictionary=..\spec\FIXT11.xml
AppDataDictionary=..\spec\FIX50.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

Acceptor的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=..\spec\FIXT11.xml
AppDataDictionary=..\spec\FIX50.xml

1 个答案:

答案 0 :(得分:1)

quickfixn repository处FIX4.4的数据字典包含 -

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

这是Heartbeat消息的正式定义。

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

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