FIX 4.4 FieldNotFound:找不到字段

FIX 4.4 FieldNotFound: Field not found

我从对方收到以下消息:

8=FIX.4.4|9=219|35=W|34=4|49=id|52=20200618-14:34:20.738|56=id1|42=20200618-14:34:20.688|55=EUR/USD|262=1|268=2|269=0|270=1.12083|271=500000|269=1|270=1.12084|271=500000|10094=2020.06.18 14:34:20.688|10=141|

消息包含字段 268 = 2,并且两组都以字段 269 开头,我正在尝试提取字段 270。我的代码如下所示:

message= quickfix.Message('8=FIX.4.4\x019=219\x0135=W\x0134=4\x0149=id\x0152=20200618-14:34:20.738\x0156=id1\x0142=20200618-14:34:20.688\x0155=EURUSD\x01262=1\x01268=2\x01269=0\x01269=1\x01270=1.12083\x01270=1.12084\x01271=500000\x01271=500000\x0110094=2020.06.18 14:34:20.688\x0110=141\x01')

group = quickfix44.MarketDataSnapshotFullRefresh.NoMDEntries()

fix_no_entries = quickfix.NoMDEntries()
message.getField(fix_no_entries)
no_entries = fix_no_entries.getValue() # print = 2 as expected

message.getGroup(1, group)

然而,当 运行 getGroup 行时,我得到错误:

FieldNotFound: Field not found

知道哪里出了问题吗?

再次感谢大家!

Quickfix 不知道您的消息结构,因此您需要提供一些有关如何解析消息的信息,否则它只是一堆没有分组的字段。

<message>
  <header>
    <field number="8"><![CDATA[FIX.4.4]]></field>
    <field number="9"><![CDATA[183]]></field>
    <field number="35"><![CDATA[W]]></field>
    <field number="34"><![CDATA[4]]></field>
    <field number="49"><![CDATA[id]]></field>
    <field number="52"><![CDATA[20200618-14:34:20.738]]></field>
    <field number="56"><![CDATA[id1]]></field>
  </header>
  <body>
    <field number="42"><![CDATA[20200618-14:34:20.688]]></field>
    <field number="55"><![CDATA[EURUSD]]></field>
    <field number="262"><![CDATA[1]]></field>
    <field number="268"><![CDATA[2]]></field>
    <field number="269"><![CDATA[0]]></field>
    <field number="269"><![CDATA[1]]></field>
    <field number="270"><![CDATA[1.12083]]></field>
    <field number="270"><![CDATA[1.12084]]></field>
    <field number="271"><![CDATA[500000]]></field>
    <field number="271"><![CDATA[500000]]></field>
    <field number="10094"><![CDATA[2020.06.18 14:34:20.688]]></field>
  </body>
  <trailer>
    <field number="10"><![CDATA[182]]></field>
  </trailer>
</message>

Quickfix 数据字典是配置消息解析器的方式。 Quickfix 已经附带了一些 pre-configured 词典,您可以根据需要自定义它。

data_dictionary = quickfix.DataDictionary("quickfix/FIX44.xml")
message= quickfix.Message('...', data_dictionary, True)
print(message.toXML())

现在消息已结构化,可以检索组数据:

<message>
  <header>
    <field number="8"><![CDATA[FIX.4.4]]></field>
    <field number="9"><![CDATA[183]]></field>
    <field number="35"><![CDATA[W]]></field>
    <field number="34"><![CDATA[4]]></field>
    <field number="49"><![CDATA[id]]></field>
    <field number="52"><![CDATA[20200618-14:34:20.738]]></field>
    <field number="56"><![CDATA[id1]]></field>
  </header>
  <body>
    <field number="42"><![CDATA[20200618-14:34:20.688]]></field>
    <field number="55"><![CDATA[EURUSD]]></field>
    <field number="262"><![CDATA[1]]></field>
    <field number="268"><![CDATA[2]]></field>
    <field number="10094"><![CDATA[2020.06.18 14:34:20.688]]></field>
    <group>
      <field number="269"><![CDATA[0]]></field>
    </group>
    <group>
      <field number="269"><![CDATA[1]]></field>
      <field number="270"><![CDATA[1.12083]]></field>
    </group>
    <group>
      <field number="270"><![CDATA[1.12084]]></field>
      <field number="271"><![CDATA[500000]]></field>
    </group>
    <group>
      <field number="271"><![CDATA[500000]]></field>
    </group>
  </body>
  <trailer>
    <field number="10"><![CDATA[182]]></field>
  </trailer>
</message>