由于官方的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
我在logout消息的日志中发现了这个错误:
MsgSeqNum too low, expecting 12 but received 3
所以我认为错误在于我的重置时间。何时可以安全地重置序列号以及如何操作?
答案 0 :(得分:2)
ResetOnLogon=Y
ResetOnLogout=Y
ResetOnDisconnect=Y
默认情况下,当您登录/注销/断开连接时,您正在重置消息序列号。因此,当您重置序列号后,在设置会话后的代码中,它将被另一方拒绝。
如果您不想断开与现有连接的连接,则唯一的选择是读取拒绝消息并使用拒绝消息中提到的序列号。重置已经存在的会话中的序列号将是麻烦的,即用正确的序列号重建消息,然后重新发送它。最好只在登录/注销/断开时重置序列,默认情况下,quickfix引擎会在配置文件中设置标志时执行此操作。