Order Execution Overview
Orders are submitted and managed on the Trade Session (default port 5002). All order-related messages use this dedicated session while market data flows on the separate Price Session.
NewOrderSingle (MsgType = D)
Submit a new order.
| Tag | Field | Required | Description |
|---|
| 35 | MsgType | Yes | D |
| 11 | ClOrdID | Yes | Unique client order ID |
| 55 | Symbol | Yes | Instrument (e.g. EURUSD) |
| 54 | Side | Yes | 1 = Buy, 2 = Sell |
| 38 | OrderQty | Yes | Quantity (in lots, e.g. 100000 for 1 standard lot) |
| 40 | OrdType | Yes | 1 = Market, 2 = Limit, 3 = Stop |
| 44 | Price | Conditional | Required for Limit orders |
| 99 | StopPx | Conditional | Required for Stop orders |
| 59 | TimeInForce | No | 1 = GTC, 3 = IOC, 4 = FOK (default: GTC) |
| 60 | TransactTime | Yes | Client transaction timestamp |
Market Order Example
8=FIX.4.4|9=148|35=D|49=CLIENT1|56=BROKERET|34=5|52=20260312-14:32:00.000|11=ORD001|55=EURUSD|54=1|38=100000|40=1|59=3|60=20260312-14:32:00.000|10=165|
Limit Order Example
8=FIX.4.4|9=162|35=D|49=CLIENT1|56=BROKERET|34=6|52=20260312-14:33:00.000|11=ORD002|55=GBPUSD|54=2|38=50000|40=2|44=1.26500|59=1|60=20260312-14:33:00.000|10=180|
Stop Order Example
8=FIX.4.4|9=162|35=D|49=CLIENT1|56=BROKERET|34=7|52=20260312-14:34:00.000|11=ORD003|55=USDJPY|54=1|38=200000|40=3|99=149.500|59=1|60=20260312-14:34:00.000|10=192|
ExecutionReport (MsgType = 8)
Sent by the server to communicate order status changes, fills, and rejections.
| Tag | Field | Description |
|---|
| 35 | MsgType | 8 |
| 37 | OrderID | Server-assigned order ID |
| 11 | ClOrdID | Client order ID from the request |
| 17 | ExecID | Unique execution identifier |
| 150 | ExecType | Execution type (see table below) |
| 39 | OrdStatus | Current order status (see table below) |
| 55 | Symbol | Instrument |
| 54 | Side | 1 = Buy, 2 = Sell |
| 44 | Price | Order price |
| 38 | OrderQty | Ordered quantity |
| 32 | LastQty | Quantity filled in this execution |
| 31 | LastPx | Price of this fill |
| 14 | CumQty | Total quantity filled so far |
| 151 | LeavesQty | Remaining quantity |
| 6 | AvgPx | Average fill price |
| 60 | TransactTime | Timestamp of the execution |
ExecType Values (Tag 150)
| Value | Meaning |
|---|
0 | New — Order accepted |
4 | Canceled — Order canceled |
5 | Replaced — Order modified |
8 | Rejected — Order rejected |
F | Trade — Partial or full fill |
C | Expired — Order expired |
OrdStatus Values (Tag 39)
| Value | Meaning |
|---|
0 | New |
1 | Partially Filled |
2 | Filled |
4 | Canceled |
6 | Pending Cancel |
8 | Rejected |
C | Expired |
E | Pending Replace |
Example — Order Acknowledged
8=FIX.4.4|9=196|35=8|49=BROKERET|56=CLIENT1|34=6|52=20260312-14:32:00.100|37=SVR001|11=ORD001|17=EXEC001|150=0|39=0|55=EURUSD|54=1|44=1.08455|38=100000|32=0|31=0|14=0|151=100000|6=0|60=20260312-14:32:00.100|10=178|
Example — Order Filled
8=FIX.4.4|9=212|35=8|49=BROKERET|56=CLIENT1|34=7|52=20260312-14:32:00.200|37=SVR001|11=ORD001|17=EXEC002|150=F|39=2|55=EURUSD|54=1|44=1.08455|38=100000|32=100000|31=1.08455|14=100000|151=0|6=1.08455|60=20260312-14:32:00.200|10=195|
Example — Order Rejected
8=FIX.4.4|9=176|35=8|49=BROKERET|56=CLIENT1|34=8|52=20260312-14:32:00.300|37=NONE|11=ORD004|17=EXEC003|150=8|39=8|55=EURUSD|54=1|38=100000|103=1|58=Insufficient margin|60=20260312-14:32:00.300|10=210|
OrdRejReason Codes (Tag 103)
| Code | Meaning |
|---|
| 0 | Broker option |
| 1 | Unknown symbol |
| 2 | Exchange closed |
| 3 | Order exceeds limit |
| 5 | Unknown order |
| 6 | Duplicate order |
| 13 | Incorrect quantity |
| 99 | Other |
OrderCancelRequest (MsgType = F)
Cancel a pending or working order.
| Tag | Field | Required | Description |
|---|
| 35 | MsgType | Yes | F |
| 41 | OrigClOrdID | Yes | Original ClOrdID of the order to cancel |
| 11 | ClOrdID | Yes | New unique ID for this cancel request |
| 55 | Symbol | Yes | Instrument |
| 54 | Side | Yes | 1 = Buy, 2 = Sell |
| 60 | TransactTime | Yes | Timestamp |
Example
8=FIX.4.4|9=138|35=F|49=CLIENT1|56=BROKERET|34=8|52=20260312-14:40:00.000|41=ORD002|11=CXL001|55=GBPUSD|54=2|60=20260312-14:40:00.000|10=155|
The server responds with an ExecutionReport (ExecType=4, OrdStatus=4) on success, or an OrderCancelReject on failure.
OrderCancelReplaceRequest (MsgType = G)
Modify a pending order's price, quantity, or other parameters.
| Tag | Field | Required | Description |
|---|
| 35 | MsgType | Yes | G |
| 41 | OrigClOrdID | Yes | Original ClOrdID |
| 11 | ClOrdID | Yes | New unique ID for this request |
| 55 | Symbol | Yes | Instrument |
| 54 | Side | Yes | Side (must match original) |
| 40 | OrdType | Yes | Order type |
| 44 | Price | Conditional | New price (for Limit orders) |
| 99 | StopPx | Conditional | New stop price (for Stop orders) |
| 38 | OrderQty | Yes | New quantity |
| 60 | TransactTime | Yes | Timestamp |
Example — Modify Limit Price
8=FIX.4.4|9=168|35=G|49=CLIENT1|56=BROKERET|34=9|52=20260312-14:41:00.000|41=ORD002|11=MOD001|55=GBPUSD|54=2|40=2|44=1.26600|38=50000|60=20260312-14:41:00.000|10=172|
OrderCancelReject (MsgType = 9)
Sent when a cancel or replace request cannot be processed.
| Tag | Field | Description |
|---|
| 35 | MsgType | 9 |
| 37 | OrderID | Server order ID |
| 11 | ClOrdID | ClOrdID of the cancel/replace request |
| 41 | OrigClOrdID | Original ClOrdID |
| 39 | OrdStatus | Current order status |
| 434 | CxlRejResponseTo | 1 = Cancel, 2 = Replace |
| 102 | CxlRejReason | 0 = Too late, 1 = Unknown order, 99 = Other |
| 58 | Text | Human-readable reason |
BusinessMessageReject (MsgType = j)
Application-level rejection for unsupported or invalid business messages.
| Tag | Field | Description |
|---|
| 35 | MsgType | j |
| 45 | RefSeqNum | Sequence number of the rejected message |
| 372 | RefMsgType | MsgType of the rejected message |
| 380 | BusinessRejectReason | Rejection reason code |
| 58 | Text | Human-readable description |
BusinessRejectReason Codes (Tag 380)
| Code | Meaning |
|---|
| 0 | Other |
| 1 | Unknown ID |
| 3 | Unsupported message type |
| 4 | Application not available |
| 5 | Conditionally required field missing |
| 6 | Not authorized |
Order Types Summary
| OrdType (Tag 40) | Name | Behavior |
|---|
1 | Market | Executes immediately at best available price |
2 | Limit | Executes at specified price or better |
3 | Stop | Triggers a market order when stop price is reached |
TimeInForce Options
| Value (Tag 59) | Name | Behavior |
|---|
1 | GTC (Good Till Cancel) | Remains active until filled or canceled |
3 | IOC (Immediate or Cancel) | Fill what's available, cancel the rest |
4 | FOK (Fill or Kill) | Fill entirely or reject |
6 | GTD (Good Till Date) | Active until a specified date |
Best Practices
- Use unique ClOrdIDs — Every order, cancel, and replace must have a unique ClOrdID within the session
- Track order state — Maintain a local order book updated by ExecutionReports
- Handle partial fills — Monitor
CumQty and LeavesQty for partially filled orders - Check ExecType before OrdStatus — ExecType tells you what happened; OrdStatus tells you the resulting state
- Implement timeout logic — If no ExecutionReport is received within a reasonable time, send an OrderStatusRequest
- Use IOC for market orders — Prevents orders from sitting on the book if immediate execution isn't available
Next Steps