Skip to main content
The market data sessions for the PMX Platform are available by a second, separate FIX gateway; they are not accessible via the order-entry session. When displaying the order book, the PMX Platform provides a Market-by-Order view; i.e each order is displayed individually with a corresponding timestamp (used to determine time priority within a price level). Each order also carries the unique OrderID reference, which Participants can use to identify their own orders in market data.

Subscribing to Market Data

Participants can subscribe to market data for a given symbol using a MarketDataRequest [V] message.

Table 20: MarketDataRequest (V) message

TagField NameReq’dData TypeComments
< Standard Header >Y35 = V
262MDReqIDYStringUnique ID for this request
263SubscriptionRequestTypeYcharType of subscription requested
0 = Snapshot
1 = Snapshot plus Updates
2 = Delete previous request (unsubscribe)
264MarketDepthYintDepth requested. (Maximum of 25 levels)
0 = Full book depth
1 = Top of book (best prices only)
2+ = Number of levels requested
267NoMDEntryTypesNNumInGroup
→269MDEntryTypeNcharA repeating group of MD Entry Types requested
0 = Bid
1 = Offer
2 = Trade
4 = Opening Price
5 = Closing Price
6 = Settlement Price
7 = Trading Session High Price
8 = Trading Session Low Price
B = Trade Volume
g = Trading Reference Price
146NoRelatedSymYNumInGroupNumber of symbols requested
→55SymbolYStringInstrument symbol.
< Standard Trailer >Y
If the MarketDataRequest [V] message is valid, PMX Platform will respond with a single MarketDataSnapshotFullRefresh [W] message for each requested Instrument, providing details of all orders in the order book (all levels as a repeating group within a single message). Note that the (repeating) MDEntryType (269) field can be specified if required to tailor the elements returned. Example 18: Request a snapshot of all market data elements using MarketDataRequest [V] message
8=FIXT.1.1 | 9=92 | 35=V | 49=SENDER | 56=TARGET | 34=4 | 52=20240517-19:05:47 | 262=MD-REQ-001 | 263=1 | 264=3 | 146=1 | 55=GOOG | 10=075 |
Note that since the PMX Platform returns market data split by order, requesting only the best price using MarketDepth (264) = 1 (Top of book) may still return multiple bid and offer entries if there is more than one order at this price.

Table 21: MarketDataSnapshotFullRefresh (W) message

