如何在 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
指令的 ClOrdID
。 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 ) );
我正在尝试使用 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
指令的 ClOrdID
。 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 ) );