我正在尝试使用FIX.4.2创建OrderCancelRequest,但与OrderID,OrigClOrdID和ClOrdID混淆。我在网上搜索但我不清楚。请解释这些参数,并尽可能为OrderCancelRequest提供代码片段。
提前致谢。
答案 0 :(得分:2)
您希望取消使用quickfix.fix42.NewOrderSingle
创建的订单。要发送该消息,您必须为其分配一个唯一的quickfix.field.ClOrdID
。例如:
String instructionId = createNewInstructionId( );
quickfix.Message fixMessage = new quickfix.fix42.NewOrderSingle (
new ClOrdID( instructionId ),
new HandlInst( HandlInst.AUTOMATED_EXECUTION_ORDER_PUBLIC ),
new Symbol( symbol ),
new Side( Side.BUY ),
new TransactTime( ),
new OrdType( OrdType.LIMIT )
);
// ...
您需要存储此instructionId
以便在进一步的消息传递中进行引用。
如果交易对手接受该指令,则会使用EXECUTION_REPORT
消息(OrdStatus.NEW
)进行操作。此执行报告将包含quickfix.Field.OrderID
字段,该字段是代理分配的唯一标识符(单个交易日内的唯一性,或多日订单的天数唯一性)。存储此OrderID
以便在以后的说明中使用(orderIdBroker
)。
如果您想取消订单,则需要参考创建订单的说明。此实例中的OrigClOrdID
是创建订单的ClOrdID
指令的NewOrderSingle
。 ClOrdID
字段是取消请求的唯一标识符(您为取消请求分配的新标识符)。如果您愿意(或经纪人要求),您可以提供您从经纪人那里收到的OrderID
:
String orderInstructionId = getOrderInstructionId( );
String cancelInstructionId = createNewInstructionId( );
quickfix.Message fixMessage = new quickfix.fix42.OrderCancelRequest (
new OrigClOrdID( orderInstructionId ),
new ClOrdID( cancelInstructionId ),
new Symbol( symbol ),
new Side( Side.BUY ),
new TransactTime( )
);
// If required, set the OrderID as assigned by the broker:
String orderIdBroker = getOrderIdBroker( );
fixMessage.setField( new OrderID( orderIdBroker ) );
答案 1 :(得分:0)
ClOrdId是您要发送的取消订单消息的ID。 OrigClOrdId是您已发送的订单消息的ID。 OrderID是订单的内部id(对接收者来说可能是也可能没有任何意义)。
您如何构建取消订单取决于您将其发送给谁。这是一些代码:
QuoteCancel qc = new QuoteCancel();
qc.setField(new StringField(131, "RFQ123"));
qc.setField(new QuoteCancelType(1));
请查看Fiximate QuoteCancel了解更多信息。这是Fiximate首页。