Market Data
Subscribe to streaming quotes and market data via FIX 4.4.
Market Data Subscription
Market data is received on the Price Session (default port 5001). After establishing a session via Logon, subscribe to instruments using the MarketDataRequest message.
MarketDataRequest (MsgType = V)
Subscribe or unsubscribe to market data for one or more symbols.
| Tag | Field | Required | Description |
|---|---|---|---|
| 35 | MsgType | Yes | V |
| 262 | MDReqID | Yes | Unique request identifier |
| 263 | SubscriptionRequestType | Yes | 0 = Snapshot, 1 = Subscribe, 2 = Unsubscribe |
| 264 | MarketDepth | Yes | 0 = Full book, 1 = Top of book |
| 265 | MDUpdateType | Conditional | 0 = Full refresh, 1 = Incremental (required for Subscribe) |
| 267 | NoMDEntryTypes | Yes | Number of entry types requested |
| 269 | MDEntryType | Yes | Repeating: 0 = Bid, 1 = Offer, 2 = Trade |
| 146 | NoRelatedSym | Yes | Number of symbols |
| 55 | Symbol | Yes | Repeating: Instrument symbol (e.g. EURUSD) |
Subscribe to Top-of-Book Bid/Offer
8=FIX.4.4|9=152|35=V|49=CLIENT1|56=BROKERET|34=2|52=20260312-14:31:00.000|262=MD001|263=1|264=1|265=1|267=2|269=0|269=1|146=2|55=EURUSD|55=GBPUSD|10=098|
This subscribes to Bid and Offer for EURUSD and GBPUSD with incremental updates.
Unsubscribe
8=FIX.4.4|9=98|35=V|49=CLIENT1|56=BROKERET|34=10|52=20260312-14:45:00.000|262=MD001|263=2|267=2|269=0|269=1|146=2|55=EURUSD|55=GBPUSD|10=112|
Use the same MDReqID as the original subscription.
MarketDataSnapshotFullRefresh (MsgType = W)
Sent by the server as the initial snapshot upon subscription or when a full refresh is requested.
| Tag | Field | Description |
|---|---|---|
| 35 | MsgType | W |
| 262 | MDReqID | Request ID this snapshot responds to |
| 55 | Symbol | Instrument symbol |
| 268 | NoMDEntries | Number of entries in the snapshot |
| 269 | MDEntryType | 0 = Bid, 1 = Offer |
| 270 | MDEntryPx | Price |
| 271 | MDEntrySize | Volume / size |
| 272 | MDEntryDate | Date of the entry |
| 273 | MDEntryTime | Time of the entry |
Example — EURUSD Snapshot
8=FIX.4.4|9=198|35=W|49=BROKERET|56=CLIENT1|34=3|52=20260312-14:31:00.100|262=MD001|55=EURUSD|268=2|269=0|270=1.08452|271=1000000|272=20260312|273=14:31:00.100|269=1|270=1.08455|271=1000000|272=20260312|273=14:31:00.100|10=145|
MarketDataIncrementalRefresh (MsgType = X)
After the initial snapshot, the server sends incremental updates as prices change.
| Tag | Field | Description |
|---|---|---|
| 35 | MsgType | X |
| 262 | MDReqID | Original request ID |
| 268 | NoMDEntries | Number of updated entries |
| 279 | MDUpdateAction | 0 = New, 1 = Change, 2 = Delete |
| 269 | MDEntryType | 0 = Bid, 1 = Offer |
| 55 | Symbol | Instrument symbol |
| 270 | MDEntryPx | Updated price |
| 271 | MDEntrySize | Updated volume |
Example — Bid Price Update
8=FIX.4.4|9=156|35=X|49=BROKERET|56=CLIENT1|34=45|52=20260312-14:31:05.250|262=MD001|268=1|279=1|269=0|55=EURUSD|270=1.08460|271=1000000|10=201|
MarketDataRequestReject (MsgType = Y)
Sent when a subscription request cannot be processed.
| Tag | Field | Description |
|---|---|---|
| 35 | MsgType | Y |
| 262 | MDReqID | Request ID being rejected |
| 281 | MDReqRejReason | Rejection reason code |
| 58 | Text | Human-readable reason |
Rejection Reason Codes
| Code | Meaning |
|---|---|
| 0 | Unknown symbol |
| 1 | Duplicate MDReqID |
| 4 | Unsupported SubscriptionRequestType |
| 5 | Unsupported MarketDepth |
| 8 | Unsupported MDEntryType |
Example
8=FIX.4.4|9=105|35=Y|49=BROKERET|56=CLIENT1|34=4|52=20260312-14:31:00.200|262=MD001|281=0|58=Unknown symbol: INVALID|10=177|
Available Symbols
Brokeret provides market data for all symbols configured on your trading server. Common categories include:
| Category | Examples |
|---|---|
| Forex Majors | EURUSD, GBPUSD, USDJPY, USDCHF, AUDUSD, USDCAD, NZDUSD |
| Forex Crosses | EURGBP, EURJPY, GBPJPY, AUDNZD, EURCHF, GBPCAD |
| Metals | XAUUSD, XAGUSD, XPTUSD |
| Indices | US30, US500, NAS100, GER40, UK100 |
| Energies | USOIL, UKOIL, NGAS |
| Crypto | BTCUSD, ETHUSD (if enabled) |
Market Data Best Practices
- Subscribe only to needed symbols — Excessive subscriptions increase bandwidth and processing load
- Use incremental updates (Tag 265 = 1) instead of full refresh for real-time streaming
- Use Top of Book (Tag 264 = 1) unless you need full depth-of-market
- Monitor for stale prices — If no updates are received for an extended period, verify the session is still active
- Handle weekend gaps — Markets close on Friday and reopen Sunday; expect no updates during the weekend
Next Steps
- Order Execution — Submit and manage orders
- Session Management — Logon, heartbeats, and recovery