1

QuickFix の公式 Web サイトが機能していないため、ここで質問します。API の準備に対するブローカー (FXCM) の要求に応えようとしています。私はクイックフィックス .NET v1.13.3 を使用しています。要求の 1 つは、1 日に 1 回シーケンス番号をリセットする必要があり、接続がまだ機能している必要があるというものでした。しかし、次を使用してシーケンス番号をリセットすると:

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 

ログイン/ログアウト/切断すると、デフォルトでメッセージシーケンス番号がリセットされます。したがって、シーケンス番号をリセットすると、セッションを設定した後のコードで、相手側によって拒否されます。

既存の接続から切断したくない場合は、拒否メッセージを読み取り、拒否メッセージに記載されているシーケンス番号を使用するしかありません。既存のセッションでシーケンス番号をリセットすることは厄介なことです。つまり、正しいシーケンス番号でメッセージを再構築してから、再送信します。構成ファイルにフラグを設定しているため、ログオン/ログオフ/切断時にのみシーケンスをリセットすることをお勧めします。これは、クイックフィックスエンジンがデフォルトで実行します。

于 2011-12-28T15:08:22.060 に答える