Maker Stream FIX 4.4 Mass Quote
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 https://www.fixtrading.org/standards/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)
- Mass Quote (PrimeXM ← Maker)
- Mass Quote 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. This value will be reflected in tag 302 of the MassQuote. | |
| 263 | SubscriptionRequestType | Y | 1 = Subscribe (Snapshot plus updates) 2 = Unsubscribe |
|
| 264 | MarketDepth | Y | Specifies the number of layers requested. 0 = full book >0 = number of layers XCore sends the depth configured on the provider stream. |
|
| 265 | MDUpdateType | Y | 1 = Incremental 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=4 49=PXM_Qxx 52=20260923-10:09:47.025 56=Maker01 262=EUR/USD_0 263=1 264=3 265=1 146=1 55=EUR/USD 267=2 269=0 269=1 10=142
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=4 52=20260923-10:09:51.626 262=GBP/USD_0 58=symbol not found 10=055
Mass Quote
| Tag | Field name | Req’d | Comments | ||
|---|---|---|---|---|---|
| Standard Header | Y | MsgType=i | |||
| 117 | QuoteID | N | If QuoteID is set the client has to respond immediately with a MassQuoteAcknowledgement message reflecting this value in tag 117 |
||
| 296 | NoQuoteSets | Y | Number of Quote sets following | ||
| → | 302 | QuoteSetID | The MDReqID (tag 262 of the MarketDataRequest). Use this value to identify the symbol to which the data in this specific QuoteSet refers to. | ||
| → | 295 | NoQuoteEntries | Number of quote entries | ||
| → | → | 299 | QuoteEntryID | Y | Unique Market Data Identifier (0 <= x < depth). The current QuoteSet data replaces prior QuoteSet data received under the same QuoteEntryID 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. |
| → | → | 134 | BidSize | N | Maximum bid size. Not set = no changes. -1 = quote cancel |
| → | → | 135 | OfferSize | N | Maximum offer size. Not set= no changes. -1 = quote cancel |
| → | → | 188 | BidSpotRate | N | Spot bid rate. Not set = no changes |
| → | → | 190 | OfferSpotRate | N | Spot ask rate. Not set = no changes |
| Standard Trailer | Y |
Mass Quote Example
PrimeXM ← Maker: 8=FIX.4.4 9=196 35=i 49=Maker01 56=PXM_Qxx 34=2 52=20260923-10:09:51.124 117=Q2 296=1 302=EUR/USD_0 295=2 299=0 134=1000000 135=1000000 188=1.10000 190=1.10040 299=1 134=500000 135=500000 188=1.09990 190=1.10050 10=074
Mass Quote Acknowledgement
| Tag | Field name | Req’d | Comments |
|---|---|---|---|
| Standard Header | Y | MsgType=b | |
| 117 | QuoteID | Y | QuoteID copy from MassQuote message |
| Standard Trailer | Y |
Mass Quote Acknowledgement Example
PrimeXM ← Maker: 8=FIX.4.4 9=196 35=i 49=Maker01 56=PXM_Qxx 34=2 52=20260923-10:09:51.124 117=Q2 296=1 302=EUR/USD_0 295=2 299=0 134=1000000 135=1000000 188=1.10000 190=1.10040 299=1 134=500000 135=500000 188=1.09990 190=1.10050 10=074
PrimeXM → Maker: 8=FIX.4.4 9=64 35=b 34=5 49=PXM_Qxx 52=20260923-10:09:51.125 56=Maker01 117=Q2 10=076
Full Pricing Session Example
PrimeXM → Maker: 8=FIX.4.4 9=124 35=V 34=4 49=PXM_Qxx 52=20260923-10:09:47.025 56=Maker01 262=EUR/USD_0 263=1 264=3 265=1 146=1 55=EUR/USD 267=2 269=0 269=1 10=142
PrimeXM → Maker: 8=FIX.4.4 9=125 35=V 34=3 49=PXM_Qxx 52=20260923-10:09:47.025 56=Maker01 262=GBP/USD_0 263=1 264=10 265=1 146=1 55=GBP/USD 267=2 269=0 269=1 10=150
PrimeXM ← Maker: 8=FIX.4.4 9=196 35=i 49=Maker01 56=PXM_Qxx 34=2 52=20260923-10:09:51.124 117=Q2 296=1 302=EUR/USD_0 295=2 299=0 134=1000000 135=1000000 188=1.10000 190=1.10040 299=1 134=500000 135=500000 188=1.09990 190=1.10050 10=074
PrimeXM → Maker: 8=FIX.4.4 9=64 35=b 34=5 49=PXM_Qxx 52=20260923-10:09:51.125 56=Maker01 117=Q2 10=076
PrimeXM ← Maker: 8=FIX.4.4 9=113 35=i 49=Maker01 56=PXM_Qxx 34=3 52=20260923-10:09:51.625 296=1 302=EUR/USD_0 295=1 299=0 134=2000000 135=2000000 10=018
PrimeXM ← Maker: 8=FIX.4.4 9=91 35=Y 49=Maker01 56=PXM_Qxx 34=4 52=20260923-10:09:51.626 262=GBP/USD_0 58=symbol not found 10=055
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. |