OUCH 5.0 Protocol Overview#
NASDAQ accepts limit orders from system participants and executes matching orders when possible. Non-matching orders may be added to the NASDAQ Limit Order Book, where they wait in price-time priority.
OUCH is a low-level, high-performance order entry protocol for sending, replacing, canceling, and receiving updates on orders. It is designed for proprietary trading systems requiring maximal throughput and minimal latency.
For market-wide visibility into all orders, the companion protocol ITCH must be used.
Architecture#
OUCH uses logical messages passed between client and exchange.
Each message type has a fixed length.
Messages from NASDAQ to client use a sequenced, guaranteed-delivery transport (e.g., SoupBinTCP).
Messages from client to NASDAQ are not guaranteed but safe for benign retransmission. All host-bound messages are designed so that they can be benignly resent for robust recovery from connection and application failures. Each physical OUCH host port is bound to a NASDAQ-assigned logical OUCH Account. On a given day, every order entered on OUCH is uniquely identified by the combination of the logical OUCH Account and the participant-created UserRefNum field.
Each OUCH port is bound to an OUCH Account, and each order must use a unique, strictly increasing UserRefNum.
Data Types#
Alpha fields: fixed-width, left-justified, space-padded.
Numeric fields: big-endian. Types:
Long (8 bytes)
Integer (4 bytes)
Short (2 bytes)
Byte (1 byte)
Prices: implied 4 decimals, unsigned.
Max supported price: $199,999.9900 (decimal, 7735939C hex).
Market order sentinel: To flag an order as a market order for a cross, use special price: $214,748.3647 (decimal, 7FFFFFFF hex).
UserRefNum: unsigned, strictly increasing. For a given OUCH port, the UserRefNum is used as a transaction identifier, and must be both unique and strictly increasing throughout the trading day. The UserRefNum begins at 1 and the system ignores new order requests identified with UserRefNums lower than the last one processed, assuming they are retransmissions.
UserRefIdx: optional multiplexing key.
ClOrdID: alphanumeric.
Optional attributes: encoded as TagValue (see below).
TagValue Element#
Field |
Offset |
Length |
Type |
Notes |
|---|---|---|---|---|
Length |
0 |
1 |
Numeric |
Remaining length of element |
OptionTag |
1 |
1 |
Numeric |
Option identifier (see Appendix A) |
OptionValue |
2 |
var |
var |
The option’s value |
Fault Redundancy#
A single OUCH Account may be bound to multiple mirrored physical hosts. All hosts accept inbound messages and emit identical outbound messages. Clients may retransmit safely during failover.