2016-08-16 2 views
1

Предоставляет ли QuickFIX возможность получения ВСЕХ существующих полей входящего сообщения FIX за один шаг? (. Я использую версию 1.14.3 для Python)Получение всех существующих полей полученного сообщения FIX с помощью QuickFIX

Согласно QuickFix документации, можно получить значение поля определенным образом:

price = quickfix.Price() 
field = message.getField(price) 
field.getValue() 

Различные типы сообщений содержат различные поля, таким образом, что для каждое поле будет неудобно. Более того, иногда неизвестно, существуют ли какие-либо поля в сообщении. Как получить все поля сообщения, не зная, какие поля он содержит?

+0

Зачем вам нужно получать все поля в сообщении? Quickfix проверяет достоверность сообщения, то есть проверяет наличие необходимых полей и затем отклоняет/принимает его. Поиграйте со своей конфигурацией, чтобы сделать это, вместо того, чтобы делать это в коде. Если вы хотите, чтобы определенные поля присутствовали, отметьте их как обязательные и попросите вашего контрагента (-ов) согласиться с ним. – DumbCoder

+0

Я хочу, потому что мне нужно получать много разных сообщений FIX, которые могут содержать много разных типов полей, поэтому получение всех полей в одном совке было бы намного проще, чем определить, какие поля я должен получить для каждого типа сообщений. Это займет много времени и сделает код сложным без уважительной причины. –

+0

'различные виды сообщений FIX' Что вы имеете в виду? Разные версии? Или разные сообщения FIX? – DumbCoder

ответ

0

Я не знаю метода. Это то, что я делаю, с message поступающую FIX сообщение:

tags = re.findall(r'(?<=\x01).*?(?==)', str(message))

Тогда, где FIX = {'1':fix.Account(), '2':fix.AdvId(), ...}, вы можете получить все значения, делая

for tag in set(tags)&set(FIX.keys()): 
    message.getField(FIX[tag]) 

Очевидно, что вы должны импортировать re модуль.

Смежные вопросы