0

此问题相关,交易对手提供商引擎以某种方式设置为检查 FIX 标签的组顺序并拒绝任何超出预期顺序的内容。

  • 为什么预期的标签组顺序很重要?我想以给定的顺序验证标签会更快。
  • 预期标签组顺序如何设置?我知道这是一个随机哈希集,除了没有意义,它不依赖于数据字典中标签的顺序吗?
  • 除了重写一个类来设置组顺序之外,还有一个 quickfix 设置可以使用吗?

确切地说是 QuickFix 版本2.2.0,我发送以下消息

8=FIX.4.4 9=173 35=R 34=2 49=CLIENT 52=20200909-18:11:10.426 56=SIMULATOR 131=EEB85F9C 146=1 55=EUR/USD 460=4 167=FOR 38=1000.0 64=SP 15=EUR 1=FOR 553=test 1300=XOFF 10=086

并收到拒绝

8=FIX.4.4 9=145 35=3 34=2 49=SIMULATOR 52=20200909-18:11:10.427 56=CLIENT 45=2 58=The group 146 must set the delimiter field 460 371=55 372=R 373=15 10=224 

因此,在发送的消息中,标签460在标签之后55,我无法以相反的方式获取这些标签。在代码中我设置了重复组g

QuickFix.FIX44.QuoteRequest.NoRelatedSymGroup g = new QuickFix.FIX44.QuoteRequest.NoRelatedSymGroup();

并按我要查找的顺序将数据添加到组中,例如:

Product product = new Product(4);
g.Product = product;
Symbol symbol = new Symbol("EUR/USD");
g.SetField(symbol);

等等...我正在看,g.getFieldOrder但是g.SetFields还有其他方法吗?

在此处输入图像描述

据我所知,在其他 quickfix 版本1.6.2中,例如拒绝消息也是出于同样的原因。Out of order repeating group members

4

1 回答 1

0

感谢@ChristopheJohn,我在 QuickFixN 中使用了以下代码:

using QuickFix;

class MyGroup : Group
{
    private static int[] FIELD_ORDER = { 460, 1300, 167, 55, 15, 38, 64, 1, 553, 0 };

    public MyGroup() : base(146, 460, FIELD_ORDER) { }
}

我从我的消息构造方法中调用了MyGroup g = new MyGroup();

注意0字段顺序末尾的 。

于 2020-09-14T14:50:59.163 回答