TagField NameReq’dData TypeComments
< Standard Header >Y35 = W
22SecurityIDSourceYint8 = Exchange symbol
48SecurityIDYStringWill always equal Symbol (55)
55SymbolYStringInstrument symbol
167SecurityTypeNStringType of instrument
CS = Common Stock
FUT = Future
FXSPOT = FX Spot (incl. crypto)
FXSWAP = FX Swap
OOF = Options on Futures
OPT = Option
NONE = Other
262MDReqIDYStringThe ID of the request as indicated on the request.
292Corporate ActionCcharProvided if the instrument is currently subject to a Corporate Action.
A = Ex-Dividend
B = Ex-Distribution
C = Ex-Rights
D = New
E = Ex-Interest
F = Cash Dividend
G = Stock Dividend
H = Non-Integer Stock Split
I = Reverse Stock Split
J = Standard-Integer Stock Split
K = Position Consolidation
L = Liquidation Reorganization
M = Merger Reorganization
N = Rights Offering
O = Shareholder Meeting
P = Spinoff
Q = Tender Offer
R = Warrant
S = Special Action
T = Symbol Conversion
U = CUSIP or Name Change
V = Leap Rollover
W = Succession Event
268NoMDEntriesYNumInGroupThe number of market data levels returned. Might be zero if the symbol is valid but there are currently no bids/offers in this symbol.
→ 269MDEntryTypeYcharType of entry
0 = Bid
1 = Offer
2 = Trade
4 = Opening Price
5 = Closing Price
6 = Settlement Price
7 = Trading Session High Price
8 = Trading Session Low Price
B = Trading Session Volume
g = Trading Reference Price
→ 270MDEntryPxYPricePrice level
→ 271MDEntrySizeCQtyQuantity of the individual order or trade, or the aggregate quantity where MDEntryType (269) = B (Trading Session Volume).
Not sent for session open / high / low.
→ 272MDEntryDateYUTCDateOnlyTime priority (date) of the order.
→ 273MDEntryTimeYUTCTimeOnlyTime priority (time) of the order.
→ 336TradingSessionIDCStringSent for entries other than MDEntryType (269) = 0 (Bid) or 1 (Offer):
• CLOSED
• OPEN
• PREOPEN
• SUSPENDED
• EXPIRED
• TERMINATED
• HALTED
• MATCH_AND_CLOSE_AUCTION
→ 1151SecurityGroupCStringThe name of the group of related securities to which this instrument belongs.
→ 1070MDQuoteTypeCintIdentifies market data quote type. Only sent for MDEntryType (269) = 4 (Opening Price).
0 = Indicative
→ 59TimeInForceCcharSent for MDEntryType (269) = 0 (Bid) or 1 (Offer). The time in force for this order.
0 = Good for day
1 = Good till cancel
6 = Good till date
→ 37OrderIDCStringSent for MDEntryType (269) = 0 (Bid) or 1 (Offer). Matches the order ID in the ExecutionReport [8] acknowledgement, allowing Participants to identify their own orders within market data. Typically a 13-character alphanumeric string.
→ 278MDEntryIDCStringSent for MDEntryType (269) = 0 (Bid) or 1 (Offer). Unique reference for the entry. Typically 13-character alphanumeric string.
→ 40OrdTypeCcharSent for MDEntryType (269) = 0 (Bid) or 1 (Offer).
→ 126ExpireTimeNUTCTimestampSent for MDEntryType (269) = 0 (Bid) or 1 (Offer) where the order has ExpiryTime (126) set.
< Standard Trailer >Y
Example 19: Initial Market Data Snapshot (five repeating groups color-coded)
8=FIXT.1.1 | 9=458 | 35=W | 34=79 | 49=TARGET | 52=20240521-09:45:49.860198821 | 56=SENDER | 22=8 | 48=GOOG | 55=GOOG | 167=NONE | 262=1552371733 | 268=5 | 269=2 | 270=0.00 | 271=1499 | 272=20240521 | 273=09:06:39.324891684 | 336=OPEN | 269=4 | 270=3.00 | 272=20240515 | 273=21:24:03.898604733 | 336=OPEN | 1070=1 | 269=7 | 270=50.00 | 272=20240517 | 273=19:06:47.977567695 | 336=OPEN | 269=8 | 270=0.00 | 272=20240521 | 273=09:06:39.324891684 | 336=OPEN | 269=B | 270=93544.40 | 271=23645 | 272=20240521 | 273=09:06:39.324891684 | 336=OPEN | 1151=Equities | 10=199 |
Note the response will contain ONLY a snapshot of the current order book; it does not contain information about historic trades that have occurred on the platform.

Figure 14: Successful market data subscription with snapshot and incremental updates

If the participants subscribed to ongoing updates for the instrument(s), the platform will then start sending unsolicited MarketDataIncrementalRefresh [X] messages which contain a mixture of trade and/or order book update messages. These incremental market data messages may contain a repeating group of updates in a single message. For example, an incoming sell order which enters the order book, executes against a resting buy order with the remainder written to the order book will trigger a MarketDataIncrementalRefresh [X] message containing the following updates:
  • The deletion of the previous best bid (as a result of the immediate fill)
  • The addition of a new best bid (next-best bid price)
  • The deletion of the best offer (new order has a better price)
  • The addition of a new best offer (representing the balance of the incoming sell order)
  • A record relating to the trade, and
  • A record relating to updated overall market volume

Table 22: MarketDataIncrementalRefresh (X) message

