首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法用python使用quickfix登录修复服务器

无法用python使用quickfix登录修复服务器
EN

Stack Overflow用户
提问于 2021-10-14 15:12:15
回答 1查看 293关注 0票数 0

我试图连接到一个可用的修复服务器使用快速修复在python,我正面临一些问题,我无法解决。我已经检查了this question,它看起来与我所面临的非常相似,但对于如何解决这个问题却一无所知。显然,这是一个与我的配置文件有关的问题,但我已经检查了一遍,但仍然不走运。

我在用这个ini文件。

代码语言:javascript
运行
复制
[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

当我试图连接时,我在控制台中得到了下一个结果。

代码语言:javascript
运行
复制
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方法是

代码语言:javascript
运行
复制
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登录消息,但我认为这没关系

代码语言:javascript
运行
复制
<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,它被服务器接受并且不正常,但是我不知道为什么,所以我不能修复它。

有什么想法吗?

非常感谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-15 08:02:47

我想我已经找到问题了。参考TargetCompID和TargetSubID的配置文件信息不被考虑创建登录消息,但显然它们被认为是双重检查服务器响应。在ini文件和toAdmin方法中有不同的值。修改ini文件中的这些值以使它们与toAdmin中提供的值对齐,似乎解决了这个问题。

谢谢你给我读:_)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69573166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档