2017-07-15 69 views
6

上下文QuickFix/N:如何在FIX5.0中使用FIXT1.1時輸入消息?

我有一個測試Acceptor和Initiator。我正在使用QuickFix/N 1.7版本。如果我將Acceptor和Initiator配置爲FIX 4.4,一切正常。 無所作爲,只需連接,然後將傳入/傳出心跳消息記錄到調試控制檯。一切OK,看下面。

我改變沒有只是兩個配置文件相應地從FIX 4.4到FIX 5.0。所有作品(我的意思是心跳消息仍然來來去去),但回調的消息參數不再是類型化(心跳)運行時實例消息,而是基類。

診斷:

  • 所有引用的規範文件已經到位。如果我故意破壞TransportDataDictionary路徑或AppDataDictionary中的字符,我得到了預期的異常
  • 使用開箱即用的規範文件,根本沒有定製。

問:

爲什麼消息實例是不是在FIX 5.0案例類型化運行實例的消息,並在FIX 4.4的情況下輸入? 這是預期的行爲還是我錯過了什麼?

代碼展品:

public void ToAdmin(Message message, SessionID sessionID) 
{ 
    Debug.WriteLine([email protected]"(A)OUT: {message.GetType()}{message}"); 
} 
public void FromAdmin(Message message, SessionID sessionID) 
{ 
    Debug.WriteLine([email protected]"(A)IN: {message.GetType()}{message}"); 
} 

當使用4.4的配置,然後我看到這一點::(消息類型是QuickFix.FIX44.Heartbeat

在引發劑IApplication執行產生輸出線

代碼

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 

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 
+0

你可以在兩個數據字典中發佈心跳消息的定義嗎? (4.4&5.0)? – neur0tic

+0

使用與原始回購(適用於4.4和5.0)完全相同的定義:https://github.com/connamara/quickfixn/tree/master/spec/fix –

回答

1

數據字典FIX4.4在quickfixn repository包含 -

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

這是Heartbeat消息的正式定義。

該定義是在FIX 5.0數據字典中缺少,導致quickfix引擎將其視爲通用消息。

將心跳消息定義添加到FIX 5.0數據字典應該可以解決您的問題。

+1

確實缺失。進一步檢查:即使是在5.0數據字典中,源代碼中的FIXT1.1和5.0開始字符串相關的黑客可以防止輸入管理消息,但不要問爲什麼...... –

相關問題