我试图生成一个"列表订单" (forex orders)由我的TargetCompID用QuickFix / J lib执行。
如果我正确理解FIX消息标准,我的消息必须包含以下字段(我将我的值放在括号中):
标题部分
然后是身体部位
然后重复以下字段列表(列表中每个订单一个列表字段):
要做到这一点我已经完成了(在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))中的消息显示我的消息中只有一个订单,而且它是我放弃的最后一个订单。
看来他们是一些" group"我们可以在QuickFixJ中创建,我们可以在同一个消息中添加几个组。但是有很多类型的小组,我不知道哪个小组适合我的"列表顺序",如果有的话?我看到Message的子类是NewOrderList(它是我的MsgType = E),但它不是" group&#34 ;;并且必须可以创建Message并直接提供MsgType ...
或许我不能正确理解FIX消息标准和我必须提供的字段?
此致
亚历
答案 0 :(得分:3)
您应该使用QuickFIX / J中的预定义消息,而不是从头开始创建消息。
在你的情况下,我会开始查看quickfix.fix44.NewOrderList
。
通过使用此类,将在消息的页眉和页脚部分(BeginString,BodyLength,MsgType,CheckSum,...)中填充许多字段。然后,您只需要关注自己主要与消息的主要部分(即正文)。
对于重复组,可以使用帮助程序类在消息中设置该信息。例如。对于NewOrderList.NoOrders
:
string MyQueryTest(){
string returnValue;
try{
stmt->execute("UPDATE testtbl SET Name = 'Test' WHERE id = '2'");
}
catch(SQLException e){
returnValue = "false";
}
returnValue = "true";
return returnValue;
}
string MyValue = MyQueryTest();
答案 1 :(得分:1)
好的,我已经得到了它。
我使用了通用组,并手动设置了字段。
如此更新的代码解决方案是:
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) {
Group group = new Group(18, new ClOrdID().getTag()); //18 is the number of field I will add below inot the group, second paramaeter is the first field of the group
group.setField(new ClOrdID(order.getId()));
group.setField(new ListSeqNo(++idx));
//message.setField(.... other fields to add to describe my order)
message.addGroup(group);
}