FIX 4.4 Interface Specification
Introduction
The Nanoconda FIX gateway gives FIX-capable trading systems, algorithmic trading platforms and institutional back offices standard FIX access to a Nanoconda trading account on CME Group markets.
This document is the complete reference for the Nanoconda FIX interface. It covers session behaviour, supported messages, every tag the gateway reads or sends, enumerations, and differences from the FIX 4.4 standard. It assumes the reader already knows the FIX protocol.
The interface supports two main use cases:
- Trading: order entry, order management, market data, reference data, positions and trade capture for trading clients and algorithms.
- Drop copy: real-time, read-only visibility into all account activity for clearing firms, FCMs and risk desks. See Drop Copy.
All orders submitted over FIX pass through the Nanoconda Pre-Trade Risk System before they are sent to the exchange.
Contents
- Connectivity
- Supported Messages
- Session Layer
- Authentication & Roles
- Order Entry
- Execution Reports & Cancel Rejects
- Market Data
- Reference Data
- Positions
- Trade Capture
- Rejects & Error Handling
- Drop Copy
- Message Flows
- Reconnection & Recovery
- Differences from FIX 4.4 & Unsupported Features
- Appendix A: Tag Reference
- Appendix B: Enumerations
1. Connectivity
| Item | Specification |
|---|---|
| Transport | TCP |
| Protocol | FIX tag=value, SOH (0x01) delimited |
| FIX version | FIX.4.4 (recommended and certified). The gateway replies with the BeginString(8) the client sent on Logon, but all message content follows FIX 4.4 semantics. |
| Encryption | None at the FIX layer (EncryptMethod(98)=0) |
| Host / port | Provided per account by your Nanoconda account representative. The FIX gateway shares its host and port with the other Nanoconda remote interfaces; the protocol is detected automatically (see Interfaces). |
Credentials, SenderCompID / TargetCompID |
Provided per account by your Nanoconda account representative. |
Standard header and trailer
Every message sent by the gateway carries:
| Tag | Name | Notes |
|---|---|---|
| 8 | BeginString | The value the client sent on Logon. |
| 9 | BodyLength | |
| 35 | MsgType | |
| 49 | SenderCompID | The client's TargetCompID(56) from Logon. |
| 56 | TargetCompID | The client's SenderCompID(49) from Logon. |
| 34 | MsgSeqNum | Starts at 1 for each session and increments by one. |
| 52 | SendingTime | UTC. |
| 10 | CheckSum | Standard FIX checksum. |
Client messages must carry a standard FIX header and trailer with a valid BodyLength(9) and CheckSum(10).
Conventions
- Tags not listed for a message in this specification are not used by the gateway.
- "Account-wide" means an operation covers every order and fill on the account, whichever session or interface created them. "Session-scoped" means it covers only orders submitted or amended on the current FIX session.
- Tag numbers appear in parentheses after field names, e.g.
ClOrdID(11). Message types appear as35=Xor in parentheses after the message name.
2. Supported Messages
Session messages
| MsgType | Message | Direction |
|---|---|---|
A |
Logon | Client ↔ Nanoconda |
0 |
Heartbeat | Client ↔ Nanoconda |
1 |
TestRequest | Client ↔ Nanoconda |
2 |
ResendRequest | Client → Nanoconda |
3 |
Reject | Nanoconda → Client |
4 |
SequenceReset | Client ↔ Nanoconda |
5 |
Logout | Client ↔ Nanoconda |
Application messages: client to Nanoconda
| MsgType | Message | Purpose | Scope |
|---|---|---|---|
D |
NewOrderSingle | Submit an order | |
F |
OrderCancelRequest | Cancel an order | Session |
G |
OrderCancelReplaceRequest | Modify an order's price and/or quantity | Session |
H |
OrderStatusRequest | Query one order | Account |
AF |
OrderMassStatusRequest | Query all open orders | Account |
q |
OrderMassCancelRequest | Cancel multiple orders | Session |
V |
MarketDataRequest | Subscribe / unsubscribe to market data | |
x |
SecurityListRequest | List tradeable instruments | |
c |
SecurityDefinitionRequest | Instrument definition | |
AN |
RequestForPositions | Positions snapshot or subscription | Account |
AD |
TradeCaptureReportRequest | Fill history | Account |
Application messages: Nanoconda to client
| MsgType | Message | Purpose |
|---|---|---|
8 |
ExecutionReport | Order state changes, fills, rejects, status responses |
9 |
OrderCancelReject | Rejection of a cancel or cancel/replace request |
j |
BusinessMessageReject | Application-level reject |
W |
MarketDataSnapshotFullRefresh | Initial book snapshot |
X |
MarketDataIncrementalRefresh | Book updates |
Y |
MarketDataRequestReject | Market data request rejected |
y |
SecurityList | Instrument list |
d |
SecurityDefinition | Instrument definition |
AP |
PositionReport | Position and P&L per instrument |
AE |
TradeCaptureReport | Fill detail |
AQ |
TradeCaptureReportRequestAck | No matching fills, or trade history unavailable |
Any other MsgType is rejected with BusinessMessageReject(j), BusinessRejectReason(380)=3 (Unsupported Message Type).
3. Session Layer
Logon (35=A)
Client → Nanoconda
| Tag | Name | Req'd | Format | Description |
|---|---|---|---|---|
| 49 | SenderCompID | Y | String | Header field. Used as the login username when Username(553) is absent. |
| 56 | TargetCompID | Y | String | Header field. |
| 98 | EncryptMethod | Y | Int | Send 0 (None). The gateway always replies with 0. |
| 108 | HeartBtInt | Y | Int (seconds) | Heartbeat interval for the session. If absent, 30 is used. 0 disables heartbeats and liveness checks. See Session liveness. |
| 553 | Username | N | String | Account username. If absent, SenderCompID(49) is used as the username. |
| 554 | Password | Y | String | Account password. |
Username via SenderCompID
Many FIX engines do not expose Username(553). You can instead set your account username as SenderCompID(49) and omit tag 553.
Nanoconda → Client (logon accepted): Logon(A) with EncryptMethod(98)=0 and the client's HeartBtInt(108) echoed back.
Logon rejected: the gateway sends Logout(5) with a descriptive Text(58) and then closes the TCP connection. No numeric reject code is provided. Text(58) is one of:
| Text (58) | Cause |
|---|---|
Username not found |
Unknown username |
Incorrect Password |
Wrong password |
User Already Logged in |
This username already has an active FIX session |
Concurrent sessions: each username can have one active FIX session at a time. A second Logon with the same username is rejected until the first session logs out or times out. Different usernames on the same account can be connected at the same time, for example a TRADER login for order entry and a VIEWER login for drop copy. Connections through other Nanoconda interfaces (such as the Real-Time GUI) are not affected by this limit.
Sequence numbers
- Outbound
MsgSeqNum(34) starts at 1 for each new session. Configure your FIX engine to reset sequence numbers on every logon. - The gateway does not enforce inbound sequence continuity. An inbound gap produces no
ResendRequestand no reject; the gateway continues from theMsgSeqNumit receives. - Messages are not persisted for replay across sessions. See Reconnection & Recovery.
Heartbeat (35=0)
Either side can send one. The gateway sends a Heartbeat when its outbound side has been idle for HeartBtInt seconds, and in reply to a TestRequest. TestReqID(112) is included only when the heartbeat answers a TestRequest.
TestRequest (35=1)
Either side can send one. TestReqID(112) is required. The gateway answers a client TestRequest with a Heartbeat echoing the same TestReqID.
ResendRequest (35=2)
Client → Nanoconda. BeginSeqNo(7) is accepted. The gateway does not store or retransmit messages. It always responds with SequenceReset(4) in Reset mode: GapFillFlag(123)=N, with NewSeqNo(36) set to its next outbound sequence number. Your engine should set its next expected inbound sequence number to NewSeqNo.
No message replay
Messages in the requested range are not resent and are not marked as gap-filled. They may include ExecutionReports. To recover missed order and fill activity, use the account-wide query messages described in Reconnection & Recovery.
SequenceReset (35=4)
- Nanoconda → Client: sent only in Reset mode (
GapFillFlag(123)=N) in response to aResendRequest. - Client → Nanoconda:
NewSeqNo(36) sets the next inbound sequence number the gateway expects. No response is sent.
Logout (35=5)
Either side can send one. When the client sends Logout, the gateway replies with Logout and closes the TCP connection. Releasing the account's FIX session can take a short time, so a client that logs on again straight after logging out should retry the Logon briefly if it is rejected.
Session liveness
| Condition | Gateway action |
|---|---|
Nothing sent to the client for HeartBtInt seconds |
Sends Heartbeat(0) |
Nothing received from the client for 1.5 x HeartBtInt seconds |
Sends TestRequest(1) |
Nothing received from the client for 2 x HeartBtInt seconds |
Disconnects the session |
There is no minimum or maximum HeartBtInt. With HeartBtInt=0 the gateway sends no heartbeats and never disconnects an idle session. Choose a value that suits your network conditions, because very small intervals can cause disconnects when there is network jitter.
4. Authentication & Roles
The gateway authenticates each session with the username (Username(553), or SenderCompID(49) if 553 is absent) and Password(554). Every username has a role, and the role decides which requests the session may send. Requests the role does not permit are always rejected explicitly with the reject message for that request type. They are never dropped silently.
| Capability | TRADER | VIEWER | CLEARER / ADMIN |
|---|---|---|---|
Market data (MarketDataRequest) |
Yes | No (MarketDataRequestReject(Y)) |
No (MarketDataRequestReject(Y)) |
| Order entry: new, cancel, replace, mass cancel | Yes | No (rejected) | Yes |
| Order status, positions, trade capture, reference data | Yes | Yes | Yes |
Real-time ExecutionReports for all account activity |
Yes | Yes | Yes |
VIEWER is the recommended role for clearing firms, risk desks and drop-copy consumers. It has full read access to all account activity and cannot enter orders or change the account. See Drop Copy.
5. Order Entry
NewOrderSingle (35=D)
Client → Nanoconda
| Tag | Name | Req'd | Format | Description |
|---|---|---|---|---|
| 11 | ClOrdID | Y | String | Client-assigned order identifier. Must be unique. |
| 55 | Symbol | Y | String | Instrument symbol, as returned in SecurityList(y). |
| 54 | Side | Y | Char | 1=Buy, 2=Sell. |
| 38 | OrderQty | Y | Int | Must be greater than 0. |
| 40 | OrdType | Y | Char | See supported order types. |
| 44 | Price | C | Price | Required for Limit (2) and Stop Limit (4). |
| 99 | StopPx | C | Price | Required for Stop (3) and Stop Limit (4). |
| 59 | TimeInForce | N | Char | 0=Day (default), 3=Immediate or Cancel. All other values are rejected. |
| 1138 | DisplayQty | N | Int | Iceberg display quantity. Must be greater than 0. Omit for a fully displayed order. |
| 110 | MinQty | N | Int | Minimum fill quantity. Must be greater than 0. |
| 1028 | ManualOrderIndicator | N | Boolean | Y=Manual (entered by a person), N=Automated (generated by a trading system). If omitted, the order is submitted as automated. Any other value is rejected. See Manual and automated orders. |
| 21 | HandlInst | N | Char | Accepted but not validated. |
| 60 | TransactTime | N | UTCTimestamp | Accepted but not used. The gateway applies its own timestamp. |
Supported order types
| OrdType (40) | TimeInForce (59) | Order type | Required fields |
|---|---|---|---|
1 |
0 or 3 |
Market. IOC is accepted and has no additional effect. | |
2 |
0 |
Limit | Price |
3 |
0 |
Stop (stop market) | StopPx |
4 |
0 |
Stop Limit | Price, StopPx |
2 |
3 |
Limit IOC (Fill-and-Kill): executes immediately for any available quantity, and the unfilled remainder is cancelled. The order never rests on the book. | Price |
Every other combination is rejected, including IOC with Stop or Stop Limit. GTC, GTD, OPG, GTX and all-or-none FOK are not supported. Day orders expire at the end of the trading session.
Manual and automated orders
CME requires every order to be identified as either manual or automated. Nanoconda sets this flag on the order it sends to CME from ManualOrderIndicator(1028):
| ManualOrderIndicator (1028) | Submitted to CME as |
|---|---|
N |
Automated |
Y |
Manual |
| Absent | Automated |
Send 1028=Y only for orders a person enters manually, for example from a manual order-entry screen. Orders generated by an algorithm or other trading software must be sent with 1028=N or with the tag omitted.
The flag is set when the order is submitted and applies to the order for its lifetime. Cancel and cancel/replace requests do not change it.
Every ExecutionReport for an accepted order, and every TradeCaptureReport, returns the flag in ManualOrderIndicator(1028). This includes drop-copy reports for orders entered through other sessions or interfaces, such as the Real-Time GUI.
Response
- Accepted:
ExecutionReport(8) withExecType=A(Pending New), followed byExecType=0(New) once the exchange acknowledges the order. See Message Flows. - Rejected:
ExecutionReport(8) withExecType=8andOrdStatus=8(Rejected), with the reason inText(58). Reasons include:- Validation failures (
Text(58) only): unsupportedTimeInForce, unsupportedOrdType/TimeInForcecombination, missingSide,OrderQtynot greater than 0,ManualOrderIndicatornotYorN, or a role not permitted to trade (VIEWER). - Pre-trade risk failures (
Text(58) andOrdRejReason(103)): price outside the instrument's price band, price not on a valid tick, or size/exposure/capital limits exceeded. - Rejection by the exchange (
OrdRejReason(103)).
- Validation failures (
- Unknown symbol:
BusinessMessageReject(j),BusinessRejectReason(380)=2(Unknown Security). NoExecutionReportis sent.
OrderCancelRequest (35=F)
Client → Nanoconda
| Tag | Name | Req'd | Description |
|---|---|---|---|
| 11 | ClOrdID | Y | Identifier for this cancel request. After a successful cancel it becomes the order's current ClOrdID. |
| 37 | OrderID | C | Nanoconda order identifier. Takes precedence when present. Required if OrigClOrdID is not sent. |
| 41 | OrigClOrdID | C | The order's current ClOrdID. Used only when OrderID is absent. Required if OrderID is not sent. |
Scope: session-scoped. You can cancel only orders that were submitted or last amended on the same FIX session.
Response: ExecutionReport(8) (ExecType=4 Canceled, which may be preceded by 6 Pending Cancel) on success. OrderCancelReject(9) if the order is unknown to this session, the role is not permitted, or the cancel is rejected.
OrderCancelReplaceRequest (35=G)
Client → Nanoconda
| Tag | Name | Req'd | Description |
|---|---|---|---|
| 11 | ClOrdID | Y | Identifier for this replace request. After a successful replace it becomes the order's current ClOrdID. |
| 37 | OrderID | C | Nanoconda order identifier. Takes precedence when present. Required if OrigClOrdID is not sent. |
| 41 | OrigClOrdID | C | The order's current ClOrdID. Used only when OrderID is absent. Required if OrderID is not sent. |
| 44 | Price | N | New limit price. If omitted, the price is unchanged. |
| 38 | OrderQty | N | New total order quantity. If omitted, the quantity is unchanged. |
Only Price and OrderQty can be modified. TimeInForce, StopPx, ManualOrderIndicator and other order attributes are not changed even if they are sent.
Scope: session-scoped, the same as OrderCancelRequest.
Response: ExecutionReport(8) (ExecType=5 Replaced, which may be preceded by E Pending Replace) on success. OrderCancelReject(9) on failure.
OrderStatusRequest (35=H)
Client → Nanoconda
| Tag | Name | Req'd | Description |
|---|---|---|---|
| 37 | OrderID | C | Takes precedence when present. |
| 11 | ClOrdID | C | Used if OrderID is absent or not found. |
Scope: account-wide for open orders. It returns any working order on the account, including orders submitted by other sessions or interfaces and by earlier, disconnected sessions. Orders that are no longer working (filled, cancelled or rejected) are not available and return Unknown ID. Use TradeCaptureReportRequest(AD) for fills.
Response: ExecutionReport(8) with the order's current state, or BusinessMessageReject(j), BusinessRejectReason(380)=1 (Unknown ID) if no working order matches.
OrderMassStatusRequest (35=AF)
Client → Nanoconda
| Tag | Name | Req'd | Description |
|---|---|---|---|
| 584 | MassStatusReqID | N | Accepted and not used. |
| 585 | MassStatusReqType | N | Accepted and not used. Selection is controlled only by the filters below. |
| 55 | Symbol | N | Filter by instrument. |
| 54 | Side | N | Filter by side (1/2). |
Scope: account-wide. It returns every open order on the account that matches the optional filters.
Response: one ExecutionReport(8) per matching order.
Note
If no orders match, no response is sent. Treat the absence of ExecutionReports as a zero-result response.
OrderMassCancelRequest (35=q)
Client → Nanoconda
| Tag | Name | Req'd | Description |
|---|---|---|---|
| 55 | Symbol | N | Filter by instrument. |
| 54 | Side | N | Filter by side (1/2). |
MassCancelRequestType(530) is not used. Selection is controlled only by the filters above.
Scope: session-scoped. It cancels only open orders that were submitted or last amended on the current FIX session.
Response: one ExecutionReport(8) per matching order, showing its status after the cancel was submitted. If the cancel was accepted, the order shows 6 (Pending Cancel) and a 4 (Canceled) report follows when the exchange confirms. If the cancel failed for that order, its OrdStatus is unchanged. If no orders match, no response is sent. A VIEWER role receives BusinessMessageReject(j), BusinessRejectReason(380)=6 (Not authorized).
6. Execution Reports & Cancel Rejects
ExecutionReport (35=8)
Nanoconda → Client
| Tag | Name | Presence | Description |
|---|---|---|---|
| 1 | Account | Always | |
| 37 | OrderID | Always | Nanoconda order identifier. NONE if the order was rejected before it was assigned an ID. |
| 11 | ClOrdID | Usually | The order's current ClOrdID. Omitted only if no ClOrdID is on record for the order. |
| 17 | ExecID | Always | |
| 150 | ExecType | Always | See the table below. |
| 39 | OrdStatus | Always | See the table below. |
| 103 | OrdRejReason | Conditional | On pre-trade risk and exchange rejects (ExecType=8). Not sent on order validation rejects. See OrdRejReason. |
| 55 | Symbol | Always | |
| 54 | Side | Always | |
| 40 | OrdType | Always | |
| 59 | TimeInForce | Always | 0 or 3. |
| 38 | OrderQty | Always | |
| 44 | Price | Conditional | Limit, Stop Limit and Limit IOC orders. |
| 99 | StopPx | Conditional | Stop and Stop Limit orders. |
| 1138 | DisplayQty | Conditional | If the order was submitted with it. |
| 110 | MinQty | Conditional | If the order was submitted with it. |
| 1028 | ManualOrderIndicator | Conditional | Y=Manual, N=Automated: how the order was flagged when it was submitted to CME. Present on every report for an order accepted by Nanoconda, whichever session or interface entered it. Omitted when OrderID is NONE. |
| 151 | LeavesQty | Always | |
| 14 | CumQty | Always | |
| 6 | AvgPx | Always | 0 until the first fill. |
| 32 | LastQty | On fills | Quantity of this fill. |
| 31 | LastPx | On fills | Price of this fill. |
| 60 | TransactTime | Always | UTC. |
| 58 | Text | Conditional | Reason for a new-order reject. |
ExecType (150) and OrdStatus (39)
ExecType and OrdStatus carry the same value, except for an exchange-rejected cancel or replace (see below).
| Value | Meaning | Description |
|---|---|---|
A |
Pending New | Order received by Nanoconda and awaiting exchange acknowledgement. |
0 |
New | Order acknowledged by the exchange and working. |
1 |
Partially Filled | |
2 |
Filled | Also used for trade corrections. |
6 |
Pending Cancel | Cancel sent and awaiting confirmation. |
4 |
Canceled | Also used for trade cancellations (busts). |
E |
Pending Replace | Replace sent and awaiting confirmation. |
5 |
Replaced | |
8 |
Rejected | New order rejected (OrdStatus=8), or a cancel/replace rejected by the exchange (OrdStatus=0). In the second case the order is still working. |
Cancel/replace rejections: two forms
A rejected cancel or cancel/replace request can arrive in either of two forms:
- Rejected by Nanoconda (immediately, before the request reaches the exchange):
OrderCancelReject(9) withCxlRejReason(102). - Rejected by the exchange (after the request was forwarded, for example because the order had already been filled): an unsolicited
ExecutionReport(8) withExecType=8,OrdStatusshowing that the order is still working, andOrdRejReason(103) carrying the exchange's reason code.
Warning
To detect every failed cancel or replace, watch for both OrderCancelReject(9) and ExecutionReport(8) with ExecType=8 on a working order.
OrderCancelReject (35=9)
Nanoconda → Client
| Tag | Name | Description |
|---|---|---|
| 1 | Account | |
| 37 | OrderID | NONE if the order is unknown. |
| 11 | ClOrdID | ClOrdID of the rejected request. |
| 41 | OrigClOrdID | |
| 39 | OrdStatus | Always 8. |
| 434 | CxlRejResponseTo | 1=OrderCancelRequest, 2=OrderCancelReplaceRequest. |
| 102 | CxlRejReason | See CxlRejReason. |
| 58 | Text | Always present. Human-readable reason. |
OrderCancelReject is always sent to the session that made the request. If the account's risk controls or order management reject a cancel or replace on a working order, the OrderCancelReject also goes to every other FIX session on the account (see Drop Copy). Rejects for an unknown order or an unauthorized role go only to the requesting session.
7. Market Data
Market data is available to the TRADER role only.
MarketDataRequest (35=V)
Client → Nanoconda
| Tag | Name | Req'd | Description |
|---|---|---|---|
| 262 | MDReqID | Y | Subscription identifier. Included in every response for this subscription. |
| 263 | SubscriptionRequestType | Y | 1=Subscribe, 2=Unsubscribe. 0 (Snapshot) is treated as 1. Snapshot-only requests are not supported. |
| 264 | MarketDepth | N | 1=Top of book only. Any other value, or absent, gives top of book plus full depth. |
| 267 | NoMDEntryTypes | N | |
| → 269 | MDEntryType | N | 0=Bid, 1=Offer. If absent, both sides are sent. |
| 146 | NoRelatedSym | N | |
| → 55 | Symbol | Y | One or more instruments. Every Symbol in the message is subscribed. |
Response:
- Subscribe: one
MarketDataSnapshotFullRefresh(W) per symbol, followed byMarketDataIncrementalRefresh(X) updates. - Unsubscribe: no response.
- Rejected:
MarketDataRequestReject(Y) for an unauthorized role, an unknown symbol, or a request with no symbol.
MarketDataRequestReject (35=Y)
Nanoconda → Client
| Tag | Name | Description |
|---|---|---|
| 262 | MDReqID | |
| 58 | Text | Reason, e.g. Not authorized, Unknown symbol, No Symbol specified. |
MDReqRejReason(281) is not sent.
MarketDataSnapshotFullRefresh (35=W)
Nanoconda → Client. Sent once per symbol when the subscription starts. Contains the best bid and best offer only. A side with no orders is omitted, so NoMDEntries can be 0. Full-depth levels are not included; they arrive as MarketDataIncrementalRefresh entries with MDUpdateAction=0 (New) immediately after the snapshot.
| Tag | Name | Description |
|---|---|---|
| 262 | MDReqID | |
| 55 | Symbol | |
| 268 | NoMDEntries | |
| → 269 | MDEntryType | 0=Bid, 1=Offer. |
| → 270 | MDEntryPx | |
| → 271 | MDEntrySize |
MarketDataIncrementalRefresh (35=X)
Nanoconda → Client. The gateway checks each subscribed book every millisecond and sends an update for anything that changed since the last check. Updates are conflated: several changes within the same millisecond arrive as one update showing the latest state. Each subscription produces two update streams:
- Top of book: always active. One message per change, with an entry for each side that changed.
- Full depth: active unless
MarketDepth(264)=1was requested. Up to 10 price levels per side. One message per changed level. Each entry also carriesMDPriceLevel(1023).
| Tag | Name | Description |
|---|---|---|
| 262 | MDReqID | |
| 268 | NoMDEntries | |
| → 279 | MDUpdateAction | 0=New, 1=Change, 2=Delete. |
| → 269 | MDEntryType | 0=Bid, 1=Offer. |
| → 55 | Symbol | |
| → 270 | MDEntryPx | Omitted on Delete. |
| → 271 | MDEntrySize | Omitted on Delete. |
| → 1023 | MDPriceLevel | Full-depth entries only. 1-based. |
Depth is maintained by level position, not by price. MDUpdateAction refers to the level number in MDPriceLevel: 0 (New) means the level was previously empty. 1 (Change) means the level had quantity before and after the update; its price may also have changed. 2 (Delete) means the level is now empty. When a price level is added or removed, the levels below it shift and are each sent as a Change.
8. Reference Data
SecurityListRequest (35=x)
Client → Nanoconda
| Tag | Name | Req'd | Description |
|---|---|---|---|
| 320 | SecurityReqID | Y | Included in the response. |
| 559 | SecurityListRequestType | N | 0 with Symbol(55) returns that single instrument, or NoRelatedSym=0 if it is unknown. Any other value, or absent, returns every tradeable instrument. |
| 55 | Symbol | C | Used with SecurityListRequestType=0. |
SecurityList (35=y)
Nanoconda → Client
| Tag | Name | Description |
|---|---|---|
| 320 | SecurityReqID | |
| 146 | NoRelatedSym | |
| → 55 | Symbol | |
| → 207 | SecurityExchange | Exchange MIC, e.g. XCME. |
SecurityDefinitionRequest (35=c)
Client → Nanoconda
| Tag | Name | Req'd | Description |
|---|---|---|---|
| 320 | SecurityReqID | Y | Included in the response. |
| 55 | Symbol | Y | Single instrument. |
SecurityDefinition (35=d)
Nanoconda → Client
| Tag | Name | Description |
|---|---|---|
| 320 | SecurityReqID | |
| 322 | SecurityResponseID | Assigned by Nanoconda. |
| 393 | TotNoRelatedSym | 1=found, 0=not found. |
| 55 | Symbol | |
| 207 | SecurityExchange | Exchange MIC. |
| 167 | SecurityType | FUT, OPT or MLEG. |
| 969 | MinPriceIncrement | Tick size. |
| 231 | ContractMultiplier | |
| 1148 | LowLimitPrice | Lower price band for the current trading day. Omitted if no band applies. |
| 1149 | HighLimitPrice | Upper price band for the current trading day. Omitted if no band applies. |
| 58 | Text | Unknown symbol when not found. Only SecurityReqID, TotNoRelatedSym=0, Symbol (as requested) and Text are sent. |
LowLimitPrice and HighLimitPrice are the price band that pre-trade risk checks on NewOrderSingle. An order priced outside the band is rejected with OrdRejReason(103)=16.
9. Positions
RequestForPositions (35=AN)
Client → Nanoconda
| Tag | Name | Req'd | Description |
|---|---|---|---|
| 710 | PosReqID | N | Included in every response for this request. |
| 724 | PosReqType | N | Accepted and not used. |
| 263 | SubscriptionRequestType | N | See below. |
| SubscriptionRequestType (263) | Behaviour |
|---|---|
0 or absent |
Snapshot. Returns current positions once. |
1 |
Snapshot + Updates. Returns current positions, then sends a new PositionReport for an instrument each time a fill changes its position, until you unsubscribe or the session ends. |
2 |
Unsubscribe. No response. |
Position updates are sent only to sessions that subscribed with SubscriptionRequestType=1.
Scope: account-wide.
PositionReport (35=AP)
Nanoconda → Client. One report per instrument with activity.
| Tag | Name | Description |
|---|---|---|
| 710 | PosReqID | From the request. For subscription updates, the PosReqID of the original subscription. |
| 721 | PosMaintRptID | Unique report identifier. |
| 728 | PosReqResult | 0=Valid request, 2=No positions found. |
| 727 | TotalNumPosReports | Number of reports in this response. 1 on subscription updates. |
| 325 | UnsolicitedIndicator | N=response to a request, Y=subscription update caused by a fill. |
| 55 | Symbol | |
| 715 | ClearingBusinessDate | YYYYMMDD, current UTC date. |
| 702 | NoPositions | 1 |
| → 703 | PosType | TOT (Total Transaction Qty). |
| → 704 | LongQty | Gross filled long quantity. |
| → 705 | ShortQty | Gross filled short quantity. |
| 753 | NoPosAmt | 1 |
| → 707 | PosAmtType | FMTM (Final Mark-to-Market). |
| → 708 | PosAmt | Open (unrealized) P&L. |
Gross quantities
LongQty and ShortQty are gross filled quantities and are not netted against each other. For example, buying 2 and selling 2 of the same instrument reports LongQty=2 and ShortQty=2. Net position = LongQty minus ShortQty.
If the account has no positions, a single PositionReport is sent with PosReqResult=2, TotalNumPosReports=0, and no instrument, position or amount fields.
Each session has one position subscription. A new RequestForPositions with SubscriptionRequestType=1 replaces the previous subscription and its PosReqID.
Margin and risk-limit figures are not available over FIX.
10. Trade Capture
TradeCaptureReportRequest (35=AD)
Client → Nanoconda
| Tag | Name | Req'd | Description |
|---|---|---|---|
| 568 | TradeRequestID | N | Included in every response. |
| 569 | TradeRequestType | N | Accepted and not used. |
| 55 | Symbol | N | Filter by instrument. |
| 37 | OrderID | N | Filter by order. |
Scope: account-wide. Returns every fill on the account that matches the filters, whichever session or interface placed the order. A new session can retrieve the account's full trade history without having placed any orders itself.
TradeCaptureReport (35=AE)
Nanoconda → Client. One report per matching fill.
| Tag | Name | Description |
|---|---|---|
| 568 | TradeRequestID | |
| 571 | TradeReportID | Unique report identifier. |
| 487 | TradeReportTransType | 0 (New). |
| 748 | TotNumTradeReports | Total number of reports in this response. |
| 912 | LastRptRequested | Y on the last report of the response, otherwise N. |
| 17 | ExecID | |
| 37 | OrderID | |
| 55 | Symbol | |
| 54 | Side | |
| 1028 | ManualOrderIndicator | Y=Manual, N=Automated: how the order behind this fill was flagged when it was submitted to CME. |
| 31 | LastPx | Fill price. |
| 32 | LastQty | Fill quantity. |
| 60 | TransactTime | UTC. |
TradeCaptureReportRequestAck (35=AQ)
Nanoconda → Client. Sent instead of TradeCaptureReport when no fills match or trade history is unavailable.
| Tag | Name | Description |
|---|---|---|
| 568 | TradeRequestID | |
| 748 | TotNumTradeReports | 0 |
| 912 | LastRptRequested | Y |
| 58 | Text | Trade log not available when trade history cannot be retrieved. |
11. Rejects & Error Handling
Reject (35=3)
Session-level reject. It is sent for any application message received before Logon has completed.
| Tag | Name | Description |
|---|---|---|
| 45 | RefSeqNum | MsgSeqNum of the rejected message. |
| 373 | SessionRejectReason | 99 (Other). |
| 58 | Text | Not logged on. |
BusinessMessageReject (35=j)
Application-level reject for problems not tied to a specific order's fields.
| Tag | Name | Description |
|---|---|---|
| 45 | RefSeqNum | MsgSeqNum of the rejected message. |
| 372 | RefMsgType | MsgType of the rejected message. |
| 380 | BusinessRejectReason | See below. |
| 58 | Text | Human-readable reason. |
| Condition | BusinessRejectReason (380) |
|---|---|
Unsupported MsgType |
3 Unsupported Message Type |
Unknown Symbol on NewOrderSingle |
2 Unknown Security |
OrderStatusRequest for an unknown order |
1 Unknown ID |
OrderMassCancelRequest from a VIEWER role |
6 Not authorized |
| Unsolicited exchange-side error related to an account order | Exchange reason code, passed through unchanged. Values above 7 are exchange-defined (for example throttle limits, kill switch, risk controls). |
Where to find reject reasons
| Rejected request | Response | Reason field |
|---|---|---|
| Message before logon | Reject(3) |
SessionRejectReason(373) |
| Logon | Logout(5) |
Text(58) |
| New order | ExecutionReport(8), ExecType=8 |
Text(58), and OrdRejReason(103) for risk and exchange rejects |
| Cancel / replace, rejected by Nanoconda | OrderCancelReject(9) |
CxlRejReason(102), Text(58) |
| Cancel / replace, rejected by exchange | ExecutionReport(8), ExecType=8 |
OrdRejReason(103) |
| Market data | MarketDataRequestReject(Y) |
Text(58) |
| Other application messages | BusinessMessageReject(j) |
BusinessRejectReason(380), Text(58) |
12. Drop Copy
This section is for clearing firms, FCMs and risk desks that need real-time, read-only visibility into account activity without order entry. It gathers in one place the relevant behaviour described elsewhere in this document.
Setup
- Log on with a VIEWER username (see Logon). VIEWER cannot enter orders or change the account, so the drop-copy connection is read-only.
- No subscription is needed for order and fill activity. Every FIX session on the account automatically receives real-time
ExecutionReports for all account activity, whichever session or interface created it. - Optional: subscribe to position updates with
RequestForPositions(AN),SubscriptionRequestType(263)=1.
Real-time unsolicited messages
| Message | Content |
|---|---|
ExecutionReport(8) |
Every order lifecycle event on the account: acknowledgements, partial and full fills, cancels, replaces, new-order rejects, and cancel/replace rejects from the exchange (ExecType=8). Each report shows whether the order was submitted to CME as manual or automated in ManualOrderIndicator(1028). |
OrderCancelReject(9) |
Cancel/replace requests on working orders rejected by Nanoconda risk controls or order management. |
BusinessMessageReject(j) |
Exchange-side errors related to an account order. |
PositionReport(AP) |
Position and P&L updates after fills, only if subscribed. |
Reconciliation
These account-wide requests return complete, current state whichever session created the activity. Use them to reconcile at start of day, after a disconnect, or at any other time:
| Request | Returns |
|---|---|
OrderStatusRequest(H) / OrderMassStatusRequest(AF) |
Current state of a single working order / all working orders |
TradeCaptureReportRequest(AD) |
Full fill history, optionally filtered by Symbol or OrderID |
RequestForPositions(AN) |
Current positions and open P&L per instrument |
Messages missed while disconnected are not replayed. See Reconnection & Recovery.
13. Message Flows
Session establishment
| # | Direction | Message |
|---|---|---|
| 1 | Client → Nanoconda | Logon(A) |
| 2 | Nanoconda → Client | Logon(A) |
Instrument discovery
| # | Direction | Message |
|---|---|---|
| 1 | Client → Nanoconda | SecurityListRequest(x) |
| 2 | Nanoconda → Client | SecurityList(y) |
| 3 | Client → Nanoconda | SecurityDefinitionRequest(c) (optional, per instrument) |
| 4 | Nanoconda → Client | SecurityDefinition(d) |
Market data subscription
| # | Direction | Message |
|---|---|---|
| 1 | Client → Nanoconda | MarketDataRequest(V), SubscriptionRequestType=1 |
| 2 | Nanoconda → Client | MarketDataSnapshotFullRefresh(W), one per symbol |
| 3 | Nanoconda → Client | MarketDataIncrementalRefresh(X), repeated on each book change |
Limit order through fill
| # | Direction | Message |
|---|---|---|
| 1 | Client → Nanoconda | NewOrderSingle(D), OrdType=2 |
| 2 | Nanoconda → Client | ExecutionReport(8), ExecType=A (Pending New) |
| 3 | Nanoconda → Client | ExecutionReport(8), ExecType=0 (New) |
| 4 | Nanoconda → Client | ExecutionReport(8), ExecType=1 (Partially Filled) and/or 2 (Filled) |
Modify and cancel a working order
| # | Direction | Message |
|---|---|---|
| 1 | Client → Nanoconda | OrderCancelReplaceRequest(G), OrderID of the working order |
| 2 | Nanoconda → Client | ExecutionReport(8), ExecType=5 (Replaced), which may be preceded by E (Pending Replace) |
| 3 | Client → Nanoconda | OrderCancelRequest(F), OrderID (or OrigClOrdID = the replace request's ClOrdID) |
| 4 | Nanoconda → Client | ExecutionReport(8), ExecType=4 (Canceled), which may be preceded by 6 (Pending Cancel) |
Order status after reconnect
| # | Direction | Message |
|---|---|---|
| 1 | Client → Nanoconda | Logon(A) |
| 2 | Client → Nanoconda | OrderStatusRequest(H) or OrderMassStatusRequest(AF) |
| 3 | Nanoconda → Client | ExecutionReport(8) per order (no response from AF if there are no open orders) |
Trade history
| # | Direction | Message |
|---|---|---|
| 1 | Client → Nanoconda | TradeCaptureReportRequest(AD), optional Symbol / OrderID filter |
| 2 | Nanoconda → Client | TradeCaptureReport(AE) x N, or TradeCaptureReportRequestAck(AQ) if none |
Positions snapshot and subscription
| # | Direction | Message |
|---|---|---|
| 1 | Client → Nanoconda | RequestForPositions(AN), SubscriptionRequestType=0 (snapshot) or 1 (snapshot + updates) |
| 2 | Nanoconda → Client | PositionReport(AP) x N, one per instrument, or one with PosReqResult=2 if there are none |
| 3 | Nanoconda → Client | PositionReport(AP), UnsolicitedIndicator=Y, after each fill (subscription only) |
| 4 | Client → Nanoconda | RequestForPositions(AN), SubscriptionRequestType=2 (end subscription) |
Drop copy
| # | Direction | Message |
|---|---|---|
| 1 | Client → Nanoconda | Logon(A), VIEWER role |
| 2 | Nanoconda → Client | ExecutionReport(8) / OrderCancelReject(9) / BusinessMessageReject(j), unsolicited, as account activity occurs |
Logout
| # | Direction | Message |
|---|---|---|
| 1 | Client → Nanoconda | Logout(5) |
| 2 | Nanoconda → Client | Logout(5), then the connection is closed |
14. Reconnection & Recovery
FIX sessions do not persist across a disconnect. Messages are not replayed (ResendRequest is answered with a sequence reset only), and order modification requests are session-scoped. After a reconnect:
| Capability | Behaviour on the new session |
|---|---|
OrderStatusRequest, OrderMassStatusRequest |
Available for all orders still working, including those submitted before the disconnect. |
RequestForPositions, TradeCaptureReportRequest |
Fully available. Account-wide, including all activity from before the disconnect. |
OrderCancelRequest, OrderCancelReplaceRequest, OrderMassCancelRequest |
Apply only to orders submitted or amended on the new session. Orders from the previous session cannot be cancelled or modified over FIX from the new session. |
| Messages sent while disconnected | Not replayed. Recover state with the account-wide queries above. |
Recommended reconnect sequence
Logon(A)OrderMassStatusRequest(AF): get every working order and itsLeavesQty/CumQty. Any order you hold as open that is not returned is no longer working.RequestForPositions(AN): confirm positions against your own records.TradeCaptureReportRequest(AD): retrieve fill detail for the disconnected period, if needed.
If your workflow needs to cancel or modify orders from a previous session, contact your Nanoconda account representative.
15. Differences from FIX 4.4 & Unsupported Features
| Area | Nanoconda behaviour |
|---|---|
| TimeInForce | Only Day (0) and IOC (3, Limit orders only). GTC, GTD, OPG, GTX and FOK are rejected. |
| Order modification | OrderCancelReplaceRequest modifies only Price and OrderQty. |
| Order management scope | Cancel, replace and mass cancel are session-scoped. Status, positions and trade capture are account-wide. |
| Mass requests | OrderMassStatusRequest and OrderMassCancelRequest filter only by Symbol and Side. MassStatusReqType(585) and MassCancelRequestType(530) are not used. |
| Mass request results | OrderMassStatusRequest and OrderMassCancelRequest send no response when no orders match. |
| Sequence numbers | Inbound gaps are not enforced. ResendRequest is answered with SequenceReset in Reset mode (GapFillFlag=N), with no message replay. |
| Logon reject | Sent as Logout(5) with Text(58). No numeric code. |
| Market data | Only snapshot + updates (SubscriptionRequestType=0 is treated as 1). Bid and Offer entries only. No MDReqRejReason(281). |
| DisplayQty / MinQty | Passed through to the exchange as submitted and echoed on ExecutionReport. |
| Party identification | Parties component (PartyID/PartyRole), SenderSubID(50) and TargetSubID(57) are not used. Each FIX session is bound to one account. |
| Margin / risk limits | Not available over FIX. |
| Not supported | Multi-leg order entry (NewOrderMultileg), cross orders (NewOrderCross), quoting (MassQuote, QuoteCancel), allocations, and any message not listed in Supported Messages. These are rejected with BusinessMessageReject(j), BusinessRejectReason=3. |
Appendix A: Tag Reference
Every tag read or sent by the Nanoconda FIX gateway, in numeric order.
| Tag | Name | Messages |
|---|---|---|
| 1 | Account | ExecutionReport, OrderCancelReject |
| 6 | AvgPx | ExecutionReport |
| 7 | BeginSeqNo | ResendRequest |
| 8 | BeginString | Header (all) |
| 9 | BodyLength | Header (all) |
| 10 | CheckSum | Trailer (all) |
| 11 | ClOrdID | NewOrderSingle, OrderCancelRequest, OrderCancelReplaceRequest, OrderStatusRequest, ExecutionReport, OrderCancelReject |
| 14 | CumQty | ExecutionReport |
| 15 | Currency | Accepted and not used |
| 17 | ExecID | ExecutionReport, TradeCaptureReport |
| 21 | HandlInst | NewOrderSingle (accepted and not used) |
| 31 | LastPx | ExecutionReport, TradeCaptureReport |
| 32 | LastQty | ExecutionReport, TradeCaptureReport |
| 34 | MsgSeqNum | Header (all) |
| 35 | MsgType | Header (all) |
| 36 | NewSeqNo | SequenceReset |
| 37 | OrderID | OrderCancelRequest, OrderCancelReplaceRequest, OrderStatusRequest, TradeCaptureReportRequest, ExecutionReport, OrderCancelReject, TradeCaptureReport |
| 38 | OrderQty | NewOrderSingle, OrderCancelReplaceRequest, ExecutionReport |
| 39 | OrdStatus | ExecutionReport, OrderCancelReject |
| 40 | OrdType | NewOrderSingle, ExecutionReport |
| 41 | OrigClOrdID | OrderCancelRequest, OrderCancelReplaceRequest, OrderCancelReject |
| 44 | Price | NewOrderSingle, OrderCancelReplaceRequest, ExecutionReport |
| 45 | RefSeqNum | Reject, BusinessMessageReject |
| 49 | SenderCompID | Header (all) |
| 52 | SendingTime | Header (all) |
| 54 | Side | NewOrderSingle, OrderMassStatusRequest, OrderMassCancelRequest, ExecutionReport, TradeCaptureReport |
| 55 | Symbol | Order, market data, reference data, position and trade capture messages |
| 56 | TargetCompID | Header (all) |
| 58 | Text | ExecutionReport, Logout, Reject, BusinessMessageReject, OrderCancelReject, MarketDataRequestReject, SecurityDefinition, TradeCaptureReportRequestAck |
| 59 | TimeInForce | NewOrderSingle, ExecutionReport |
| 60 | TransactTime | NewOrderSingle (accepted and not used), ExecutionReport, TradeCaptureReport |
| 98 | EncryptMethod | Logon |
| 99 | StopPx | NewOrderSingle, ExecutionReport |
| 102 | CxlRejReason | OrderCancelReject |
| 103 | OrdRejReason | ExecutionReport |
| 108 | HeartBtInt | Logon |
| 110 | MinQty | NewOrderSingle, ExecutionReport |
| 112 | TestReqID | TestRequest, Heartbeat |
| 123 | GapFillFlag | SequenceReset |
| 146 | NoRelatedSym | MarketDataRequest, SecurityList |
| 150 | ExecType | ExecutionReport |
| 151 | LeavesQty | ExecutionReport |
| 167 | SecurityType | SecurityDefinition |
| 207 | SecurityExchange | SecurityList, SecurityDefinition |
| 231 | ContractMultiplier | SecurityDefinition |
| 262 | MDReqID | MarketDataRequest, MarketDataSnapshotFullRefresh, MarketDataIncrementalRefresh, MarketDataRequestReject |
| 263 | SubscriptionRequestType | MarketDataRequest, RequestForPositions |
| 264 | MarketDepth | MarketDataRequest |
| 267 | NoMDEntryTypes | MarketDataRequest |
| 268 | NoMDEntries | MarketDataSnapshotFullRefresh, MarketDataIncrementalRefresh |
| 269 | MDEntryType | MarketDataRequest, MarketDataSnapshotFullRefresh, MarketDataIncrementalRefresh |
| 270 | MDEntryPx | MarketDataSnapshotFullRefresh, MarketDataIncrementalRefresh |
| 271 | MDEntrySize | MarketDataSnapshotFullRefresh, MarketDataIncrementalRefresh |
| 279 | MDUpdateAction | MarketDataIncrementalRefresh |
| 320 | SecurityReqID | SecurityListRequest, SecurityList, SecurityDefinitionRequest, SecurityDefinition |
| 322 | SecurityResponseID | SecurityDefinition |
| 325 | UnsolicitedIndicator | PositionReport |
| 372 | RefMsgType | BusinessMessageReject |
| 373 | SessionRejectReason | Reject |
| 380 | BusinessRejectReason | BusinessMessageReject |
| 393 | TotNoRelatedSym | SecurityDefinition |
| 434 | CxlRejResponseTo | OrderCancelReject |
| 487 | TradeReportTransType | TradeCaptureReport |
| 553 | Username | Logon |
| 554 | Password | Logon |
| 559 | SecurityListRequestType | SecurityListRequest |
| 568 | TradeRequestID | TradeCaptureReportRequest, TradeCaptureReport, TradeCaptureReportRequestAck |
| 569 | TradeRequestType | TradeCaptureReportRequest (accepted and not used) |
| 571 | TradeReportID | TradeCaptureReport |
| 584 | MassStatusReqID | OrderMassStatusRequest (accepted and not used) |
| 585 | MassStatusReqType | OrderMassStatusRequest (accepted and not used) |
| 702 | NoPositions | PositionReport |
| 703 | PosType | PositionReport |
| 704 | LongQty | PositionReport |
| 705 | ShortQty | PositionReport |
| 707 | PosAmtType | PositionReport |
| 708 | PosAmt | PositionReport |
| 710 | PosReqID | RequestForPositions, PositionReport |
| 715 | ClearingBusinessDate | PositionReport |
| 721 | PosMaintRptID | PositionReport |
| 724 | PosReqType | RequestForPositions (accepted and not used) |
| 727 | TotalNumPosReports | PositionReport |
| 728 | PosReqResult | PositionReport |
| 748 | TotNumTradeReports | TradeCaptureReport, TradeCaptureReportRequestAck |
| 753 | NoPosAmt | PositionReport |
| 912 | LastRptRequested | TradeCaptureReport, TradeCaptureReportRequestAck |
| 969 | MinPriceIncrement | SecurityDefinition |
| 1023 | MDPriceLevel | MarketDataIncrementalRefresh (full-depth entries) |
| 1028 | ManualOrderIndicator | NewOrderSingle, ExecutionReport, TradeCaptureReport |
| 1138 | DisplayQty | NewOrderSingle, ExecutionReport |
| 1148 | LowLimitPrice | SecurityDefinition |
| 1149 | HighLimitPrice | SecurityDefinition |
Appendix B: Enumerations
OrdType (40)
| Value | Meaning |
|---|---|
1 |
Market |
2 |
Limit (Limit IOC when TimeInForce=3) |
3 |
Stop |
4 |
Stop Limit |
TimeInForce (59)
| Value | Meaning | Supported |
|---|---|---|
0 |
Day | Yes (default) |
1 |
Good Till Cancel (GTC) | No |
2 |
At the Opening (OPG) | No |
3 |
Immediate or Cancel (IOC) | Yes, Limit orders only (Fill-and-Kill) |
4 |
Fill or Kill (FOK) | No |
5 |
Good Till Crossing (GTX) | No |
6 |
Good Till Date (GTD) | No |
ManualOrderIndicator (1028)
| Value | Meaning |
|---|---|
Y |
Manual order |
N |
Automated order (default when absent) |
Side (54)
| Value | Meaning |
|---|---|
1 |
Buy |
2 |
Sell |
ExecType (150) / OrdStatus (39)
| Value | Meaning |
|---|---|
A |
Pending New |
0 |
New |
1 |
Partially Filled |
2 |
Filled |
6 |
Pending Cancel |
4 |
Canceled |
E |
Pending Replace |
5 |
Replaced |
8 |
Rejected |
See ExecutionReport for usage.
OrdRejReason (103)
Present on ExecutionReport with ExecType=8 for pre-trade risk and exchange rejects. Order validation rejects carry Text(58) only. It can come from two sources:
- Nanoconda (immediately, on
NewOrderSinglevalidation and pre-trade risk checks): the values marked "Yes" below. - Exchange (asynchronously, on an order or cancel/replace rejected by the exchange): the exchange's reject code, passed through unchanged. These codes are exchange-defined and may fall outside the standard FIX values below. Refer to CME iLink 3 documentation for their meaning.
| Value | Meaning | Sent by Nanoconda |
|---|---|---|
0 |
Broker / Exchange option | Yes (other risk or validation reject) |
1 |
Unknown symbol | Yes |
2 |
Exchange closed | |
3 |
Order exceeds limit | Yes (risk limit exceeded) |
4 |
Too late to enter | |
5 |
Unknown order | |
6 |
Duplicate order | |
7 |
Duplicate of a verbally communicated order | |
8 |
Stale order | |
9 |
Trade along required | |
10 |
Invalid investor ID | |
11 |
Unsupported order characteristic | Yes |
12 |
Surveillance option | |
13 |
Incorrect quantity | Yes |
14 |
Incorrect allocated quantity | |
15 |
Unknown account(s) | |
16 |
Price exceeds current price band | Yes (see LowLimitPrice(1148) / HighLimitPrice(1149)) |
18 |
Invalid price increment | |
99 |
Other |
CxlRejReason (102)
Present on OrderCancelReject. Sent only by Nanoconda. Cancel/replace requests rejected by the exchange are reported on ExecutionReport with OrdRejReason(103) instead (see Cancel/replace rejections).
| Value | Meaning | Sent by Nanoconda |
|---|---|---|
0 |
Too late to cancel | Yes |
1 |
Unknown order | Yes (order not found, or not submitted/amended on this session) |
2 |
Broker / Exchange option | Yes (other rejects) |
3 |
Order already in Pending Cancel or Pending Replace status | Yes |
4 |
Unable to process Order Mass Cancel Request | |
5 |
OrigOrdModTime did not match last TransactTime of order | |
6 |
Duplicate ClOrdID received | Yes |
99 |
Other | Yes (role not authorized, and other reasons; see Text(58)) |
BusinessRejectReason (380)
| Value | Meaning | Sent by Nanoconda |
|---|---|---|
0 |
Other | Yes |
1 |
Unknown ID | Yes (OrderStatusRequest for an unknown order) |
2 |
Unknown Security | Yes (unknown Symbol on NewOrderSingle) |
3 |
Unsupported Message Type | Yes |
4 |
Application not available | |
5 |
Conditionally required field missing | |
6 |
Not authorized | Yes (OrderMassCancelRequest from a VIEWER role) |
7 |
DeliverTo firm not available at this time | |
> 7 |
Exchange-defined | Yes (exchange reason codes passed through on unsolicited exchange-side errors, for example throttle limits, kill switch, risk controls) |
GapFillFlag (123)
| Value | Meaning |
|---|---|
N |
Reset mode. Always sent by Nanoconda in response to ResendRequest. |
Y |
Gap fill mode. Accepted from the client. |
SessionRejectReason (373)
| Value | Meaning |
|---|---|
99 |
Other: application message received before logon completed. This is the only value sent. |
SecurityType (167)
| Value | Meaning |
|---|---|
FUT |
Future |
OPT |
Option |
MLEG |
Multi-leg instrument (spread) |
SecurityListRequestType (559)
| Value | Meaning |
|---|---|
0 |
Single instrument, by Symbol(55) |
| Any other / absent | All tradeable instruments |
SubscriptionRequestType (263)
| Value | MarketDataRequest | RequestForPositions |
|---|---|---|
0 |
Treated as 1 |
Snapshot |
1 |
Snapshot + updates | Snapshot + updates |
2 |
Unsubscribe | Unsubscribe |
MarketDepth (264)
| Value | Meaning |
|---|---|
1 |
Top of book only |
| Any other / absent | Top of book and full depth |
MDEntryType (269)
| Value | Meaning |
|---|---|
0 |
Bid |
1 |
Offer |
MDUpdateAction (279)
| Value | Meaning |
|---|---|
0 |
New |
1 |
Change |
2 |
Delete |
PosReqResult (728)
| Value | Meaning |
|---|---|
0 |
Valid request |
2 |
No positions found |
PosType (703) / PosAmtType (707)
| Tag | Value | Meaning |
|---|---|---|
| 703 | TOT |
Total Transaction Qty |
| 707 | FMTM |
Final Mark-to-Market |
CxlRejResponseTo (434)
| Value | Meaning |
|---|---|
1 |
OrderCancelRequest |
2 |
OrderCancelReplaceRequest |
UnsolicitedIndicator (325)
| Value | Meaning |
|---|---|
N |
Response to a request |
Y |
Subscription update |
TradeReportTransType (487)
| Value | Meaning |
|---|---|
0 |
New |