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 

所以我相信错误在于我的重置时间。何时可以安全地重置序列号以及如何操作?

4

1 回答 1

2
ResetOnLogon=Y 
ResetOnLogout=Y 
ResetOnDisconnect=Y 

默认情况下,当您登录/注销/断开连接时,您正在重置消息序列号。因此,当您在设置会话后在代码中重置序列号时,它将被对方拒绝。

如果您不想断开与现有连接的连接,您唯一的选择是阅读拒绝消息并使用拒绝消息中提到的序列号。在已经存在的会话中重置序列号将是一件麻烦事,即用正确的序列号重建消息,然后重新传输它。最好只在您登录/注销/断开连接时重置序列,quickfix 引擎将默认执行此操作,因为您已在配置文件中设置了标志。

于 2011-12-28T15:08:22.060 回答