我正在尝试使用 QuickFix/J lib 生成由我的 TargetCompID 执行的“列表订单”(外汇订单)。
如果我正确理解 FIX 消息标准,我的消息必须包含以下字段(我已将值放在括号中):
标题部分
- 8 开始字符串 (FIX.4.4)
- 9 BodyLength(发送时由quickfixj计算并提供)
- 35 MsgType (E = NewOrderList)
- 34 MsgSeqNum(将在发送时由 quickfixj 计算和提供)
- 49 SenderCompId(就是我)
- 52 SendingTime(发送时由quickfixj计算并提供)
- 56 TargetCompId(这是我的交易对手,将执行我的外汇订单)
然后是身体部位
- 66 ListId (uniq id 计算)
- 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)
}
但是这样做,在我的 quickfixj 应用程序的回调函数 toApp 中(“这是您正在发送给交易对手的应用程序消息的回调”),在参数 (syso(message)) 中显示消息表明只有一个订单在我的信息中,这是我发出的最后一个命令。
看起来它们是我们可以在 QuickFixJ 中创建的一些“组”,我们可以在同一条消息中添加多个组。但是有很多类型的组,我不知道什么组适合我的“列表顺序”,如果有的话?我看到有一个 Message 的子类,它是 NewOrderList(它是我的 MsgType = E),但它不是一个“组”;并且必须可以直接创建 Message 并提供 MsgType ......
或者我可能没有正确理解我必须提供的 FIX 消息标准和字段?
问候,
亚历克斯