2011-12-27 72 views
1

由於官方的QuickFix網站不工作,我在這裏問。 我正在努力滿足我的經紀人(FXCM)對API準備的要求。我正在使用quickfix .NET v1.13.3。其中一個要求是我需要每天重置一次序列號,並且連接必須仍然有效。但是,當我重置序列號使用:重置消息序列號而不重新連接

QuickFix.Session.lookupSession(mSessionID).setNextSenderMsgSeqNum(1); 
QuickFix.Session.lookupSession(mSessionID).setNextTargetMsgSeqNum(1); 

連接重新連接。有沒有辦法在不註銷的情況下重置它?

我的配置文件:

[DEFAULT] 

#client connection 
ConnectionType=initiator 

#Logon & Logout timers 
LogonTimeout=1 
LogoutTimeout=1 

ValidateFieldsOutOfOrder=Y 
ValidateUserDefinedFields=Y 
ValidateFieldsHaveValues=Y 
AllowUnknownMsgFields=Y 
SocketTcpNoDelay=Y 

FileStorePath=Store 

CheckLatency=N 
CheckCompID=Y 

SendRedundantResendRequests=Y 
ContinueInitializationOnError=Y 

ResetOnLogon=Y 
ResetOnLogout=Y 
ResetOnDisconnect=Y 
ForceResync=Y 

[SESSION] 

#login info 
username=**** 
password=**** 

#protocol version 4.4 
BeginString=FIX.4.4 

#database and compid 
SenderCompID=***** 
TargetCompID=***** 
TargetSubID=****** 

HeartBtInt=30 
StartTime=01:00:00 
EndTime=22:00:00 
StartDay=Mon 
EndDay=Fri 
UseLocalTime=Y 

ReconnectInterval=20 

#data dictionary 
UseDataDictionary=Y 
DataDictionary=FXService.FXCM.xml 

我在日誌中發現了註銷消息此錯誤:

MsgSeqNum too low, expecting 12 but received 3 

所以我相信錯誤是在我正在重置的時間。什麼時候可以安全地重置序列號以及如何操作?

回答

2
ResetOnLogon=Y 
ResetOnLogout=Y 
ResetOnDisconnect=Y 

默認情況下,當您登錄/註銷/斷開連接時,您正在重置消息序列號。因此,當您重置序列號時,在您的代碼中建立會話後,它將被另一方拒絕。

您的唯一選擇是讀取拒絕消息並使用拒絕消息中提及的序列號(如果您不想斷開與現有連接的連接)。在已經存在的會話中重新設置序列號將會是一個麻煩事,即用正確的序列號重構消息,然後重新發送它。當你登錄/註銷/斷開連接時,只有重置序列時,quickfix引擎默認會這樣做,因爲你已經在配置文件中設置了標誌。

+0

謝謝,到目前爲止,我正在處理另一個項目,沒有時間。但是我決定讓quickfix自己管理序列號。 – kwitee 2012-01-05 06:45:10