Я пытаюсь создать «список ордеров» (ордеров форекс), которые будут выполняться моим TargetCompID с помощью QuickFix/J lib.
Если я правильно понимаю стандарт сообщения FIX, мое сообщение должно иметь следующие поля (я указал свои значения в скобках):
Заголовок
- 8 Начальная строка (FIX.4.4)
- 9 BodyLength (будет вычисляться и предоставляться quickfixj при отправке)
- 35 MsgType (E = NewOrderList)
- 34 MsgSeqNum (будет вычислено и предоставлено quickfixj при отправке)
- 49 SenderCompId (это я)
- 52 SendingTime (будет вычислено и предоставлено quickfixj при отправке)
- 56 TargetCompId (это мой контрагент, который будет выполнять мои ордера FX)
Затем часть тела
- 66 ListId (вычислен уникальный идентификатор)
- 68 ToNoOrders (количество моих заказов в списке)
- 73 NoOrders (такое же значение счетчика, так как я сразу сгенерирую полный список заказов)
Затем повторите список следующих полей (одно поле списка для каждого заказа в моем списке):
- 11 ClOrdId (идентификатор моего заказа)
- 67 ListSeqNo (индекс заказа в моем списке: от 1 до N; N = ToNoOrders = NoOrders)
- ... несколько других полей как 15 (валюта), 120 (SettlCurrency)
Для этого я сделал (в java/quickfixj):
Message message = new Message();
Header header = message.getHeader();
header.setField(new BeginString("FIX.4.4"));
header.setField(new MsgType("E"));
header.setField(new SenderCompID("it's me"));
header.setField(new TargetCompID("my counterparty"));
message.setField(new ListID(_fixListId));
message.setField(new TotNoOrders(_list.size()));
message.setField(new NoOrders(_list.size()));
int idx = 0;
for (Order order : _list) {
message.setField(new ClOrdID(order.getId()));
message.setField(new ListSeqNo(++idx));
//message.setField(.... other fields to add to describe my order)
}
Но при этом в функции обратного вызова toApp моего приложения quickfixj ("Это обратный вызов для сообщений приложения, которые вы отправляете контрагенту"), отображая сообщение в параметре (syso(message) ) показывает, что внутри моего сообщения только один заказ, и это последний заказ, который я поставил.
Кажется, это какая-то «группа», которую мы можем создать в QuickFixJ, и мы можем добавить несколько групп в одно и то же сообщение. Но существует множество групп, и я не понимаю, какая группа подходит для моего «порядка списка», если таковая имеется? Я вижу, что есть подкласс Message, который называется NewOrderList (это мой MsgType = E), но это не «группа»; и должна быть возможность создать сообщение и предоставить MsgType напрямую...
Или, может быть, я неправильно понимаю стандарт сообщения FIX и поля, которые я должен предоставить?
С уважением,
Алекс