Как составить OrderCancelRequest в QuickFix/J

Я пытаюсь создать OrderCancelRequest, используя FIX.4.2, но путаюсь с OrderID, OrigClOrdID и ClOrdID. Я искал в Интернете, но это было не ясно для меня. Пожалуйста, объясните эти параметры и предоставьте фрагмент кода для OrderCancelRequest, если это возможно.

Заранее спасибо.


person Parashuram    schedule 16.11.2015    source источник
comment
Вы подключаетесь к внешнему серверу FIX, как брокер или что-то в этом роде?   -  person Grant Birchmeier    schedule 16.11.2015
comment
Я подключаюсь к FixImulator QuickFix/J   -  person Parashuram    schedule 20.11.2015
comment
Это была важная деталь, которую вы должны были включить в свой вопрос.   -  person Grant Birchmeier    schedule 20.11.2015


Ответы (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 инструкции 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
comment
На fxcm также необходим fixMessage.set(account). - person lamrongol; 03.01.2017
comment
@lamrongol Я полагаю, что большинству контрагентов потребуется указать Account, хотя в стандарте FIX это необязательное поле. - person TT.; 03.01.2017

ClOrdId — это идентификатор сообщения об отмене заказа, которое вы собираетесь отправить. OrigClOrdId — это идентификатор сообщения о заказе, которое вы уже отправили. OrderID — это внутренний идентификатор заказа (который может ничего не означать для получателя).

То, как вы составляете приказ об отмене, зависит от того, кому вы его отправляете. Вот код:

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

Подробнее см. Fiximate QuoteCancel. Вот главная страница Fiximate.

person rupweb    schedule 16.11.2015