【问题标题】:Error when sending message to Bloomberg via QuickFixJ通过 QuickFixJ 向 Bloomberg 发送消息时出错
【发布时间】:2021-09-15 13:36:35
【问题描述】:

我正在尝试通过 QuickFixJ 将数据包类型 X 发送到 Bloomberg。我能够成功连接,但是当我发送数据包时,我收到一条错误消息:

8=FIXT.1.1^A9=160^A35=X^A34=4^A49=ARHGBETA^A52=20210915-13:16:04.156^A56=BBGBETA^A1022=****^A22=1^A48=BQ4434677^A268=2^A279=0^A269=0^A270=99.00357818603516^A279=0^A269=1^A270=99.01358032226562^A10=060^A
8=FIXT.1.1^A9=253^A35=j^A49=BBGBETA^A56=ARHGBETA^A34=4^A52=20210915-13:16:04.380^A45=4^A372=X^A380=0^A58=Validation failed for incoming X packet:
In mDIncGrp: In groupMDEntries[0]: NULL component instrument_MarketData
In groupMDEntries[1]: NULL component instrument_MarketData

然而,我看不到如何定义组件 instrument_MarketData。我正在使用以下代码来生成组:

/**
 * Méthode de création d'un nouveau prix pour le publier sur Bloomberg
 * @param marketPrice
 * */
public MarketDataIncrementalRefresh createMarketDataIncrementalRefresh(MarketPrice marketPrice) {

    quickfix.fix50sp2.MarketDataIncrementalRefresh message = new MarketDataIncrementalRefresh();

    quickfix.fix50sp2.MarketDataIncrementalRefresh.NoMDEntries group = new MarketDataIncrementalRefresh.NoMDEntries();

    message.getHeader().setString(1022, "****");

    quickfix.fix50sp2.component.MDIncGrp mdIncGrp = new MDIncGrp();

    mdIncGrp.setString(48, marketPrice.getCUSIP());

    mdIncGrp.setString(22, "1");

    Instrument instrument =new Instrument();
    /**
     * Ajout prix Bid au message
     * */
    instrument.setString(279, "0");
    instrument.setString(269, "0");
    instrument.setString(270, marketPrice.getBid_kech().toString());
    group.set(instrument);
    mdIncGrp.addGroup(group);

    /**
     * Ajout prix Ask au message
     * */
    instrument.setString(279, "0");
    instrument.setString(269, "1");
    instrument.setString(270, marketPrice.getAsk_kech().toString());
    group.set(instrument);
    mdIncGrp.addGroup(group);

    message.set(mdIncGrp);

    return message;
}

我做错了什么?我应该定义一个自定义字典来发送消息,还是可以使用默认字典来发送消息?

提前非常感谢!

【问题讨论】:

    标签: bloomberg quickfixj


    【解决方案1】:

    您不需要自定义字典来发送自定义消息。字典验证仅针对received消息进行,因此您可能需要更改字典才能成功接收对方发送的响应。

    至于您的问题:该错误听起来好像您的小组中缺少有关该乐器的某些内容。查看您的代码,我认为您将组的内容混为一谈。我为您之前的一个问题发布了此链接:https://www.quickfixj.org/usermanual/2.3.0/usage/repeating_groups.html

    我认为重要的部分是您应该像这样将组添加到消息中:

    quickfix.fix42.MarketDataSnapshotFullRefresh.NoMDEntries group =
      new quickfix.fix42.MarketDataSnapshotFullRefresh.NoMDEntries();
    
    group.set(new MDEntryType('0'));
    group.set(new MDEntryPx(12.32));
    group.set(new MDEntrySize(100));
    group.set(new OrderID("ORDERID"));
    message.addGroup(group);      // important part
    

    在您的代码中,您将一个组添加到一个组 (mdIncGrp.addGroup(group)) 并在您真正应该使用addGroup() 的地方执行message.set(mdIncGrp)。因此,48/SecurityID 字段不会出现在 MDIncGrp 中,而是出现在根消息中。

    8=FIXT.1.1^....removed...^A22=1^A48=BQ4434677^A268=2^A279=0^A269=0^A270=99.00357818603516^A279=0^A269=1^A270=99.01358032226562^A10=060^A
                                     ^^^ 48 is here where it should really
                                          be in each of these groups starting with delimiter tag 279    
    

    【讨论】:

    • 感谢您的回复我正在尝试。我想在 Bloomberg 提供的文档中了解,他们声明组件 MdIncGrp 和 instrument_MarketData 需要发送消息,如果没有明确定义,quickfixj 如何确定这些组件存在?
    • 对不起,我不明白你的问题。 :)
    • 在彭博文档中,有一个包含必填字段的表格。 instrument_MarketData 和 MdIncGrp 被标记为 所以我想知道如果它们没有在消息中明确定义,接受者如何找到这些组件!谢谢!
    • 组件在数据字典中定义。编译 QFJ 时,它使用字典并根据字典生成类。
    • 好的非常清楚非常感谢您的帮助!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多