FIX 4.4: NewOrderSingle¶
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.
In the current ScaleTrade implementation this message is mapped to the internal trade routing path:
NewOrderSingleRouter::ExecFIXAction("OpenTrade", ...)- response through
ExecutionReport
New Order -- Single (MsgType = D)¶
Example¶
8=FIX.4.4|9=134|35=D|34=4|49=CLIENT_1|52=20260408-20:34:22|56=SERVER|
11=ORD-1775680462350-830df5|21=1|38=100|40=1|54=1|55=EURUSD|
60=20260408-20:34:22|10=212|
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) |
| 49 | SenderCompID | FIX slot code, for example CLIENT_1 |
| 56 | TargetCompID | Server CompID, usually SERVER |
| 55 | Symbol | Instrument identifier (e.g., EURUSD) |
| 54 | Side | 1 = Buy, 2 = Sell |
| 38 | OrderQty | Order quantity used by current FIX transport |
| 40 | OrdType | Order type (1 = Market, 2 = Limit, 3 = Stop, etc.) |
| 44 | Price | Price (required for limit orders, optional for market orders) |
| 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: replies with Execution Report (35=8):
- New (
OrdStatus = 0,ExecType = 0) -- routing accepted\ - Rejected (
OrdStatus = 8,ExecType = 8) -- routing or business validation failed
- New (
Execution Report (Order Confirmation)¶
Example (Order Rejected)¶
8=FIX.4.4|9=191|35=8|34=2|49=SERVER|52=20260408-20:34:22.499|56=CLIENT_1|
6=0|11=ORD-1775680462350-830df5|14=0|17=EXEC-1775680462|
37=ORD-1775680462350-830df5|39=8|54=1|55=EURUSD|58=Trade disabled|
150=8|151=0|10=064|
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 |
| 6 | AvgPx | Average execution price |
| 58 | Text | Human-readable status or rejection reason |
Current Server Scope¶
- currently implemented:
- open request through
35=D - immediate
35=8response - not yet implemented in this FIX scope:
- cancel through
35=F - order status through
35=H - mass status through
35=AF - full order lifecycle replay
Best Practices¶
- Use unique ClOrdID for every new order to avoid duplication.\
- Handle Execution Reports carefully -- they are the authoritative result of the current FIX order submission path.\
- 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.