如何在QuickFix / J

时间:2015-11-16 09:16:56

标签: quickfix fix-protocol quickfixj

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

提前致谢。

2 个答案:

答案 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指令的NewOrderSingleClOrdID字段是取消请求的唯一标识符(您为取消请求分配的新标识符)。如果您愿意(或经纪人要求),您可以提供您从经纪人那里收到的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首页。