FIX 4.4 Trading: Opening a Trade (New Order -- Single)¶
The process of opening a trading position in FIX 4.4 is performed using
the New Order -- Single message (MsgType = D).\
This message is sent by the client (initiator) to the broker (acceptor)
to request a new trade execution.
New Order -- Single (MsgType = D)¶
Example¶
8=FIX.4.4|9=178|35=D|34=2|49=CLIENT1|56=BROKER1|52=20250912-15:50:00.000|
11=ORDER12345|21=1|55=EUR/USD|54=1|38=100000|40=2|44=1.2350|59=0|
60=20250912-15:50:00.000|10=129|
Key Fields¶
| Tag | Name | Description |
|---|---|---|
| 35=D | MsgType | New Order – Single |
| 11 | ClOrdID | Unique order ID assigned by the client |
| 21 | HandlInst | Handling instructions (1 = Automated execution order, private, no broker intervention) |
| 55 | Symbol | Instrument identifier (e.g., EURUSD) |
| 54 | Side | 1 = Buy, 2 = Sell |
| 38 | OrderQty | Order quantity (e.g., 100000 units = 1 standard lot, depends on contract_size) |
| 40 | OrdType | Order type (1 = Market, 2 = Limit, 3 = Stop, etc.) |
| 44 | Price | Price (required for limit orders, optional for market orders) |
| 59 | TimeInForce | Duration (0 = Day, 1 = GTC, 3 = IOC, etc.) |
| 60 | TransactTime | Order creation timestamp |
| 10 | CheckSum | Message checksum |
Workflow: Opening a Trade¶
- Client → Server: sends
New Order – Single (35=D)with order details.\ - Server → Client: acknowledges with an Execution Report
(35=8):
- Pending New (OrdStatus = A) -- order accepted for processing.\
- New (OrdStatus = 0) -- order successfully opened.\
- Rejected (OrdStatus = 8) -- order rejected (with reason in
58=Textor103=OrdRejReason).
Execution Report (Order Confirmation)¶
Example (Order Accepted)¶
8=FIX.4.4|9=200|35=8|34=3|49=BROKER1|56=CLIENT1|52=20250912-15:50:00.500|
37=ORD98765|11=ORDER12345|17=1|150=0|39=0|55=EUR/USD|54=1|38=100000|
40=2|44=1.2350|32=0|31=0|151=100000|14=0|6=0|10=130|
Key Fields in Execution Report¶
| Tag | Name | Description |
|---|---|---|
| 35=8 | MsgType | Execution Report |
| 37 | OrderID | Unique order ID assigned by the broker |
| 11 | ClOrdID | Client order ID (matches the one from New Order – Single) |
| 17 | ExecID | Execution identifier |
| 150 | ExecType | Execution type (0 = New, 4 = Canceled, 8 = Rejected, F = Trade, …) |
| 39 | OrdStatus | Order status (0 = New, 2 = Filled, 8 = Rejected) |
| 151 | LeavesQty | Remaining quantity |
| 14 | CumQty | Cumulative filled quantity |
| 32 | LastShares | Last filled quantity |
| 31 | LastPx | Last executed price |
| 6 | AvgPx | Average execution price |
Order Lifecycle States¶
flowchart LR
A["Pending New (A) - Order received but not yet accepted"] --> B["New (0) - Order accepted and active"]
B --> C["Partially Filled (1) - Order partially executed"]
C --> D["Filled (2) - Order fully executed"]
B --> D
A --> E["Rejected (8) - Order rejected"]
B --> E
C --> E
If Mermaid is not enabled in your build, keep this as reference diagram only.
Best Practices¶
- Use unique ClOrdID for every new order to avoid duplication.\
- Handle Execution Reports carefully -- they are the only source of truth for order status.\
- Monitor OrdStatus and ExecType fields to track the order lifecycle.\
- Use proper TimeInForce to control order expiration.\
- Ensure correct symbol format (depends on broker/exchange).
Summary¶
Opening a position in FIX 4.4 is done with the New Order -- Single (35=D) message.\ The broker confirms via Execution Report (35=8), which defines whether the order is accepted, filled, partially filled, or rejected.