Skip to main content

FIX Order Entry

The FIX order-entry session accepts order placement, cancellation, and cancel-replace flows.

FIX authentication is session/agent-based: Logon binds the engine account and HMAC credential, and submitted actions carry a placeholder signature rather than a per-message client crypto signature. ClOrdID(11) is threaded into the signed ActionPayload, so it is part of the action signing hash and influences the derived OrderId.

Acknowledgement model

FIX order entry returns a synchronous admission acknowledgement, then the real working and terminal states arrive asynchronously over the drop-copy stream:

  • NewOrderSingle returns a synchronous PendingNew ExecutionReport (35=8, 150=A, 39=A) with ExecID of the form fix-pending-new-{seq}. This is an admission acknowledgement, not a fill.
  • OrderCancelReplaceRequest submits one atomic (Spot)QuoteReplace action and returns PendingReplace (35=8, 150=E, 39=E) with ExecID of the form fix-pending-replace-{seq}.
  • OrderCancelRequest returns 150=4/39=4.
  • Actual fills, partial fills, cancels, and other terminal order states are emitted later through the drop-copy / execution stream to sessions scoped drop_copy/dropcopy. See Drop copy.

There is no immediate "New" fill acknowledgement; clients must reconcile working and terminal state from the drop-copy stream.

New order

Use NewOrderSingle (35=D) for standard orders.

FieldFIX tagRequiredNotes
ClOrdID11YesClient order id; threaded into the signed ActionPayload and influences the derived OrderId
Account1LogonEngine account is bound at Logon
Symbol55YesNumeric Senticore marketId
Side54Yes1 buy, 2 sell
OrdType40Yes1 market, 2 limit
OrderQty38YesInteger quantity in engine units
Price44Limit onlyInteger price in micros
TimeInForce59Optionalempty, 0, or 1 = session GTC; 3 IOC; 4 FOK; unsupported values reject
Book9100Prediction/binary onlyRequired for prediction/binary markets: YES or NO; omit for spot markets
STP override7928Optional1 cancel maker, 2 cancel taker, 3 reject, 4 skip self

TimeInForce(59)=6/GTD and ExpireTime(126)/ExpireDate(432) are rejected on this path rather than silently downgraded. Post-only and reduce-only flags are not carried through FIX ExecInst(18); use BSL/FIXP or signed HTTP actions when those semantics are required.

Cancel

Use OrderCancelRequest (35=F) with the original ClOrdID and a new cancel request id. The gateway resolves OrigClOrdID(41) through persisted FIX order references for the session. The cancel acknowledgement is returned as an ExecutionReport with 150=4/39=4.

Cancel-replace

Use OrderCancelReplaceRequest (35=G) for atomic amend flows. If the replace is rejected, the original order remains active unless the rejection explicitly states otherwise.

The current implementation submits one atomic QuoteReplace or SpotQuoteReplace action with one nonce. Either the cancel and replacement both apply, or the group rolls back. Cancel-replace returns the synchronous PendingReplace ExecutionReport (35=8, 150=E, 39=E) for the replacement order. Clients must reconcile final order state from the async drop-copy stream and should not assume queue-priority amend semantics.

Status and mass cancel

MsgTypePurpose
HOrderStatusRequest by ClOrdID(11) or OrderID(37)
qOrderMassCancelRequest, optionally filtered by Symbol(55) and Side(54)
AFOrderMassStatusRequest, optionally filtered by Symbol(55) and Side(54)

AF returns one or more ExecutionReport(35=8) messages when matching open orders exist. If the request is valid but the filtered set is empty, the gateway returns BusinessMessageReject(35=j) with RefMsgType(372)=AF and a no open orders text. Treat this as an empty terminal response and continue the session.

Rejections

Application-level rejections return BusinessMessageReject or OrderCancelReject. Pre-trade business rule failures map to the same error concepts documented in Error Model.

Senticore extension areas

ExtensionPurpose
9100Prediction book, YES or NO
7928Self-trade-prevention override