Quickfix 58 =有条件要求的字段缺失

时间:2017-02-04 13:41:54

标签: 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

取消订单:

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

最好的问候,米哈伊尔

2 个答案:

答案 0 :(得分:3)

"有条件地要求缺少字段"表示您正在尝试提取不存在的可选字段。 (DD并不要求它,但是用户的逻辑期望它在那里,因此"有条件地需要"。)

第一条35=j消息说:

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

不幸的是,该消息并未说明哪个字段是问题,但基本上,您正在执行此操作(原谅我的伪代码):

var x = msg.getSomeOptionalField()

但你需要这样做:

var x = null;
if (msg.checkIfSomeOptionalFieldIsPresent())
    x = msg.getSomeOptionalField();

答案 1 :(得分:0)

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

58是文本字段。在这种情况下,58之后的文本是错误消息。标签值对372 = 83表示:所引用的消息(即缺失的标签)是标签83.

标记83是报告系列中的消息序列号。 FIXimate表示83“用于承载交易报告方所代表的填充的报告序列号。”

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

您发送消息:

20170203 15:44:04.225:8 = FIX.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.

那应该清理一下。如果它不起作用,请告诉我。