TagField NameReq’dData TypeComments
< Standard Header >Y35 = X
262MDReqIDYStringThe ID of the request as indicated on the request
268NoMDEntriesYNumInGroup
→ 279MDUpdateActionYcharThe type of action conveyed by this block.
0 = New
1 = Change
2 = Delete
→ 269MDEntryTypeCcharType of entry. Set where MDUpdateAction (279) = (0) New or 1 (Change)
0 = Bid
1 = Offer
2 = Trade
4 = Opening Price
5 = Closing Price
6 = Settlement Price
7 = Trading Session High Price
8 = Trading Session Low Price
B = Trade Volume
g = Trading Reference Price
→ 278MDEntryIDNStringUnique reference for this entry. Typically a 13-character alphanumeric string.
→ 55SymbolYStringInstrument symbol
→ 22SecurityIDSourceYint8 = Exchange symbol
→ 48SecurityIDYStringWill always equal Symbol (55)
→ 167SecurityTypeNStringType of instrument
CS = Common Stock
FUT = Future
FXSPOT = FX Spot (incl. crypto)
FXSWAP = FX Swap
OOF = Options on Futures
OPT = Option
NONE = Other
→ 1151SecurityGroupNStringSecurity sub-type. For example “Equities”
→ 270MDEntryPxNPriceOrder level price where MDEntryType (269) = 0 (Bid) or 1 (Offer)
Traded price where MDEntryType (269) = 2 (Trade)
Total value traded where MDEntryType (269) = B (Trade Volume)
→ 271MDEntrySizeNQtyRemaining order size where MDEntryType (269) = 0 (Bid) or 1 (Offer). Will be zero where MDUpdateAction (279) = 2 (Delete)
Trade size where MDEntryType (269) = 2 (Trade)
Total quantity traded where MDEntryType (269) = B (Trade Volume)
→ 272MDEntryDateNUTCDateOnlyThe date on which the price level or trade occurred
→ 273MDEntryTimeNUTCTimeOnlyThe time at which the price level updated or trade occurred (in UTC)
→ 59TimeInForceNcharTime in force for this order.
0 = Good for day
1 = Good till cancel
6 = Good till date
→ 126ExpireTimeNUTCTimestampPopulated where TimeInForce (59) = 6 (Good Till Date)
→ 37OrderIDNStringOnly sent for price level updates. Will match OrderID (37) in the ExecutionReport [8], allowing Participants to identify their own orders within market data.
→ 40OrdTypeNchar2 = Limit order
K = Market-to-limit order
→ 828TrdTypeNintOnly sent for trades.
0 = Regular trade
→ 1003TradeIDNStringOnly sent for trade updates. Will match the ExecID (17) in the ExecutionReport fill, allowing Participants to identify their own trades within market data.
→ 2446AggressorSideNcharOnly sent for trades. Indicates which side was the aggressor in a trade.
1 = Buy
2 = Sell
→ 336TradingSessionIDCStringSent for trades:
• OPEN
• MATCH_AND_CLOSE_AUCTION
< Standard Trailer >Y
Example 20: Market Data incremental containing multiple updates (repeating groups color-coded)
8=FIXT.1.1 | 9=987 | 35=X | 34=87 | 49=TARGET | 52=20240521-09:52:30.013930670 | 56=SENDER | 262=1552371733 | 268=6 | 279=0 | 269=0 | 278=1HQ4A5T0EDM1T | 55=GOOG | 48=GOOG | 22=8 | 167=NONE | 1151=Equities | 270=0.03 | 271=1500 | 272=20240521 | 273=09:52:30.004561670 | 59=0 | 37=1HQ4A5T0EDM1T | 40=2 | 279=0 | 269=1 | 278=1HQ4A5T0EDM1W | 55=GOOG | 48=GOOG | 22=8 | 167=NONE | 1151=Equities | 270=0.03 | 271=15 | 272=20240521 | 273=09:52:30.004561670 | 59=0 | 37=1HQ4A5T0EDM1W | 40=2 | 279=2 | 269=1 | 278=1HQ4A5T0EDM1W | 55=GOOG | 48=GOOG | 22=8 | 167=NONE | 1151=Equities | 270=0.03 | 271=0 | 272=20240521 | 273=09:52:30.004561670 | 59=0 | 37=1HQ4A5T0EDM1W | 40=2 | 279=2 | 269=0 | 278=1HQ4A5T0EDM1V | 55=GOOG | 48=GOOG | 22=8 | 167=NONE | 1151=Equities | 270=0.03 | 271=0 | 272=20240521 | 273=09:52:30.004561670 | 59=0 | 37=1HQ4A5T0EDM1V | 40=2 | 279=0 | 269=2 | 278=1HPT7DQ1GC4DS | 55=GOOG | 48=GOOG | 22=8 | 167=NONE | 1151=Equities | 270=0.03 | 271=15 | 272=20240521 | 273=09:52:30.004561670 | 59=0 | 40=2 | 828=0 | 1003=1HPT7DQ1GC4DS | 2446=2 | 279=0 | 269=B | 55=GOOG | 48=GOOG | 22=8 | 167=NONE | 1151=Equities | 270=93544.85 | 271=23660 | 272=20240521 | 273=09:52:30.004561670 | 336=OPEN | 10=156 |

Unsubscribing from Market Data

Participants can unsubscribe from a piece of market data by entering a second MarketDataRequest [V] message, referencing the original MDReqID (262) reference and setting SubscriptionRequestType (263) = 2 (unsubscribe). Note that there is no explicit response to requests to unsubscribe from the PMX Platform; a successful unsubscription will simply prevent further MarketDataIncrementalRefresh [X] messages.

Figure 15: Successful market data subscription and unsubscription