1. Introduction
Xpansiv Marketplace Server API (rules of engagement) are based on FIX 4.4 specification and best practice guidelines as published by the FIX Trading Community. Unless specifically stated, field numbers, names, and data types are as published by the FIX specification. A full explanation of the FIX protocol is beyond the scope of this document, and therefore customers should refer to the FIX Trading Community for the full specification and guidelines.
This document describes the supported administrative and application messages. Xpansiv Marketplace Server can support 3 distinct specialised session types configured on FIX Server side: Transaction, DropCopy and MarketData, or any combination. Each such session type supports the administrative and a subset of application messages described in this document. Incoming messages that are not listed in this document or are not supported by a specific session type will be rejected with a BusinessMessageReject (35=j). Malformed incoming messages will be rejected with a session level Reject (35=3). If a message listed in this specification is received with a tag that is not in the specification, the value of the field will be ignored. Xpansiv may include additional tags not listed in the standard specification in the messages sent to the counter parties as described in this document.
All messages described in this document, as defined in the FIX protocol, include standard header followed by the message body fields and terminated with a standard trailer.
Data types in the tables presented below follow the FIX protocol guidelines, however in some cases the length of String values is limited. As such, Xpansiv Marketplace Server will truncate long values in the incoming messages if their length exceeds the maximum size specified in parentheses below.
1.1. Standard Header
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
8 | BeginString | String(10) | Y | Identifies the beginning of new message and protocol version. Always first field in a message. Valid value: FIX.4.4 |
9 | BodyLength | Length | Y | Message length (in bytes) forward to the CheckSum field. Always second field in a message. |
35 | MsgType | String | Y | Defines the message type. Always third field in a message. |
49 | SenderCompID | String(60) | Y | Identifies the sender of the message. |
56 | TargetCompID | String(60) | Y | Identifies the receiver of the message. |
34 | MsgSeqNum | SeqNum | Y | Message sequence number. |
43 | PosDupFlag | Boolean | C | Required for retransmitted messages as a result of ResendRequest. |
97 | PossResend | Boolean | C | Required when message may be duplicate of another message sent under different sequence number. |
52 | SendingTime | TimeStamp | Y | Time of transmission in UTC. |
122 | OrigSendingTime | TimeStamp | C | Required for messages sent as a result of ResendRequest. Time of original transmission in UTC. |
1.2. Standard Trailer
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
10 | CheckSum | String | Y | Always the last field in a message, always defined as three characters. |
2. Administrative messages
2.1. Logon request and acknowledgment
Bidirectional message, supported by all session types. A client initiates Logon request and FIX Server replies with Logon acknowledgment if a client is authorized. Only after receiving Logon acknowledgment a client may send appropriate administrative and application messages. Alternatively, depending on circumstances, if a client is not authorized, trading session is not ready, Logon request is malformed or message flow issues have been detected, FIX Server may send a Logout (35=5), Reject (35=3) or BusinessMessageReject (35=j) message with the description of a problem or simply terminate the connection.
Following FIX protocol guidelines, FIX Server accepts secondary Logon messages issued by clients with ResetSeqNumFlag set (141=Y) and MsgSeqNum set to 1 (34=1) during active FIX session. FIX Server will respond with similar Logon acknowledgement (141=Y and 34=1), thus both sides will continue with following messages carrying 35=2 and increasing. Secondary Logon messages issued by clients during active FIX session without required 141=Y and 34=1 will cause FIX Server to terminate the connection.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=A | ||
108 | HeartBtInt | Int | Y | Heartbeat interval in seconds set by the initiator and reflected by FIX Server. |
98 | EncryptMethod | Int | Y | Valid value: 0 (Not encrypted) |
141 | ResetSeqNumFlag | Boolean | N | Valid values: N - no (default value is the tag is not specified); Y - yes, indicates both sides of a FIX session should reset sequence numbers to 1. |
553 | Username | String(200) | C | Username of a client. |
554 | Password | String(40) | C | Password associated with a client’s Username. |
95 | RawDataLength | Int | N | |
96 | RawData | Data | N | |
58 | Text | String | N | Free format text string. |
Standard Trailer | Y |
2.2. Heartbeat
Bidirectional message, supported by all session types. The heartbeat interval is declared in the initial Logon (35=A) message sent by a client and is used by both parties.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=0 | ||
--- | --- | --- | --- | --- |
112 | TestReqID | String | C | Required when the heartbeat is the result of a TestRequest (35=1). Reflects the identifier value set in the TestRequest. |
--- | --- | --- | --- | --- |
Standard Trailer | Y | |||
--- | --- | --- | --- | --- |
Tag | Name | Data type | Required | Comment |
Standard Header | Y | 35=0 | ||
112 | TestReqID | String | C | Required when the heartbeat is the result of a TestRequest (35=1). Reflects the identifier value set in the TestRequest. |
Standard Trailer | Y |
2.3. TestRequest
Bidirectional message, supported by all session types. The TestRequest message forces a heartbeat from the opposing application. The opposite side responds to the TestRequest with a Heartbeat (35=0) message containing the initial TestReqID (112).
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=1 | ||
112 | TestReqID | String | Y | Identifier of the TestRequest. To be returned in the Heartbeat (35=0) generated by counter party upon receipt of this TestRequest. |
Standard Trailer | Y |
2.4. ResendRequest
Bidirectional message, supported by all session types. The ResendRequest is sent by the receiving application to initiate the retransmission of messages if a sequence number gap is detected. The ResendRequest can be used to request a single message, a range of messages or all messages subsequent to a particular message.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=2 | ||
7 | BeginSeqNo | SeqNum | Y | MsgSeqNum (34) of first message in a range to be resent. |
16 | EndSeqNo | SeqNum | Y | MsgSeqNum (34) of last message in a range to be resent. Set EndSeqNo=0 if all messages subsequent to BeginSeqNo are required. |
Standard Trailer | Y |
2.5. Reject
Bidirectional message, supported by all session types. The Reject message should be issued when a message is received but cannot be properly processed due to a session-level rule violation. Standard defined values of SessionRejectReason (373) field describe such violations. Rejected messages should be logged and the incoming sequence number incremented.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=3 | ||
45 | RefSeqNum | SeqNum | Y | MsgSeqNum (34) of rejected message. |
371 | RefTagID | Int | N | The tag number of the FIX field being referenced. |
372 | RefMsgType | String | N | The MsgType (35) of the message being referenced. |
373 | SessionRejectReason | Int | N | Code to identify the reason for the session level Reject message. |
58 | Text | String | N | Free format text string to explain the reason for rejection. |
Standard Trailer | Y |
2.6. SequenceReset
Bidirectional message, supported by all session types. The SequenceReset message has two modes depending on the value of GapFillFlag (123) field: Gap Fill mode (123=Y) and Reset mode (123=N or the tag is absent).
Gap Fill mode is used in response to a ResendRequest (35=2) when sending application chooses not to send a message or a continuous group of messages (such as administrative messages, aged orders, etc).
Reset mode involves specifying an arbitrarily higher new sequence number to be expected by the receiver of the SequenceReset message, and is used to reestablish a FIX session after an unrecoverable application failure to recover from an out-of-sequence condition and should not generate resend requests.
The SequenceReset message can only increase the sequence number. If a SequenceReset is received attempting to decrease the next expected sequence number the message should be rejected and treated as a serious error.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=4 | ||
123 | GapFillFlag | Boolean | N | Indicates that the SequenceReset message is replacing administrative or application messages, which which will not be resent. Valid values: N - sequence reset, ignore MsgSeqNum (34); Y - gap fill message, MsgSeqNum (34) field is valid. |
36 | NewSeqNum | SeqNum | Y | New sequence number. |
Standard Trailer | Y |
2.7. Logout
Bidirectional message, supported by all session types. The Logout message initiates or confirms the termination of a FIX session.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=5 | ||
58 | Text | String | N | Free format text string. |
Standard Trailer | Y |
2.8. BusinessMessageReject
Bidirectional message, supported by all session types. The BusinessMessageReject should be issued when a message is received but cannot be processed due to a business-level rule violation. Standard defined values of BusinessRejectReason (380) field describe such violations. Rejected messages should be logged and the incoming sequence number incremented.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=j | ||
45 | RefSeqNum | SeqNum | N | MsgSeqNum (34) of rejected message. |
372 | RefMsgType | String | Y | The MsgType (35) of the message being referenced. |
380 | BusinessRejectReason | Int | Y | Code to identify the reason for the BusinessRejectReject message. |
379 | BusinessRejectRefID | String | N | The value of the business level “ID” field on the message being referenced. |
58 | Text | String | N | Free format text string to explain the reason for rejection. |
Standard Trailer | Y |
3. Application messages
3.1. NewOrderSingle
The message is initiated by a client wishing to submit an order and applicable only to a session configured as a Transaction session type.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=D | ||
11 | ClOrdID | String(60) | Y | Unique identifier for the order as assigned by a client. The allowed max length is 60 chars. |
1 | Account | String(40) | N | Account mnemonics as agreed between trading parties. |
55 | Symbol | String | Y | Ticker symbol. |
54 | Side | Char | Y | Side of the order. Valid values: 1 - Buy; 2 - Sell. |
60 | TransactTime | TimeStamp | Y | Time the order was initiated by a client in UTC. |
38 | OrderQty | Qty | Y | Total order quantity. |
40 | OrderType | Char | Y | Order type. Valid values: 1 - Market; 2 - Limit. |
44 | Price | Price | C | Price per unit quantity. Required for Limit orders (40=2). The value is ignored if present for Market orders. |
423 | PriceType | Int | N | Code to represent the price type. Valid value: 2 - Per unit (i.e. per share or contract) |
59 | TimeInForce | Char | N | Specifies how long the order remains in effect. Absence of the field is interpreted as Day (0). Valid values: 0 - Day; 1 - Good Till Cancel (GTC); 3 - Immediate or Cancel (IOC); 4 - Fill or Kill (FOK); 6 - Good Till Date (GTD).Note: Xpansiv Marketplace Trading Engine considers all Market orders as a FOK (59=4) and ignores TimeInForce value in NewOrderSingle and OrderCancelReplace messages with 40=1. |
126 | ExpireTime | TimeStamp | C | Date/time of order expiration (UTC). Required if TimeInForce is GTD (59=6) and ExpireDate (432) is not present in the message. |
432 | ExpireDate | LocalMktDate | C | The date of order expiration (local market date). Required if TimeInForce is GTD (59=6) and ExpireTime (126) is not present in the message. |
110 | MinQty | Qty | N | Minimum quantity of the order to be executed. |
111 | MaxFloor | Qty | N | Maximum quantity within the order to be shown on the exchange at any given time. |
453 | NoPartyIDs | NumInGroup | N | Number of repeating group entries. |
448 | PartyID | String(20) | C | Identifies the party. Required when NoPatryIDs (453) > 0 and PartyIDSource (447) is specified and must be the first field in this group. |
447 | PartyIDSource | Char | N | Identifies the class or source of the PartyID (448) value. Valid value: D - Proprietary. |
452 | PartyRole | Int | N | The role of the party in the transaction. |
Standard Trailer | Y |
3.2. OrderCancelRequest
The message is initiated by a client wishing to cancel all of the remaining quantity of previously submitted order and applicable only to a session configured as a Transaction session type.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=F | ||
41 | OrigClOrdID | String(60) | Y | ClOrdID (11) of the previous non-rejected order (NOT the initial order of the day). |
37 | OrderID | String | N | Unique identifier for the order as assigned by Xpansiv Marketplace. |
11 | ClOrdID | String(60) | Y | Unique ID of this OrderCancelRequest as assigned by a client. |
54 | Side | Char | Y | This tag is required to comply with the FIX protocol. The value is ignored. |
38 | OrderQty | Qty | Y | This tag is required to comply with the FIX protocol. The value is ignored. |
55 | Symbol | String | Y | This tag is required to comply with the FIX protocol. The value is ignored. |
60 | TransactTime | TimeStamp | Y | Time this OrderCancelRequest was initiated by a client. |
Standard Trailer | Y |
3.3. OrderCancelReplaceRequest
The message is initiated by a client wishing to change the parameters of previously submitted order and applicable only to a session configured as a Transaction session type.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=G | ||
41 | OrigClOrdID | String(60) | Y | ClOrdID (11) of the previous non-rejected order (NOT the initial order of the day). |
37 | OrderID | String | N | Unique identifier for the order as assigned by Xpansiv Marketplace. |
11 | ClOrdID | String(60) | Y | Unique ID of this OrderCancelReplaceRequest as assigned by a client. |
1 | Account | String(40) | N | Account mnemonics as agreed between trading parties. |
55 | Symbol | String | Y | Ticker symbol. |
54 | Side | Char | Y | Side of the order. Valid values: 1 - Buy; 2 - Sell. |
38 | OrderQty | Qty | N | Total intended order quantity, including the amount already executed for this chain of orders. |
40 | OrdType | Char | Y | Order type. Valid values: 1 - Market; 2 - Limit. |
60 | TransactTime | TimeStamp | Y | Time this OrderCancelReplaceRequest was initiated by a client. |
44 | Price | Price | N | Price per unit quantity. Required for Limit orders (40=2). |
59 | TimeInForce | Char | N | Specifies how long the order remains in effect. Absence of the field is interpreted as Day (0).Note: Xpansiv Marketplace Trading Engine considers all Market orders as a FOK (59=4) and ignores TimeInForce value in NewOrderSingle and OrderCancelReplace messages with 40=1. |
126 | ExpireTime | TimeStamp | C | Date/time of order expiration (UTC). Required if TimeInForce is GTD (59=6) and ExpireDate (432) is not present in the message. |
432 | ExpireDate | LocalMktDate | C | The date of order expiration (local market date). Required if TimeInForce is GTD (59=6) and ExpireTime (126) is not present in the message. |
110 | MinQty | Qty | N | Minimum quantity of the order to be executed. |
111 | MaxFloor | Qty | N | Maximum quantity within the order to be shown on the exchange at any given time |
453 | NoPartyIDs | NumInGroup | N | Number of repeating group entries. |
448 | PartyID | String(20) | C | Identifies the party. Required when NoPatryIDs (453) > 0 and PartyIDSource (447) is specified and must be the first field in this group. |
447 | PartyIDSource | Char | N | Identifies the class or source of the PartyID (448) value. Valid value: D - Proprietary. |
452 | PartyRole | Int | N | The role of the party in the transaction. |
Standard Trailer | Y |
3.4. OrderCancelReject
The message is issued by the exchange upon receipt of a OrderCancelRequest (35=F) or OrderCancelReplaceRequest (35=G) message which cannot be honoured and applicable only to a session configured as a Transaction session type.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=9 | ||
37 | OrderID | String | Y | Unique identifier as assigned by Xpansiv Marketplace if available, otherwise “NONE” |
11 | ClOrdID | String(60) | Y | The value of ClOrdID (11) referred in the corresponding OrderCancelRequest (35=F) or OrderCancelReplaceRequest (35=G). |
41 | OrigClOrdID | String(60) | Y | The value of OrigClOrdID (41) referred in the corresponding OrderCancelRequest (35=F) or OrderCancelReplaceRequest (35=G) |
39 | OrdStatus | Char | Y | The current state of the order when applicable. For unknown orders the value is: 8 - Rejected. |
434 | CxlRejResponceTo | Char | Y | Identifies the type of request that OrderCancelReject is in response to. Valid values: 1 - OrderCancelRequest (35=F); 2 - OrderCancelReplaceRequest (35=G). |
102 | CxlRejReason | Int | N | Code to identify reason for cancel rejection. |
58 | Text | String | N | Free format text string to explain the reason for rejection. |
Standard Trailer | Y |
3.5. OrderStatusRequest
The message is issued by institution to generate an ExecutionReport (35=8) message with current order status back from the exchange. This request applicable only to a session configured as a Transaction session type.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=H | ||
37 | OrderID | String | C | Unique identifier as assigned by Xpansiv Marketplace. Note: at least one of the tags OrderID (37) or ClOrdID (11) must be provided in the request. |
11 | ClOrdID | String(60) | C | Unique identifier for the order as assigned by a client. Required for electronically submitted orders. Note: at least one of the tags OrderID (37) or ClOrdID (11) must be provided in the request. |
790 | OrderStatusReqID | String | N | Optional, can be used to identify a specific OrderStatusRequest message. Echoed back on ExecutionReport (35=8) if provided. |
55 | Symbol | String | Y | Ticker symbol. |
54 | Side | Char | Y | Side of the order. Valid values: 1 - Buy; 2 - Sell. |
Standard Trailer | Y |
3.6. OrderMassStatusRequest
The message requests the status of orders matching criteria specified withing request.
ExecutionReport (35=8) messages with ExecType (150=”current order status on the moment of receiving this request”). This request applicable only to a session configured as a Transacti session type .
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=AF | ||
584 | MassStatusReqID | String | Y | Unique ID as assigned by institution to identify a specific OrderMassStatusReques message. Echoed back on series of ExecutionReport (35=8) messages in response. |
585 | MassStatusReqType | Y | Specifies the scope of the OrderMassStatusReques message. Supported values are: 1 - status for all active orders for a security. Symbol (55) field must be present in the message in such case. Side (54) field is accounted if it is present in the request; 7 - status for all active orders. Symbol (55) and Side (54) fields are accounted as filters if they are present in the request. |
|
55 | Symbol | String | C | Ticker symbol. Required when 585=1 (see above). |
54 | Side | Char | N | Side of the order. Valid values: 1 - Buy; 2 - Sell. |
Standard Trailer | Y |
3.7. ExecutionReport
The message is issued by the exchange to convey the current state of submitted order and applicable only to a session configured as a Transaction or DropCopy session type.
Each execution report contains two fields which are used to communicate the current state of the order: OrdStatus (39) and the purpose of the message: ExecType (150).
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=8 | ||
37 | OrderID | String | Y | Unique identifier as assigned by Xpansiv Marketplace. For rejected orders returns value of ClOrdID (11) |
11 | ClOrdID | String(60) | C | Unique identifier for the order as assigned by a client. Required for electronically submitted orders. |
41 | OrigClOrdID | String(60) | C | ClOrdID (11) of the previous order. Provided in response to a OrderCancelRequest (35=F) or OrderCancelReplaceRequest (35=G) messages. |
790 | OrdStatusReqID | String | C | Required in response on OrderStatusRequest (35=H) if provided in the request. |
584 | MassStatusReqID | String | C | Required in response on OrderMassStatusRequest (35=AF) message. |
911 | TotNumReports | Int | C | Will be used in response on OrderMassStatusRequest (35=AF) message to identify the total number of ExecutionReport messages which will be returned. |
912 | LastRptRequested | Boolean | C | Will be used in response on OrderMassStatusRequest (35=AF) message to indicate (912=Y) that this is the last ExecutionReport message which will be returned. |
17 | ExecID | String | Y | Unique identifier of execution message as assigned by Xpansiv Marketplace. If ExecutionReport was issued as a reply on OrderStatusRequest (35=H) or OrderMassStatusRequest (35=AF), then the value of this tag is “0”. |
150 | ExecType | Char | Y | Is used to identify the purpose of the ExecutionReport. If ExecutionReport was issued as a reply on OrderStatusRequest (35=H) or OrderMassStatusRequest (35=AF), then the value of this tag is “I”. |
39 | OrdStatus | Char | Y | Is used to convey the current state of the order. |
103 | OrdRejReason | Int | N | Code to identify the reason for order rejection. |
54 | Side | Char | Y | Side of the order. Valid values: 1 - Buy; 2 - Sell. |
31 | LastPx | Price | C | The price of this trade. Required if ExecType = Trade (150=F). |
32 | LastQty | Qty | C | The quantity bought/sold on this trade. Required if ExecType = Trade (150=F). |
151 | LeavesQty | Qty | Y | The quantity open for further execution. |
14 | CumQty | Qty | Y | Currently executed quantity for the order. |
6 | AvgPx | Price | Y | Calculated average price of all fills on this order. |
453 | NoPartyIDs | NumInGroup | N | Number of repeating group entries. |
448 | PartyID | String(20) | C | Identifies the party. Required when NoPatryIDs (453) > 0 and PartyIDSource (447) is specified and must be the first field in this group. |
447 | PartyIDSource | Char | N | Identifies the class or source of the PartyID (448) value. Valid value: D - Proprietary. |
452 | PartyRole | Int | N | The role of the party in the transaction. |
198 | SecondaryOrderID | String(20) | N | Can be used to provide additional order info by executing system (MarketGrid Order.Reference). |
527 | SecondaryExecID | String(20) | N | Can be used to provide additional trade info by executing system (MarketGrid Trade.Reference). |
382 | NoContraBrokers | NumInGroup | N | Number of repeating group entries. |
375 | ContraBroker | String(20) | N | Can be used to provide additional trade info by executing system (MarketGrid Trade.CounterPartyMpId). Required if NoContraBroker (382) > 0 |
1 | Account | String(40) | N | Account supplied on the order. |
660 | AcctIDSource | Int | N | Valid value: 99 - Other. |
63 | SettlType | Char | N | Indicated order settlement period. |
55 | Symbol | String | Y | Ticker symbol. |
854 | QtyType | Int | N | Type of quantity specified in a quantity field. Valid value: 0 - Units (shares, par, currency). |
231 | ContractMultiplier | Float | C | Specifies the ratio or multiply factor to convert from “nominal” units to total units. Required if QtyType 854=1. |
38 | OrderQty | Qty | N | Total order quantity. |
423 | PriceType | Int | N | Code to represent the price type. Valid value: 2 - Per unit (i.e. per share or contract) |
44 | Price | Price | C | Price per unit of quantity. Required if present on the order. |
1057 | AggressorIndicator | Boolean | N | This value represents if the record is the aggressor. Valid values: Y - yes; N - no. |
40 | OrderType | Char | N | Mirrors the value provided in the NewOrderSingle. |
59 | TimeInForce | Char | N | Mirrors the value provided in the NewOrderSingle for Limit orders.The tag is not present in the ExecutionReport for Market orders, because Xpansiv Marketplace Trading Engine considers all Market orders as a FOK and ignores TimeInForce value. |
126 | ExpireTime | TimeStamp | C | Date/time of order expiration (UTC). Required if TimeInForce is GTD (59=6) and ExpireDate (432) is not present in the message. |
432 | ExpireDate | LocalMktDate | N | The date of order expiration (local market date). Required if TimeInForce is GTD (59=6) and ExpireTime (126) is not present in the message. |
75 | TradeDate | LocalMktDate | N | Indicates date of trade referenced in this message in YYYYMMDD format. Absence of the field indicates current day. |
60 | TransactTime | TimeStamp | N | Time this ExecutionReport was initiated by Xpansiv Marketplace. |
381 | GrossTradeAmt | Amt | N | Total amount traded (e.g. CumQty (14) * AvgPx (6)) expressed in units of currency. |
119 | SettlCurrAmt | Amt | N | Total amount due expressed in settlement currency. |
120 | SettlCurrency | Currency | N | Currency code of settlement denomination. |
155 | SettlCurrFxRate | Float | N | Foreign exchange rate used to compute SettlCurrAmt (119) from Currency (15) to SettlCurrency (120) |
156 | SettlCurrFxRateCals | Char | N | Specifies whether or not SettlCurrFxRate (155) should be multiplied or divided. Valid values: M - Multiply; D - Divide. |
110 | MinQty | Qty | N | Minimum quantity of the order to be executed. |
111 | MaxFloor | Qty | N | Maximum quantity within the order to be shown on the exchange at any given time. |
136 | NoMiscFees | NumInGroup | N | Number of repeating group entries of miscellaneous fees. |
137 | MiscFeeAmt | Amt | C | Miscellaneous fee value. Required if NoMiscFees > 0 and must be the first field in this group. |
138 | MiscFeeCurr | Currency | N | Currency code of miscellaneous fees. |
139 | MiscFeeType | Int | N | Indicates type of miscellaneous fees. |
Standard Trailer | Y |
3.8. SecurityListRequest
The message is used by a client to request a list of available securities from the exchange and applicable to all session types.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=x | ||
320 | SecurityReqID | String | Y | Unique identifier of the request. |
559 | SecurityListRequestType | Int | Y | Identifies the type/criteria of the request. This tag is required to comply with the FIX protocol. The value is ignored and considered as: 4 - All Securities. |
Standard Trailer | Y |
3.9. SecurityList
The message is used by the exchange to return a list of available securities requested by a client in a SecurityListRequest (35=x) and applicable to all session types.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=y | ||
320 | SecurityReqID | String | Y | The identifier provided by a client in the original SecurityListRequest (35=x). |
322 | SecurityResponseID | String | Y | Identifier of the SecurityList message. |
560 | SecurityListResult | Int | Y | The result returned to a SecurityListRequest (35=x). |
393 | TotNoRelatedSym | Int | N | Total number of securities. |
893 | LastFragment | Boolean | N | Indicates whether this message is the last in a sequence of fragments. Valid values: Y - Last message; N - Not last message. |
146 | NoRelatedSym | Int | N | Specifies the number of repeating group symbols (instruments) in this fragment. |
55 | Symbol | String | C | Ticker symbol. Required if NoRelatedSym (146) > 0 and must be the first field in this group. |
48 | SecurityID | String | N | Security identifier value. |
22 | SecurityIDSource | String | C | Required when SecurityID (48) is specified. Valid value: 8 - Exchange Symbol |
460 | Product | Int | N | Indicates the type of product the security is associated with. |
167 | SecurityType | String | N | Indicates the type of security. |
Standard Trailer | Y |
3.10. SecurityTypeRequest
The message is used by a client to request a list of available security types from the exchange and applicable to all session types.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=v | ||
320 | SecurityReqID | String | Y | Unique identifier of the request. |
Standard Trailer | Y |
3.11. SecurityTypes
The message is used by the exchange to return a list of available security types requested by a client in a SecurityTypeRequest (35=v) and applicable to all session types.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=w | ||
320 | SecurityReqID | String | Y | The identifier provided by a client in the original SecurityTypeRequest (35=v). |
322 | SecurityResponseID | String | Y | Identifier of the SecurityTypes message. |
323 | SecurityResponseType | Int | Y | The result of the security request identified by SecurityReqID (320). |
557 | TotNoSecurityTypes | int | N | Total number of security types. |
893 | LastFragment | Boolean | N | Indicates whether this message is the last in a sequence of fragments. Valid values: Y - Last message; N - Not last message. |
558 | NoSecurityTypes | Int | N | Number of Security Type repeating group instances. |
167 | SecurityType | String | C | Indicates type of security. Required if NoSecurityTypes (558) > 0 and must be the first field in this group. |
762 | SecuritySubType | String | N | Sub-type qualification/identification of the SecurityType (167). |
460 | Product | Int | N | Indicates the type of product the security is associated with. |
Standard Trailer | Y |
3.12. MarketDataRequest
The message is used by a client to request a current state of market data snapshot or/and subscribe to real-time market data updates from the exchange and applicable only to a session configured as a MarketData session type.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=V | ||
262 | MDReqID | String | Y | Must be unique, or the ID of previous MarketDataRequest if SubscriptionRequestType (263) equals '2' (Disable previous Snapshot plus Updates request). |
263 | SubscriptionRequestType | Char | Y | Valid values: 0 - Snapshot; 1 - Snapshot plus Updates; 2 - Disable previous Snapshot plus Updates request (unsubscribe). |
264 | MarketDepth | Int | Y | Valid values: 0 - Full Book; 1 - Top of the Book; N - Report best N price tiers of the Book. Note: Xpansiv Marketplace Server has a configuration option to limit max value of market depth sent to clients. In this case, requested Full Book (264=0) will be capped by this limit, otherwise the MarketDataRequest will be rejected with MarketDataRequestReject (35=Y) message if requested MarketDepth value exceeds the limit set up by the exchange. |
265 | MDUpdateType | Int | C | Required when SubscriptionRequestType (263) equals '1' (Snapshot plus Updates). Valid values: 0 - Full Refresh; 1 - Incremental Refresh. |
266 | AggregatedBook | Boolean | N | Valid value: Y - one book entry per side per price. Note: multiple entries per side per price (266=N) are not supported, the message will be rejected. |
547 | MDImplicitDelete | Boolean | N | Defines what side is responsible for deleting bids or offers (order book levels) falling outside of requested/capped MarketDepth (264). Can be used when MarketDepth (264) > 1 and MDUpdateType (265) = 1 (Incremental Refresh), in other cases the value of this tag is ignored. Defaults to 547=Y. Valid values: Y - Client has responsibility for implicitly deleting such levels; N - Server must send an explicit delete for such levels. |
267 | NoMDEntryTypes | Int | Y | Number of MDEntryType (269) fields in the repeating group. |
269 | MDEntryType | Char | Y | Type of market data entry. Valid values: 0 - Bid; 1 - Offer; 2 - Trade; 4 - Opening Price; 5 - Closing Price: 7 - Trading Session High Price; 8 - Trading Session Low Price: B - Trade Volume. Note: other possible values are not supported and will be ignored by the server. |
146 | NoRelatedSym | Int | Y | Number of symbols (instruments) requested. |
55 | Symbol | String | Y | Ticker symbol. |
Standard Trailer | Y |
3.13. MarketDataRequestReject
The message may be sent by the exchange in response to MarketDataRequest (35=V) indicating it cannot be honoured and applicable only to a session configured as a MarketData session type.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=Y | ||
262 | MDReqID | String | Y | Refers to the value of MDReqID (262) in the original MarketDataRequest (35=V). |
281 | MDReqRejReason | Char | N | Reason for the rejection of a MarketDataRequest (35=V). |
58 | Text | String | N | Free format text string to explain the reason for rejection. |
Standard Trailer | Y |
3.14. MarketDataSnapshotFullRefresh
The message is issued by the exchange in response to MarketDataRequest (35=V) and applicable only to a session configured as a MarketData session type.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=W | ||
262 | MDReqID | String | Y | Refers to the value of MDReqID (262) in the original MarketDataRequest (35=V). |
55 | Symbol | String | Y | Ticker symbol. |
268 | NoMDEntries | Int | Y | Number of market data entries in the repeating group. |
269 | MDEntryType | Char | Y | Type of market data entry. Must be the first field in this group. Valid values: 0 - Bid; 1 - Offer; 2 - Trade; 4 - Opening Price; 5 - Closing Price: 7 - Trading Session High Price; 8 - Trading Session Low Price: B - Trade Volume. |
270 | MDEntryPx | Price | C | Price (44) of the market data entry. Required when MDEntryType (269) is not Trade Volume ('B'). |
271 | MDEntrySize | Qty | C | Quantity (53) or volume represented by the market data entry. Required when MDEntryType (269) is a Bid ('0'), Offer ('1'), Trade ('2') or Trade Volume ('B'). |
272 | MDEntryDate | UTCDateOnly | N | Date of market data entry. Actual if MDEntryType (269) is an Opening Price ('4') or Closing Price ('5'). |
273 | MDEntryTime | UTCTimeOnly | N | Time of market data entry. Actual if MDEntryType (269) is a Trade ('2'). |
290 | MDEntryPositionNo | Int | N | Display position of a bid or offer, numbered from most competitive to least competitive, per market side, beginning with 1. Actual if MDEntryType (269) is a Bid ('0') or Offer ('1'). |
346 | NumberOfOrders | Int | N | In an Aggregated Book shows how many individual orders make up a market data entry. Actual if MDEntryType (269) is a Bid ('0') or Offer ('1'). |
58 | Text | String | N | Can appear in the group entry to identify the source of the data (applicable only to order book entries: Bid or Offer). |
336 | TradingSessionID | String | N | Can appear in the group entry to identify trading session status. |
Standard Trailer | Y |
3.15. MarketDataIncrementalRefresh
The message is issued by the exchange in response to MarketDataRequest (35=V) and applicable only to a session configured as a MarketData session type.
Tag | Name | Data type | Required | Comment |
---|---|---|---|---|
Standard Header | Y | 35=X | ||
262 | MDReqID | String | Y | Refers to the value of MDReqID (262) in the original MarketDataRequest (35=V). |
268 | NoMDEntries | Int | Y | Number of market data entries in the repeating group. |
279 | MDUpdateAction | Char | Y | Type of market data update action. Must be the first field in this group. Valid values: 0 - New; 1 - Change; 2 - Delete. |
269 | MDEntryType | Char | Y | Type of market data entry. Valid values: 0 - Bid; 1 - Offer; 2 - Trade; 4 - Opening Price; 5 - Closing Price: 7 - Trading Session High Price; 8 - Trading Session Low Price: B - Trade Volume. |
55 | Symbol | String | C | Ticker symbol. Note: the instrument symbol is identified only for first market data entry |
270 | MDEntryPx | Price | C | Price (44) of the market data entry. Required when MDEntryType (269) is not Trade Volume ('B'). |
271 | MDEntrySize | Qty | C | Quantity (53) or volume represented by the market data entry. Required when MDEntryType (269) is a Bid ('0'), Offer ('1'), Trade ('2') or Trade Volume ('B'). |
273 | MDEntryTime | UTCTimeOnly | N | Time of market data entry. Actual if MDEntryType (269) is a Trade ('2'). |
290 | MDEntryPositionNo | Int | N | Display position of a bid or offer, numbered from most competitive to least competitive, per market side, beginning with 1. Actual if MDEntryType (269) is a Bid ('0') or Offer ('1'). |
346 | NumberOfOrders | Int | N | In an Aggregated Book shows how many individual orders make up a market data entry. Actual if MDEntryType (269) is a Bid ('0') or Offer ('1'). |
58 | Text | String | N | Can appear in the group entry to identify the source of the data (applicable only to order book entries: Bid or Offer). |
336 | TradingSessionID | String | N | Can appear in the group entry to identify trading session status. |
54 | Side | Char | N | Can appear in the group entry with 269=2 (trade) to identify an aggressor. Valid values: 1 - Buy; 2 - Sell. |
Standard Trailer | Y |