我试图连接到一个可用的修复服务器使用快速修复在python,我正面临一些问题,我无法解决。我已经检查了this question,它看起来与我所面临的非常相似,但对于如何解决这个问题却一无所知。显然,这是一个与我的配置文件有关的问题,但我已经检查了一遍,但仍然不走运。
我在用这个ini文件。
[DEFAULT]
PersistMessages=Y
ConnectionType=initiator
UseDataDictionary=Y
StartTime=00:00:00
EndTime=23:59:00
FileStorePath=incoming
FileLogPath=outgoing
[SESSION]
StartTime=00:00:00
SenderCompID=8826
SenderSubID=350
EndTime=00:00:00
ConnectionType=initiator
ApplVerID=9
BeginString=FIXT.1.1
DefaultApplVerID=9
TransportDataDictionary=FIXT11.xml
AppDataDictionary=FIX50SP2.xml
TargetCompID=XMEF
TargetSubID=M3
SocketConnectPort=8238
SocketConnectHost=10.166.0.2
SocketUseSSL=Y
SSLEnable=Y
HeartBtInt=20
ReconnectInterval=30
SSLValidateCertificates=Y
当我试图连接时,我在控制台中得到了下一个结果。
Logon msg to Admin
<20211014-14:31:56.000000000, FIXT.1.1:8826->XMEF, outgoing>
(8=FIXT.1.19=12035=A34=149=882650=35052=20211014-14:31:56.00056=BMEX57=EQ1408=T5.1098=0108=20553=8826350554=*****1137=910=253)
<20211014-14:31:56.000000000, FIXT.1.1:8826->XMEF, event>
(Initiated logon request)
<20211014-14:31:57.000000000, FIXT.1.1:8826->XMEF, incoming>
(8=FIXT.1.19=12935=A34=152=20211014-14:31:57.14315949=BMEX50=EQ56=882657=35098=0108=201137=91408=T5.10464=Y21504=100021505=2021072110=245)
<20211014-14:31:57.000000000, FIXT.1.1:8826->XMEF, event>
(Message 1 Rejected: CompID problem)
<20211014-14:31:57.000000000, FIXT.1.1:8826->XMEF, event>
(Tried to send a reject while not logged on)
<20211014-14:31:57.000000000, FIXT.1.1:8826->XMEF, event>
(Disconnecting)
我在应用程序类中的toAdmin方法是
def toAdmin(self, message, sessionID):
msg_type = fix.MsgType()
message.getHeader().getField(msg_type)
if msg_type.getString() is fix.MsgType_Logon:
message.getHeader().setField(fix.StringField(34, "1"))
message.getHeader().setField(fix.SenderCompID("8826"))
message.getHeader().setField(fix.SenderSubID("350"))
message.getHeader().setField(fix.StringField(1408, "T5.10"))
message.getHeader().setField(fix.TargetCompID("BMEX"))
message.getHeader().setField(fix.TargetSubID("EQ"))
message.setField(fix.Username("8826350"))
message.setField(fix.Password("******"))
print("Logon msg to Admin")
我也用这种方式修改了FIXT1.1登录消息,但我认为这没关系
<message msgcat='admin' msgtype='A' name='Logon'>
<field name='EncryptMethod' required='Y'/>
<field name='HeartBtInt' required='Y'/>
<field name='RawDataLength' required='N'/>
<field name='RawData' required='N'/>
<field name='ResetSeqNumFlag' required='N'/>
<field name='NextExpectedMsgSeqNum' required='N'/>
<field name='MaxMessageSize' required='N'/>
<field name='TestMessageIndicator' required='N'/>
<field name='Username' required='N'/>
<field name='Password' required='N'/>
<field name='DefaultCstmApplVerID' required='N'/>
<field name='BusinessSessionDate' required='N'/>
<field name='MaxMsgPerSecond' required='N'/>
<field name='DefaultApplVerID' required='Y'/>
<component name='MsgTypeGrp' required='N'/>
</message>
</messages>
<components>
<component name='MsgTypeGrp'>
<group name='NoMsgTypes' required='N'>
<field name='RefMsgType' required='N'/>
<field name='MsgDirection' required='N'/>
<field name='RefApplVerID' required='N'/>
<field name='RefCstmApplVerID' required='N'/>
</group>
</component>
</components>
<fields>
<field number='1408' name='DefaultCstmApplVerID' type='STRING'/>
<field name='MaxMsgPerSecond' number='21504' type='INT'/>
<field name='BusinessSessionDate' number='21505' type='LOCALMKTDATE'/>
我已经检查了使用Wireshark发送或接收的FIX消息,我只是在一个没完没了的循环中发送登录消息(MsgType=A)和接收登录消息、网络状态响应(MsgType=BD)和多个注册指令响应(MsgType=p)。我猜想这是由于我的ini文件中的ReconnectInterval设置为30。但这里的神秘之处在于,我的机器没有发送任何RejectMsg (我猜是MsgType=3),拒绝信息只是显示在控制台中,而不是发送到网络。我认为隧道本身正在被切断作为默认行为从快速修复,当有问题时,但甚至不确定。
我的问题是,我做错了什么?我认为quickfix是在互翻一个conexion,它被服务器接受并且不正常,但是我不知道为什么,所以我不能修复它。
有什么想法吗?
非常感谢你的帮助
发布于 2021-10-15 08:02:47
我想我已经找到问题了。参考TargetCompID和TargetSubID的配置文件信息不被考虑创建登录消息,但显然它们被认为是双重检查服务器响应。在ini文件和toAdmin方法中有不同的值。修改ini文件中的这些值以使它们与toAdmin中提供的值对齐,似乎解决了这个问题。
谢谢你给我读:_)
https://stackoverflow.com/questions/69573166
复制相似问题