如何在 QuickFix/J 中编写 OrderCancelRequest

How to compose OrderCancelRequest in QuickFix/J

我正在尝试使用 FIX.4.2 创建 OrderCancelRequest,但与 OrderID、OrigClOrdID 和 ClOrdID 混淆了。我在网上搜索过,但我不清楚。请解释这些参数,并尽可能提供 OrderCancelRequest 的代码片段。

提前致谢。

ClOrdId 是您要发送的取消订单消息的 ID。 OrigClOrdId 是您已发送的订单消息的 ID。 OrderID 是订单的内部 ID(对接收方而言可能有也可能没有任何意义)。

您如何构建取消订单取决于您将订单发送给谁。这是一些代码:

QuoteCancel qc = new QuoteCancel();
qc.setField(new StringField(131, "RFQ123"));
qc.setField(new QuoteCancelType(1));

看看Fiximate QuoteCancel for more. Here's the Fiximate首页。

您希望取消使用 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 是创建订单的 NewOrderSingle 指令的 ClOrdIDClOrdID 字段是取消请求的唯一标识符(您分配给取消请求的新标识符)。如果您愿意(或经纪人要求),您可以提供从经纪人那里收到的 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 ) );