QuickFIX从登录过程中删除标记

2024-09-27 23:51:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用QuickFIX和Python启动到fixserver进程的连接,该进程处理FIX5.0SP2。当我尝试启动连接时,收到以下消息后会断开连接:(Message 1 Rejected: Required tag missing:1137)。 此标记不是fixserver进程所必需的,我正试图从登录过程中删除它。我从FIXT11.xml中删除了它,并为此创建了一个自定义xml,但是没有成功。我错过什么了吗?我想你可以很容易地将它们从强制转换为非强制?在

以下是我的配置:

[DEFAULT]
ConnectionType=initiator
ReconnectInterval=60
DefaultApplVerID=FIX.5.0SP2
UseDataDictionary=N
ResetOnLogout=Y
ResetOnLogon=Y
AppDataDictionary=/home/foo/Documents/QuickFix/fix_specs/FIX50SP2CustomTags.xml
TransportDataDictionary=/home/foo/Documents/QuickFix/fix_specs/FIXT11CustomTags.xml

[SESSION]
BeginString=FIXT.1.1
ConnectionType=initiator
SenderCompID=FIXSRV
TargetCompID=RTD
ReconnectInterval=30
HeartBtInt=30
StartTime=00:30:00
EndTime=23:30:00
SocketConnectProtocol=TCP
SocketConnectPort=1284
SocketConnectHost=X.X.X.X
FileStorePath=/home/foo/Documents/QuickFix/data
FileLogPath=/home/foo/Documents/QuickFix/logs
ValidateFieldsOutOfOrder=N
ValidateFieldsHaveValues=N
#ValidateUserDefinedFields=N`

下面是带有fix消息的quickfix输出:

^{pr2}$

更新: 我试图将字典中的字段<field name='DefaultApplVerID' required='Y'/>更改为required='N',但没有任何效果。其他字段可以更改为非强制字段,如果未设置,则跳过这些字段。这个特定的强制fix5.0SP2字段是硬编码的,不能是非强制性的?在


Tags: 消息homefoo进程xmlfixdocumentsquickfix
3条回答

你有

UseDataDictionary=N

我想只要发起方/接受方数据字典是同步的,这就是问题所在。在

你的理解是正确的。字段DefaultApplVerID(1137)的检查是在QuickFix的引擎中硬编码的,因为它是必需的,如@Christian Quisbert的标题规范所述。在

我没有Python版本的QuickFix,只有Java版本。但我认为实现应该相互协调,没有太大的差异。在

如果看一下Java版本中quickfixj-core(我指的是quickfix-2.1.0)项目下的Session.java,有一个方法名为:

private void next(Message message, boolean isProcessingQueuedMessages) throws FieldNotFound, RejectLogon, IncorrectDataFormat, IncorrectTagValue, UnsupportedMessageType, IOException, InvalidMessage { ... }

第953行开始,有一个用于处理回复登录消息的代码部分,如下所示:

^{pr2}$

这意味着,如果BeginString(8)等于FIXT.1.1,并且您不能简单地通过配置跳过此验证,则quickfixj引擎预期传入登录响应中存在字段{}。在

必须配置DefaultApplVerID。检查文件: Configuring QuickFIX

DefaultApplVerID:

Required only for FIXT 1.1 (and newer). Ignored for earlier transport versions. Specifies the default application version ID for the session. This can either be the ApplVerID enum (see the ApplVerID field) or the BeginString for the default version.

如果删除[DEFAULT]配置的DefaultApplVerID=FIX.5.0SP2行,quickfix将显示以下内容:

Configuration failed: ApplVerID is required for FIXT transport

在任何情况下,请尝试将其置于[SESSION]中并按如下方式设置:

DefaultApplVerID=9

相关问题 更多 >

    热门问题