Maker Stream FIX 4.4 Full Refresh
Rules of Engagement
PrimeXM endeavours to ensure that the data and other material in this publication are correct and complete but does not accept liability for any error herein or omissions. The development of PrimeXM’s products and services is continuous and published information may not be up to date.
Change Log
FIX API 1.0.2
Version: 1.0.2
XCore: 6.01.73
Changes:
- Added ResendRequest max count limit is 30.
Notes:
- When the limit is exceeded, the maker is automatically disabled.
- To re-enable it, the maker must be manually disabled and enabled again
FIX API 1.0.1
Version: 1.0.1
Changes:
- Corrected documentation errors related to the Market Data Request (tag 35=V) message.
Introduction
- Scope of this document
This document is intended to serve software developers as an implementation guide for the PrimeXM Maker FIX API.
- FIX version
PrimeXM supports FIX version 4.4. For further information about this version please refer to the specifications published by the FIX Protocol Organization under http://www.fixprotocol.org/specifications/FIX.4.4
- FIX sessions
For better separation of pricing and trading data, Makers need to ensure two separate FIX connections (with two separate login credentials) to the PrimeXM FIX Server, one for pricing and one for trading data.
Messages
As defined in the FIX protocol, the PrimeXM FIX server is using two different data levels: Session and Application. The Session level handles the delivery of data and the Application level defines the business-related data content. The following session and application messages are supported by the PrimeXM FIX Engine:
Session Level Messages
- Heartbeat (PrimeXM ↔ Maker)
- Test Request (PrimeXM ↔ Maker)
- Logon (PrimeXM → Maker)
- Logout (PrimeXM ↔ Maker)
- Resend Request (PrimeXM ↔ Maker)
- Reject (PrimeXM ↔ Maker)
- Sequence Reset (PrimeXM ↔ Maker)
Application Level Messages:
- Market Data Request (PrimeXM → Maker)
- Market Data Request Reject (PrimeXM ← Maker)
- Market Data-Snapshot/Full Refresh (PrimeXM ← Maker)
- Full Refresh Acknowledgement (PrimeXM → Maker)
Session Messages
Test Request
| Tag | Field name | Req’d | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType=1 | |
| 112 | TestReqID | Y | A unique identifier for this test message |
| Standard Trailer | Y |
Logon
| Tag | Field name | Req’d | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType=A | |
| 108 | HeartBtInt | Y | Heart beat interval in seconds |
| 141 | ResetSeqNumFlag | N | Indicates both sides of a FIX session should reset sequence numbers |
| 553 | Username | Y | Username (provided by Maker) |
| 554 | Password | Y | Password (provided by Maker) |
| Standard Trailer | Y |
Logout
| Tag | Field name | Req’d | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType=5 | |
| 58 | Text | N | Reason for logout |
| Standard Trailer | Y |
Reject
| Tag | Field name | Req’d | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType=3 | |
| 45 | RefSeqNum | Y | MsgSeqNum of the rejected message |
| 371 | RefTagID | N | The tag number of the FIX field being referenced |
| 372 | RefMsgType | N | The MsgType of the FIX message being referenced |
| 373 | SessionRejectReason | N | Code to identify the reason for a session-level |
| Standard Trailer | Y |
Sequence Reset
| Tag | Field name | Req’d | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType=4 | |
| 123 | GapFillFlag | N | |
| 36 | NewSeqNo | Y | |
| Standard Trailer | Y |
Application Level Messages
Market Data Request
| Tag | Field name | Req’d | Comments | |
|---|---|---|---|---|
| Standard header | Y | MsgType = V | ||
| 262 | MDReqID | Y | Unique request ID. Reflect this value in tag 262 of the Market Data-Snapshot/Full Refresh. | |
| 263 | SubscriptionRequestType | Y | 1 = Subscribe (Snapshot plus updates) 2 = Unsubscribe |
|
| 264 | MarketDepth | Y | Specifies the number of layers requested. full book =0 number of layers<=5 Note: The depth is restricted to 5 , but if the provider wants to stream depth more than 5, then Massquote has to be implemented XCore sends the depth configured on the provider stream, capped at 5 (0 = full book). |
|
| 265 | MDUpdateType | Y | 0 = Full refresh | |
| 146 | NoRelatedSym | Y | Always set to 1 | |
| → | 55 | Symbol | Y | Name of the symbol |
| 267 | NoMDEntryTypes | Y | Always set to 2: one entry for Bid (269=0) and one for Offer (269=1) | |
| → | 269 | MDEntryType | Y | 0 = Bid 1 = Offer |
| Standard Trailer | Y |
Market Data Request Example
PrimeXM → Maker: 8=FIX.4.4 9=124 35=V 34=2 49=PXM_Qxx 52=20260923-10:09:17.026 56=Maker01 262=EUR/USD_0 263=1 264=3 265=0 146=1 55=EUR/USD 267=2 269=0 269=1 10=137
Market Data Request Reject
| Tag | Field name | Req’d | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType=Y | |
| 262 | MDReqID | Y | ID of the market data request |
| 58 | Text | N | Reason for market data request being rejected |
| Standard Trailer | Y |
Market Data Request Reject Example
PrimeXM ← Maker: 8=FIX.4.4 9=91 35=Y 49=Maker01 56=PXM_Qxx 34=3 52=20260923-10:09:21.324 262=GBP/USD_0 58=symbol not found 10=046
Full Refresh
| Tag | Field name | Req’d | Comments | |
|---|---|---|---|---|
| Standard Header | Y | MsgType=W | ||
| 55 | Symbol | Y | Subscribed symbol | |
| 262 | MDReqID | Y | ID of the market data request | |
| 117 | QuoteID | N | If set, XCore replies with a Full Refresh Acknowledgement (35=b) echoing this value. | |
| 268 | NoMDEntries | Y | Number of entries in the Market Data message | |
| → | 269 | MDEntryType | Y | Type of market data entry 0 = Bid 1 = Ask |
| → | 270 | MDEntryPx | Y | Price of the market data entry |
| → | 271 | MDEntrySize | Y | Quantity of the market data entry |
| → | 299 | QuoteEntryID | C | Mandatory if MarketDataRequest.MDUpdateType = Incremental Refresh. Unique Market Data Identifier (0 <= x < depth). Note: Tag 299 is only a key denoting the individual stream and is used to replace the most up-to-date information in that stream. It does not denote the position of the price update in the book. |
| Standard Trailer | Y |
In the standard Full Refresh configuration, a message carrying more than 10 bid and offer entries in total triggers a Business Message Reject (MsgType=j) with 58=maximum depth of 5 exceeded. XCore then unsubscribes (263=2) every symbol of the session.
Full Refresh Example
PrimeXM ← Maker: 8=FIX.4.4 9=148 35=W 49=Maker01 56=PXM_Qxx 34=2 52=20260923-10:11:16.410 55=EUR/USD 262=EUR/USD_0 268=2 269=0 270=1.10000 271=1000000 269=1 270=1.10040 271=1000000 10=254
Full Refresh Acknowledgement
| Tag | Field name | Req’d | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType=b | |
| 117 | QuoteID | Y | QuoteID copy from the Full Refresh message |
| Standard Trailer | Y |
Full Refresh Acknowledgement Example
PrimeXM ← Maker: 8=FIX.4.4 9=155 35=W 49=Maker01 56=PXM_Qxx 34=2 52=20260923-10:09:21.323 55=EUR/USD 262=EUR/USD_0 117=Q1 268=2 269=0 270=1.10000 271=1000000 269=1 270=1.10040 271=1000000 10=091
PrimeXM → Maker: 8=FIX.4.4 9=64 35=b 34=5 49=PXM_Qxx 52=20260923-10:09:21.326 56=Maker01 117=Q1 10=075
Full Pricing Session Example
PrimeXM → Maker: 8=FIX.4.4 9=124 35=V 34=2 49=PXM_Qxx 52=20260923-10:09:17.026 56=Maker01 262=EUR/USD_0 263=1 264=3 265=0 146=1 55=EUR/USD 267=2 269=0 269=1 10=137
PrimeXM → Maker: 8=FIX.4.4 9=124 35=V 34=4 49=PXM_Qxx 52=20260923-10:09:17.026 56=Maker01 262=GBP/USD_0 263=1 264=5 265=0 146=1 55=GBP/USD 267=2 269=0 269=1 10=103
PrimeXM ← Maker: 8=FIX.4.4 9=155 35=W 49=Maker01 56=PXM_Qxx 34=2 52=20260923-10:09:21.323 55=EUR/USD 262=EUR/USD_0 117=Q1 268=2 269=0 270=1.10000 271=1000000 269=1 270=1.10040 271=1000000 10=091
PrimeXM → Maker: 8=FIX.4.4 9=64 35=b 34=5 49=PXM_Qxx 52=20260923-10:09:21.326 56=Maker01 117=Q1 10=075
PrimeXM ← Maker: 8=FIX.4.4 9=91 35=Y 49=Maker01 56=PXM_Qxx 34=3 52=20260923-10:09:21.324 262=GBP/USD_0 58=symbol not found 10=046
Information needed from Maker
Please see below the information required to be provided by the Maker in order for PrimeXM to connect and perform UAT conformance testing:
Pricing session
| Field Name | Example | Comments |
|---|---|---|
| LoginUsername | Client123 | Client’s login username |
| LoginPassword | password#@! | Client’s login password |
| SenderCompID | PXM_Qxx | Unique client’s Pricing session identifier (value cannot be “PXM”) |
| TargetCompID | Maker-123 | Unique Maker identifier |
| SocketConnectHost | 203.0.113.10 | Maker’s FIX engine IP address or hostname used for establishing Pricing session connectivity |
| SocketConnectPort | 2500 | Maker’s FIX engine Port used for establishing Pricing session connectivity |
| ResetOnLogon | Y | Defines whether sequence numbers are to be reset prior to receiving a logon request. Typically set to ‘Y’ for pricing connections and ‘N’ for trading connections. |
| Sessions | FRI17:05:30-FRI17:05:00 (America/New_York) | Specifies the session times during which a connection to the maker can be established. |
| SocketUseSSL | N | Defines the use of SSL encryption for the connection. It is commonly configured as ‘N’ (No) for pricing connections and ‘Y’ (Yes) for trading connections. The default value is ‘N’ if not explicitly specified. |