Как добавить валюту и SettlType в InstrmtMDReqGrp в MarketDataRequest ‹V›

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

Я попытался добавить поля Currency.FIELD и SettlType.FIELD, но в финальном сообщении они не отображаются.

Мне нужно отправить сообщение типа:

8=FIXT.1.1 9=222 35=V 34=1013 49=**** 52=20190117-17:23:48.670 56=**** 128=FGW 262=MD1 263=0 264=5 265=1 266=Y 146=1 55=GGAL 48=GGAL-0002-C-CT-ARS 167=GO 207=XMEV 15=ARS 63=2 267=9 269=0 269=1 269=2 269=4 269=5 269=7 269=8 269=В 269=3 10=215

Но я не могу поставить тег 15 и 63 перед тегом 267.

Мой код сейчас:

InstrmtMDReqGrp instrmtMDReqGrp = new InstrmtMDReqGrp();
NoRelatedSym noRelatedSym = new NoRelatedSym(1); //146          

instrmtMDReqGrp.set(noRelatedSym);

SettlType settlType = new SettlType(); // 63
settlType.setValue("2");

Currency currency = new Currency(); // 15
currency.setValue("ARS");       


instrmtMDReqGrp.setField(Currency.FIELD, currency);
instrmtMDReqGrp.setField(SettlType.FIELD, settlType);

В финальном сообщении эти поля не отображаются.

Я использую quickfixj с quickfixj-spring-boot-starter 2.2.1.


person Yoandy Pérez Villazón    schedule 24.04.2019    source источник


Ответы (2)


Вы забыли вызвать addGroup в сообщении, например:

fixMessage.addGroup(instrmtMDReqGrp);

Для повторяющихся групп в QuickFIX/J существует небольшая страница документации. , что демонстрирует это:

Создание сообщений с повторяющимися группами

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

package quickfix;

quickfix.fix42.MarketDataSnapshotFullRefresh message =
  new quickfix.fix42.MarketDataSnapshotFullRefresh(new Symbol("QF"));

quickfix.fix42.MarketDataSnapshotFullRefresh.NoMDEntries group =
  new quickfix.fix42.MarketDataSnapshotFullRefresh.NoMDEntries();

group.set(new MDEntryType('0'));
group.set(new MDEntryPx(12.32));
group.set(new MDEntrySize(100));
group.set(new OrderID("ORDERID"));
message.addGroup(group);

group.set(new MDEntryType('1'));
group.set(new MDEntryPx(12.32));
group.set(new MDEntrySize(100));
group.set(new OrderID("ORDERID"));
message.addGroup(group);
person TT.    schedule 30.04.2019

Какое сообщение об отклонении исправления вы получаете? Обычно он дает номер тега, который содержит ошибку, а также некоторое описание ошибки.

Обычно структура сообщений об исправлениях определяется словарем данных, предоставляемым Acceptor. Если этот словарь данных отличается от словаря, встроенного в библиотеку quickfixj, вам потребуется перекомпилировать базовую библиотеку quickfixj с этим словарем данных, чтобы сообщения анализировались правильно, а теги размещались в правильном порядке при создании новых сообщений.

person Eduardo Sanchez-Ros    schedule 30.04.2019