我正在尝试连接到 CQG FIX API。 我的 python 代码与 StoneX 配合得很好。 但是,登录 CQG 需要一些额外参数: 发件人子 ID =(值) 原始数据=(值)
尽管这些的 FIX 编号代码包含在 SWIG 生成的 Quickfix.py 中,但实际变量并非: SENDERCOMPID = cvar.SENDERCOMPID(使用该变量) SENDERSUBID = cvar.SENDERSUBID(此行缺失)
sessionsettings.h 文件中也缺少此内容。 当我将适当的行添加到 sessionsettings.h 时,swig 脚本“swig.sh”会生成一个包含适当行的新的 Quickfix.py: SENDERSUBID = cvar.SENDERSUBID
但是,当我尝试将这个新的快速修复程序包含在 python 程序中时,出现以下错误: delete_SwigPyIterator 模块不在 _quickfix 中
我降级到 Swig 3.0.10,这是生成有效的原始快速修复程序的版本,我收到了相同的错误消息。 任何有关此问题的帮助将不胜感激......
请逐一尝试以下步骤。我想我在某个时候遇到过这个问题,但我不太记得我到底是如何解决它的......因为我尝试了很多事情......:)
确保 SWIG 版本与最初生成工作的 Quickfix.py 所使用的版本匹配。由于 SWIG 3.0.10 之前可以运行,请确认已安装此版本:
swig -version
导航到您的 FIX API 源目录并删除旧的构建工件:
make clean
使用具有正确 SWIG 版本的 swig.sh 脚本重新生成 Quickfix.py:
./swig.sh
如果 SENDERSUBID 丢失,请确保它在 sessionsettings.h 文件中正确定义。添加以下行: #define SENDERSUBID 50 // 将 50 替换为正确的 FIX 字段编号 更新sessionsettings.h后,再次运行构建过程以将其包含在生成的quickfix.py中
_quickfix模块必须与生成的quickfix.py保持一致。如果不匹配,请重建_quickfix
make
重新生成quickfix.py和_quickfix后,确保Python可以正确加载模块。测试集成
import quickfix
print(quickfix.SENDERSUBID)
如果定义正确,这应该打印字段编号
检查生成的 _quickfix_wrap.cxx 文件中是否有 delete_SwigPyIterator 引用。如果不存在,请修改 SWIG 接口文件 (quickfix.i) 以显式包含迭代器声明
%include <iterator>
对接口文件进行更改后,重新生成并重建所有 SWIG 绑定
./swig.sh
make
如果错误仍然存在,请通过修改 swig.sh 脚本以包含来启用详细日志记录
swig -python -c++ -verbose -o _quickfix_wrap.cxx quickfix.i