1

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

提前致谢。

4

2 回答 2

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这种情况下,是创建订单ClOrdIDNewOrderSingle指令。该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 ) );
于 2015-11-20T08:34:17.513 回答
-1

ClOrdId 是您要发送的取消订单消息的 ID。OrigClOrdId 是您已经发送的订单消息的 id。OrderID 是订单的内部 id(对接收者可能或可能不意味着什么)。

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

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

查看Fiximate QuoteCancel了解更多信息。这是Fiximate的首页。

于 2015-11-16T12:13:03.123 回答