Quickfix 58=有条件的必填字段缺失

Mik*_*yno 4 quickfix

如果我尝试更换或取消订单,我会收到一条消息 58=Conditionally Required Field Missing ,下一条消息包含 58=Invalid MsgType 以下日志:

换单(tgFZctx200U61是我这边的,FG是换的。):

20170203-15:44:04.225 : 8=FIX.4.49=15135=G34=349=tgFZctx200U6152=20170203-15:44:04.22556=FG1=U6111=270071221=138=240=241=2700744=11640054=155=RTS-3.1760=20170203-18:44:04.20510=028
20170203-15:44:04.225 : 8=FIX.4.49=23235=849=FG56=tgFZctx200U6134=352=20170203-15:43:56.98137=572984433198=F:572984433526=$01$11=270071241=2700717=exec-201702031001027616150=E39=E55=RTS-3.17461=FXXXXX54=138=140=2151=114=06=060=19700101-00:00:00.00010=213
20170203-15:44:04.275 : 8=FIX.4.49=11535=j34=449=tgFZctx200U6152=20170203-15:44:04.27556=FG45=358=Conditionally Required Field Missing372=8380=510=065
20170203-15:44:04.275 : 8=FIX.4.49=33335=849=FG56=tgFZctx200U6134=452=20170203-15:43:56.98237=572984753198=F:572984753526=$01$11=270071241=27007453=1448=tgFZctx200U61447=C452=317=3355471052150=539=01=FZ00U6155=RTS-3.1754=138=240=244=116400.00000336=9291151=214=06=060=20170203-15:43:56.98920008=-922337203685372211120018=[51000-3355471052-0]10=100
20170203-15:44:04.285 : 8=FIX.4.49=10335=349=FG56=tgFZctx200U6134=552=20170203-15:43:57.03345=4371=372373=1158=Invalid MsgType372=810=164
Run Code Online (Sandbox Code Playgroud)

取消订单:

20170203-15:26:19.178 : 8=FIX.4.49=15435=F34=349=tgFZctx200U6152=20170203-15:26:19.17856=FG11=270061237=57286383038=141=2700644=116470.0000054=155=RTS-3.1760=20170203-18:26:19.17810=013
20170203-15:26:19.188 : 8=FIX.4.49=20735=849=FG56=tgFZctx200U6134=352=20170203-15:26:11.92437=572863830198=F:572863830526=$01$11=270061241=2700617=exec-201702031001027615150=639=655=RTS-3.17461=FXXXXX54=138=140=2151=114=06=010=239
20170203-15:26:19.418 : 8=FIX.4.49=11535=j34=449=tgFZctx200U6152=20170203-15:26:19.41856=FG45=358=Conditionally Required Field Missing372=8380=510=070
20170203-15:26:19.418 : 8=FIX.4.49=33335=849=FG56=tgFZctx200U6134=452=20170203-15:26:11.92437=572863830198=F:572863830526=$01$11=270061241=27006453=1448=tgFZctx200U61447=C452=317=3354681208150=439=41=FZ00U6155=RTS-3.1754=138=140=244=116470.00000336=9291151=014=06=060=20170203-15:26:11.93120008=-922337203685267353520018=[51000-3354681208-0]10=080
20170203-15:26:19.418 : 8=FIX.4.49=10335=349=FG56=tgFZctx200U6134=552=20170203-15:26:12.16445=4371=372373=1158=Invalid MsgType372=810=161
Run Code Online (Sandbox Code Playgroud)

最好的问候,米哈伊尔

Gra*_*ier 7

“条件性必填字段缺失”表示您正在尝试提取不存在的可选字段。(DD 不需要它,但用户的逻辑期望它在那里,因此“有条件地需要”。)

第一条35=j消息说:

  • 45=3 - 发生这些的消息的序列号
  • 58=Conditionally Required Field Missing
  • 372=8 - 发生这种情况的消息类型
  • 380=5 - 与解释相同的代码 58

不幸的是,该消息没有说明哪个字段有问题,但基本上,您正在这样做(请原谅我的伪代码):

var x = msg.getSomeOptionalField()
Run Code Online (Sandbox Code Playgroud)

但你需要这样做:

var x = null;
if (msg.checkIfSomeOptionalFieldIsPresent())
    x = msg.getSomeOptionalField();
Run Code Online (Sandbox Code Playgroud)


Wap*_*iti 1

为了解析您自己的 FIX 消息,请使用FIXimate

58是文本字段。在本例中,58 之后的文本是错误消息。标签值对 372=83 表示:所引用的消息(即丢失的标签)是标签 83。

标签 83 是报告系列内消息的序列号。FIXimate 表示,83 是“用于携带交易报告端所表示的填充的报告序列号”。

这是您的 FIX 引擎将错误发送回交易所。您可以通过查看每条消息的 SenderCompID 和 TargetCompID 来判断。

您发送消息:

20170203 15:44:04.225:8=修复.4.49=15135=G34=3 49=tgFZctx200U61 52=20170203-15:44:04.225 56=FG

您会得到一份执行报告(35=8,可能确认订单取消/替换):

20170203-15:44:04.225 : 8=FIX.4.49=232 35=8 49=FG 56=tgFZctx200U61 lo9

您发送业务拒绝 (35=j):

20170203-15:44:04.275 : 8=FIX.4.49=115 35=j 34=4 49=tgFZctx200U61 52=20170203-15:44:04.275 56=FG 45=358=有条件的必填字段缺失372=8380=510= 065

如果不进一步分析,很难判断来自交易所的最后一条消息是什么,但它很可能是被替换订单的执行报告。它似乎是在原始执行报告后1毫秒发送的。

您的 FIX 引擎期望消息中出现某些数据。期望是在您的数据字典中设置的,该数据字典是一个 xml 文件,应由您的交易对手提供。有时(就像现在)此文件中存在错误,您必须打开它,找到有问题的消息(在本例中为原始执行报告),​​并告诉您的数据字典不要期待标签 83。

这应该可以解决问题。如果不起作用请告诉我。