C++ FIX 实现 --> 会话的用户无效。用户名和发件人 CompId 必须匹配



我使用QuickFix在c++中开发了一个机器人程序,当我发送Logon消息时,我会收到一个注销响应,说"会话的用户无效。Username和SenderCompId必须匹配">

这是我的信息:

8=FIXT.1.1|9=113|35=A|34=1|49=REM4820|52=20201008-22:22:59.886|56=ROFX|553=User|554=pass|98=0|108=30|141=Y|1137=9|10=054|

(出于隐私原因更改了用户和通行证(

这是回应:

8=FIXT.1.1|9=135|35=5|34=1|49=ROFX|52=20201008-22:33:00.356|56=REM4820|1128=9|58=Invalid user for session. Username and SenderCompId must match.|1409=1|10=124|

我尝试过的东西:

  • 我下载了这个python项目,并用它与Remarkets连接,得到了相同的结果。(和发送的相同登录消息(

  • 交换SenderCompID和TargetCompID,正如我在另一篇帖子中看到的那样,它帮助了一些人。

  • 让新用户使用新密码尝试不同的帐户,结果相同。

  • 没有发送用户和密码,因为Remarkets文档指出这是不必要的:主机没有响应

  • 使用SSL配置播放。我正在使用Stunnel4,但我认为如果";Username和SenderCompId必须匹配";接收者必须正在接收和阅读我的消息。

  • 忽略SSL并直接连接:对等方重置连接。

我的第一个也是最重要的问题是:我做错了什么

另一个可能真正有帮助的问题:

  • 有没有一种方法可以让我使用一个漂亮的GUI#OrNot连接(OS:ubuntu(,并检查FIX消息,看看连接的消息和不连接的消息之间的区别?这些都是我对python的意图,但我得到了同样的结果。

  • 有人知道Remarkets Alternative吗,把它归咎于Remarkets就像把它归咎给编译器一样,但我需要检查一下。

  • 为什么服务器用解释回答字段58,但有时我得到";对等方重置连接";?

Client.conf

[DEFAULT]
PersistMessages=Y
ConnectionType=initiator 
ReconnectInterval=60
FileLogPath=./Logs/ 
FileStorePath=./Sessions/
UseLocalTime=Y
UseDataDictionary=Y
AppDataDictionary=conf/spec/FIX50SP2_rofex.xml
TransportDataDictionary=conf/spec/FIXT11.xml
StartTime=00:00:00
EndTime=00:00:00
ValidateUserDefinedFields=N
ResetOnLogon=Y
ResetOnLogout=Y
DefaultApplVerID=FIX.5.0SP2
[SESSION]
BeginString=FIXT.1.1
SenderCompID=REM4820
TargetCompID=ROFX
SocketConnectHost=127.0.0.1
SocketConnectPort=9876
HeartBtInt=30
TimeInForce=Day
TradingSessionID=1
ScreenLogShowIncoming=Y
ScreenLogShowOutgoing=Y
ScreenLogEvents=Y
LogoutTimeout=5
LogonTimeout=30
ResetOnDisconnect=Y
RefreshOnLogon=Y
SocketNodelay=N
ValidateFieldsHaveValues=N
ValidateFieldsOutofOrder=N
CheckLatency=N

这肯定是交易对手特定的逻辑问题,而不是FIX协议问题。

让我们从字面上理解:

Username and SenderCompId must match.

单从这条消息来看,标签49(SenderCompID(和标签553(Username(必须具有相同的值,这一点似乎很清楚。

是吗?我猜他们没有。尝试将553设置为匹配49。

最新更新