You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用quickfix连接FIX服务器报CompID错误无法登录

问题原因
  • 核心错误:配置与会话实际参数不匹配。你在ini配置文件的SESSION段填写的TargetCompID=XMEF、TargetSubID=M3是错误值,对接的服务器返回的登录消息中SenderCompID=BMEX、SenderSubID=EQ。QuickFIX会严格校验收到消息的头部字段:收到消息的SenderCompID必须等于本地配置的TargetCompID,收到消息的TargetCompID必须等于本地配置的SenderCompID,SenderSubID/TargetSubID校验规则同理,校验不通过就会触发CompID problem错误,直接断开连接。
  • 次要错误:你在toAdmin方法中硬编码修改登录消息的头部TargetCompID、TargetSubID为正确值,但没有同步修改ini配置,导致发送的登录消息符合服务器要求,但本地校验服务器返回消息时还是用错误的配置参数,触发校验失败。
  • 额外小问题:配置的会话时间存在冲突,DEFAULT段EndTime=23:59:00,SESSION段EndTime=00:00:00,可能引发会话生命周期异常。
修复方案
  1. 优先修改ini配置文件的SESSION段参数,替换为实际的正确值:
[SESSION]
# 保留原有其他配置,修改以下两个参数
TargetCompID=BMEX
TargetSubID=EQ
# 建议统一会话时间,全天运行可调整为
EndTime=23:59:59
  1. 精简toAdmin方法代码:SenderCompID、SenderSubID、TargetCompID、TargetSubID、MsgSeqNum(34)这些标准字段QuickFIX会自动从配置和会话状态中读取填充,不需要手动硬编码设置,避免手动赋值和配置不一致的问题,仅保留自定义字段、用户名密码的设置即可,参考修改后的代码:
def toAdmin(self, message, sessionID):
    msg_type = fix.MsgType()
    message.getHeader().getField(msg_type)
    if msg_type.getString() == fix.MsgType_Logon:
        message.getHeader().setField(fix.StringField(1408, "T5.10"))
        message.setField(fix.Username("8826350"))
        message.setField(fix.Password("******"))
        print("Logon msg to Admin") 
  1. 排查SSL问题时可临时把SSLValidateCertificates=Y改为SSLValidateCertificates=N,确认连接正常后再按需开启证书校验。
补充说明

你观察到的拒绝消息未实际发送是正常现象:QuickFIX在会话未完成登录状态下检测到协议错误时,只会在本地打印日志,不会对外发送拒绝消息,会直接断开连接。反复重连是因为你配置了ReconnectInterval=30,解决CompID校验问题后重连现象就会消失。

内容的提问来源于stack exchange,提问作者Xaruman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:45:07