Вы хотите отменить заказ, созданный с помощью 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 ) );
person
TT.
schedule
20.11.2015