【问题标题】:QuickFIX/J Get fields and groups for customized data dictionaryQuickFIX/J 获取自定义数据字典的字段和组
【发布时间】:2022-07-17 04:54:13
【问题描述】:

如何使用 QuickFIX/J 获取自定义数据字典的字段和组?

我收到在自定义 MarketDataSnapshotFullRefresh(W 型)FIX 消息中传输的市场数据。据我了解,我不能为此使用破解方法。我对 Java 和 QuickFIX/J 不太熟悉,但是当我使用 QuickFIX/n 和 Python 时,我可以像这样为字段和组定义类:

class CustomField(fix.StringField):
    tag_number = *SomeTagNumber*

    def __init__(self, data=None):
        args = (self.tag_number,) if data is None else (self.tag_number, data)
        super(CustomField, self).__init__(*args)

    def getValue(self, message: object) -> str:
        try:
            if message.getField(self.tag_number):
                return message.getField(self.tag_number)
        except fix.FieldNotFound:  
            return None
        else: raise

class CustomGroupField(fix.StringField):
    tag_number = *SomeTagNumber*

    def __init__(self, data=None):
        args = (self.tag_number,) if data is None else (self.tag_number, data)
        super(CustomGroupField, self).__init__(*args)

    def getValue(self, message: object) -> str:
        try:
            if message.getField(self.tag_number):
                return message.getField(self.tag_number)
        except fix.FieldNotFound:  
            return None
        else: raise

class XXXGroup(fix.Group):
    def __init__(self):
        order = fix.IntArray(4)
        order[0] = No_XXX_UMD_Entries.tag_number    # This is the NoGroup field
        order[1] = XXX_UMD_Entry_ID.tag_number      # This is the field in the repeating group
        order[2] = CustomGroupField.tag_number
        order[3] = 0
        # fix.Group.__init__(self, order[0], order[1], order)
        args = (order[0], order[1], order)
        super(XXXGroup, self).__init__(*args)

    def getValue(self, field: object) -> str:
        try:
           if group.getField(tag_number):
                return group.getField(tag_number)
        except fix.FieldNotFound:  
            return None
        else: raise

然后我可以像这样在 fromApp(self, message, sessionID) 方法中获取值:

# Get value of the field
some_custom_field = CustomField().getValue(message)

# Get value in the group
group = XXXGroup()
    for idx in range(1, no_entries+1):
        message.getGroup(idx,group)
        custom_gr_field = group.getValue(CustomGroupField)

如何使用 QuickFIX/J 在 Java 中实现相同的逻辑?或者也许有更好的方法来使用 Java 中的自定义数据字典?也许你可以参考一些例子?

【问题讨论】:

    标签: java quickfix quickfixj quickfixn


    【解决方案1】:

    QuickFIX/J 使用 XML 文件作为字典。 要解析消息,您应该创建字典并使用它。代码如下:

    DataDictionary dataDictionary = new DataDictionary("FIX44.xml");
    Message message = new Message();
    message.fromString(text, dataDictionary, false);
    

    存储在 quickfixj jars 资源中的标准字典。例如,在https://github.com/quickfix-j/quickfixj/blob/master/quickfixj-messages/quickfixj-messages-fix44/src/main/resources/FIX44.xml 中存储 FIX 4.4 的字典

    对于自定义字典,您应该创建一个包含所有附加字段和组的 XML 文件。 您可以复制标准文件,重命名它,添加组并使用:DataDictionary dataDictionary = new DataDictionary("/var/my_dict/myFIX44.xml");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多