gpt4 book ai didi

fix-protocol - 如何使用自定义标签排序发送 FIX 消息?

转载 作者:行者123 更新时间:2023-12-05 01:13:41 31 4
gpt4 key购买 nike

在FIX服务器上发送订单请求并更改标签的顺序。

如果我想要输出由我安排的序列(而不是被服务器修改)。

public void send50(Order order) {

quickfix.fix50sp1.NewOrderSingle newOrderSingle = new quickfix.fix50sp1.NewOrderSingle(new ClOrdID(order.getID()),
sideToFIXSide(order.getSide()), new TransactTime(), typeToFIXType(order.getType()));
newOrderSingle.set(new OrderQty(order.getQuantity()));
newOrderSingle.set(new Symbol(order.getSymbol()));
newOrderSingle.set(new Price(order.getSharePrice()));
newOrderSingle.set(new Account("13501100"));
newOrderSingle.setField(new NoPartyIDs(1));
newOrderSingle.setField(new PartyIDSource('C'));
newOrderSingle.setField(new PartyRole(12));
newOrderSingle.setField(new PartyID("13501100"));**

这是用户给服务器的顺序,服务器排列为:

8=FIXT.1.1|9=173|35=D|34=5|49=135|52=20200131-05:35:12.956|56=PSE|1=13501100|11=1580448912441| 38=1000|40=1|44=10.78|54=1|55=AGI|59=0|60=20200131-13:35:12.956|447=C|448=13501100|452=12|453=1| 10=213|

那么,如果我希望输出与发送的顺序相同,该怎么办?

最佳答案

Grant 和 TT 的说法是正确的,实际上 FIX 不要求特定的标签(或字段)排序,除非在重复组内。
但是,有些交易对手需要在消息正文中进行特定的字段排序。

在消息上设置字段时,QuickFIX/J 会按照标签在数据字典中出现的顺序排列标签。这是因为特定消息类型的代码是在编译时从数据字典生成的。

如果您想更改此顺序,有两种可能性。

  1. 更改数据字典并重新编译 QuickFIX/J。说明在这里:build instructions

  2. 扩展通用Message,指定标签顺序并将其传递给 super 构造函数。请参阅下面的示例代码。
    注意:进一步思考这个问题后,我意识到这种方法有一个缺点。如果您的一方需要重新发送消息,则会使用为该 session 配置的数据字典和消息工厂来解析来自商店的消息。 IE。您可能最终会再次使用数据字典/生成代码中的字段排序。
    所以总结一下:选项 1 是干净的方法,但需要重建 QuickFIX/J。

一般说明:请注意,您不必自己添加重复组计数(NoPartyIDs 在您的代码中)。这是在您向消息添加组时由 QuickFIX/J 完成的。

示例代码:

@Test
public void testCustomFieldOrder() {

final int[] FIELD_ORDER = {38, 55, 44, 1};
final int[] PARTY_GROUP_ORDER = {447, 452, 448, 0};

class MyNewOrderSingle extends quickfix.fix50sp1.Message {

public static final String MSGTYPE = "D";

public MyNewOrderSingle() {
super(FIELD_ORDER);
getHeader().setField(new quickfix.field.MsgType(MSGTYPE));
}

}

class MyPartyGroup extends Group {

public MyPartyGroup() {
super(453, 447, PARTY_GROUP_ORDER);
}

}

quickfix.fix50sp1.NewOrderSingle nos1 = new quickfix.fix50sp1.NewOrderSingle();
nos1.setString(38, "1000");
nos1.setString(55, "SYM");
nos1.setString(44, "1");
nos1.setString(1, "ACCOUNT");
nos1.setString(100, "XETR");
quickfix.fix50sp1.NewOrderSingle.NoPartyIDs group1 = new quickfix.fix50sp1.NewOrderSingle.NoPartyIDs();
group1.setString(447, "C");
group1.setString(452, "12");
group1.setString(448, "PARTYID");
nos1.addGroup(group1);

System.out.println("orig " + nos1.toString().replace('\001', '|'));

MyNewOrderSingle nos2 = new MyNewOrderSingle();
nos2.setString(38, "1000");
nos2.setString(55, "SYM");
nos2.setString(44, "1");
nos2.setString(1, "ACCOUNT");
nos2.setString(100, "XETR");

MyPartyGroup group2 = new MyPartyGroup();
group2.setString(447, "C");
group2.setString(452, "12");
group2.setString(448, "PARTYID");
nos2.addGroup(group2);

System.out.println("custom " + nos2.toString().replace('\001', '|'));

}

输出:

orig   8=FIXT.1.1|9=75|35=D|1=ACCOUNT|38=1000|44=1|55=SYM|100=XETR|453=1|448=PARTYID|447=C|452=12|10=014|
custom 8=FIXT.1.1|9=75|35=D|38=1000|55=SYM|44=1|1=ACCOUNT|100=XETR|453=1|447=C|452=12|448=PARTYID|10=014|

关于fix-protocol - 如何使用自定义标签排序发送 FIX 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60037526/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com