Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Quickfix-读取自定义重复组_Python_Quickfix - Fatal编程技术网

Python Quickfix-读取自定义重复组

Python Quickfix-读取自定义重复组,python,quickfix,Python,Quickfix,此问题与未正确回答的问题几乎相同: Windows上的python 2.7.15、quickfix 1.15.1、FIX 4.2 我有一个来自交易平台提供商的自定义数据字典,在执行报告中有自定义字段和组。完整的XML可在以下位置获得:。具体而言,集团的定义如下: <group name='NoSecurityAltID' required='N'> <field name='SecurityAltID' required='N' />

此问题与未正确回答的问题几乎相同:

Windows上的python 2.7.15、quickfix 1.15.1、FIX 4.2

我有一个来自交易平台提供商的自定义数据字典,在执行报告中有自定义字段和组。完整的XML可在以下位置获得:。具体而言,集团的定义如下:

        <group name='NoSecurityAltID' required='N'>
            <field name='SecurityAltID' required='N' />
            <field name='SecurityAltIDSource' required='N' />
返回属性错误

奇怪的是,没有ContractBrokers可用作属性,但它不是自定义词典中的组之一,而是标准4.2词典中的组。因此,我认为有一些错误,它不是解析自定义词典,但我已经验证了它是

我不熟悉quickfix(和python),所以可能犯了一个基本错误。但这已经让我耽搁了很长时间,所以我真的很想知道一些方向

更新:

因此,我只能通过此方法访问标准Fix4.2组。我现在创建了一个组:

group = quickfix.Group(454, 455)
其中,454=NoSecurityAltID,455=SecurityAltID

现在,我正在努力读取所需特定SecurityAltIDSource的字符串。以下是该小组的概况:

我想读取“别名”和“名称”,但只能通过访问SecurityAltIDSource的标记号

message.getGroup(1, group)
group.getField(456)
如何访问所需字段的字符串

谢谢

更新2:

这是一个简单的错误(尽管不是一个很快就能解决的错误)。我可以通过以下方式访问我想要的字段:

group.getField(455)

我担心使用字段整数可能不像其他方法那样可靠。有没有更好的方法(除了重新编译我无法理解的引擎之外)?

这可能是一个延迟很久的回复。我遇到了同样的问题,并能够通过以下方式解决它

您可以使用quickfix标记,而不是使用字段编号,该标记将在幕后使用正确的标记。我在这里使用了一个示例标记“NoAlloc”,但您可以使用任何您想要的组

import quickfix as qfix

# how many items are in the group
count = fixmsg.groupCount(qfix.NoAllocs().getTag())

# Getting the fields where 1 is the item in the list you want to retrieve
# from the repeating group. Index starts from 1 (not 0)
field_set = message.getGroupPtr(1, qfix.NoAllocs().getTag())

field_set.getField(qfix.AllocAccount())
注意:对于自定义组,您需要定义自己的字段和组

# Sample Field Declaration
class SampleField1(qfix.StringField):
    def __init__(self, data=None):
        if data is None:
            qfix.StringField.__init__(self, 456)
        else:
            qfix.StringField.__init__(self, 456, data)

# NoSampleGroup Field Declaration
class NoSampleGroup(qfix.IntField):
    def __init__(self, data=None):
        if data is None:
            qfix.StringField.__init__(self, 879)
        else:
            qfix.StringField.__init__(self, 879, data)

# Sample Group Declaration
class SampleGroup(qfix.Group):
    def __init__(self):
        order = qfix.IntArray(4)
        order[0] = 879     # This is the NoSamppleGroup field
        order[1] = 456     # This is the field in the repeating group
        order[2] = 0
        fix.Group.__init__(self, 879, 456, order)

这是一个非常需要的解决方案,感谢您的发布。tl;dr:使用msg.getGroupPtr而不是msg.getGroup来避免奇怪的快速修复问题。
# Sample Field Declaration
class SampleField1(qfix.StringField):
    def __init__(self, data=None):
        if data is None:
            qfix.StringField.__init__(self, 456)
        else:
            qfix.StringField.__init__(self, 456, data)

# NoSampleGroup Field Declaration
class NoSampleGroup(qfix.IntField):
    def __init__(self, data=None):
        if data is None:
            qfix.StringField.__init__(self, 879)
        else:
            qfix.StringField.__init__(self, 879, data)

# Sample Group Declaration
class SampleGroup(qfix.Group):
    def __init__(self):
        order = qfix.IntArray(4)
        order[0] = 879     # This is the NoSamppleGroup field
        order[1] = 456     # This is the field in the repeating group
        order[2] = 0
        fix.Group.__init__(self, 879, 456, order)