2015-11-16 4 views
1

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

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

+0

Вы подключение к внешнему серверу FIX, как брокер или что-то? –

+0

Я подключаюсь к FixImulator QuickFix/J – Parashuram

+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 инструкции 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)); 
+0

На fxcm также требуется fixMessage.set (account). – lamrongol

+0

@lamrongol Я полагаю, что большинству контрагентов потребуется указать «Учетная запись», даже если стандарт FIX имеет это необязательное поле. –

0

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^