FIX Чтение повторяющихся групп

У меня есть файл журнала FIX. Я перебираю строки, помещая каждую строку в

Message m = new Message(str, false)

Потому что по какой-то причине проверка файла не проходит (даже первой строки). Теперь я вижу, что это тип 35=X и 268=4 (т.е. NoMDEntries=4, поэтому в сообщении должно быть 4 группы)

НО, на дисплее отладки я не вижу никаких групп. m.base._groups имеет счетчик 0.

Рассматриваемая строка:

1128=9 | 9=363 | 35=X | 49=CME | 34=3151 | 52=20121216223556363 | 75=20121217 | 268=4 | 279=0 | 22=8 | 48=43585 | 83=902 | 107=6EH3 | 269=4 | 270=13186 | 273=223556000 | 286=5 | 279=0 | 22=8 | 48=43585 | 83=903 | 107=6EH3 | 269=E | 270=13186 | 271=9 | 273=223556000 | 279=0 | 22=8 | 48=43585 | 83=904 | 107=6EH3 | 269=F | 270=13185 | 273=223556000 | 279=1 | 22=8 | 48=43585 | 83=905 | 107=6EH3 | 269=0 | 270=13186 | 271=122 | 273=223556000 | 336=0 | 346=10 | 1023=1 | 10=179 | 

Другое дело, как мне читать группы? Инстинктивно я хочу сделать что-то вроде

for (int i = 1; i <= noMDEntries; i++) {
    Group g = m.GetGroup(i);
    int action = Int32.Parse(g.GetField(279));
    ....
}

Но это не так, и я не нашел документации с лучшими объяснениями.

Спасибо за помощь, Йонатан.


person Yonatan K    schedule 11.03.2013    source источник
comment
Используете ли вы оригинальный QuickFIX (C++ с оболочкой C#) или QuickFIX/n (собственный C# impl)?   -  person Grant Birchmeier    schedule 11.03.2013


Ответы (1)


Судя по вашим фрагментам кода, вы используете QuickFIX/n, нативную реализацию C#, поэтому я отвечу соответственно.

1) Создание вашего сообщения не удается, потому что вы не предоставили DataDictionary.

Вместо этого используйте Message::FromString:

Message m = new Message();
m.FromString(msg_str, false, data_dic, data_dic, someMsgFactory);

Еще лучше использовать MarketDataIncrementalRefresh::FromString, чтобы получить правильный тип возвращаемого значения.

Вы можете увидеть некоторые варианты использования этой функции здесь:
https://github.com/connamara/quickfixn/blob/master/UnitTests/MessageTests.cs

2) Чтобы читать группы... ну, в QF/n есть страница документации по этому вопросу, которая, я думаю, довольно хорошо объясняет это.
http://quickfixn.org/tutorial/repeating-groups

person Grant Birchmeier    schedule 11.03.2013
comment
Я использовал код из группового теста, загрузил FIX44.xml в словарь данных, но FromString выдает UnsupportedVersion: 9 Просматривая лог, тега нет 8. Может быть дело в этом? Что произойдет, если я вручную добавлю его в начало каждой строки журнала? - person Yonatan K; 11.03.2013
comment
Я не знаю, какой журнал вы используете в качестве входных данных, но если ваши сообщения FIX не начинаются с 8=, то они недействительны сообщения FIX. - person Grant Birchmeier; 11.03.2013