Чтение повторяющихся групп в пользовательских сообщениях с помощью Python Quickfix

Я пытаюсь читать из движка FIX с помощью Python и Quickfix, и мне удалось заставить движок распознавать пользовательские сообщения, изменив используемый словарь данных (с необходимыми группами сообщений).

Проблема, с которой я сейчас сталкиваюсь, заключается в чтении повторяющихся групп из пользовательских сообщений. В документации по быстрому исправлению показано следующее:

import quickfix
import quickfix42

noMDEntries = quickfix.NoMDEntries()
message.getField(noMDEntries)

group = quickfix42.MarketDataSnapshotFillRefresh.NoMDEntries()
MDEntryType = quickfix.MDEntryType()
MDEntryPx = quickfix.MDEntryPx()
MDEntrySize = quickfix.MDEntrySize()
orderID = quickfix.OrderID();

message.getGroup(1, group);
group.getField(MDEntryType);
group.getField(MDEntryPx);
group.getField(MDEntrySize);
group.getField(orderID);

... что подходит для сообщений FIX. Когда я пытаюсь сослаться на свое собственное сообщение следующим образом:

group = quickfix.CustomMessage.NoMDEntries()

... Я получаю ошибку атрибута.

Любые идеи о том, как читать повторяющиеся группы в пользовательских сообщениях?

Редактировать 1:

я нашел хак, но уверен, что есть лучший способ сделать это...

for i in range(int(message.getField(NoMDEntries):
    group = quickfix.Group(int(message.repeatingField), int(message.delimField))
    message.getGroup(i+1, group)
    print group.getField(MDEntryPx)
    #do something with repeating fields etc

...есть у кого идеи?


person pynoob    schedule 15.02.2012    source источник
comment
Ваше редактирование - твердое решение вашего вопроса. Стандарты quickfix, такие как сообщения о моментальных снимках рыночных данных, внутренне вызывают пользовательские экземпляры quickfix.Group так же, как и вы, — просто придерживаясь стандартных записей полей для повторителя и разделителя. Один совет заключается в том, что запись группы должна быть создана только один раз, и это может быть сделано вне вашего цикла! (шаблон групповой записи с одним экземпляром см. в документации по быстрому исправлению здесь: quickfixengine.org/quickfix/doc/html/python/).   -  person chinnychinchin    schedule 13.01.2017


Ответы (1)


Не уверен насчет заглушки Python, которую вы предоставили, но я вижу, возможно, проблему.

group = quickfix42.MarketDataSnapshotFillRefresh.NoMDEntries()

Здесь вы получаете объект внутреннего класса внутри объекта MarketDataSnapshotFullRefresh (вы, вероятно, ошиблись в написании MarketDataSnapshotFillRefresh).

group = quickfix.CustomMessage.NoMDEntries()

Здесь вы, вероятно, получите количество (количество) повторяющихся групп внутри повторяющейся группы вместо объекта класса.

Quickfix предоставляет метод getGroup для просмотра членов группы, поэтому используйте его, а не делайте это самостоятельно.

person DumbCoder    schedule 15.02.2012
comment
Спасибо за указатель... однако я не могу получить доступ к CustomMessage из словаря... есть идеи, как я могу ссылаться на поля и/или группы для пользовательских сообщений? - person pynoob; 16.02.2012