MidChains FIX API
Introduction
The information in this MidChains FIX document describes the adaptation of the standard FIX 4.2 for vendors and subscribers to communicate with the MidChains quotation and execution platform. FIX 4.2 tags, as described in detail on the Financial Information Exchange Protocol Committee website, www.fixprotocol.org as well as custom tags are used extensively in this document and the reader should familiarize themselves with the latest updates to this release. If an application message in Financial Information Exchange Protocol version 4.2, or previous FIX versions, is not included in this document, the message is ignored.
Connectivity
To connect to MidChains over the FIX API clients must establish a secure connection to the FIX gateway. The connectivity details such as the IP Address and Port Number will be assigned by the MidChains trade support team. To request these details, clients can contact support@midchains.com or raise a request via the support portal through the www.midchains.com website.
Messages
This section outlines the FIX messages, how they are supported, and to what extent the business data is translated within the FIX Gateway.
More details available in the FIX API Documentation
Message Header
Tag | Field Name | Required | Note |
8 | BeginString | Yes | "FIX.4.2" |
9 | BodyLength | Yes | |
35 | MsgType | Yes | |
49 | SenderCompID | Yes | Provided by MidChains |
56 | TargetCompID | Yes | Provided by MidChains |
34 | MsgSeqNum | Yes | |
52 | SendingTime | Yes | |
Message Trailer
Tag | Field Name | Required | Note |
10 | CheckSum | Yes | |
Login (MsgType = A)
The logon message identifies and authenticates the user or member and establishes a connection to the FIX Gateway.
The FIX gateway accepts Logon messages as per the FIX specification. Further, the FIX gateway supports the logon sequence required for session authentication.
After a successful logon as described in the specification the FIX gateway will:
Initiate retransmission processing via a resend request if the Logon sequence number is greater than the value expected
Initiate logout processing via a Logout message with an appropriate error message, then wait for a confirming Logout before disconnecting if the Logon sequence number is less than expected. If the confirming Logout has not been received within a short period of time the session will be disconnected.
Handle retransmission requests.
Initiate a Logon using the SenderCompID in the message header.
Will forward to the FIX client messages that are waiting in the outbound queue
Begin regular message communication.
Tag | Field Name | Required | Note |
| StandardHeader | Yes | MsgType = A |
108 | HeartBtInt | Yes | Heartbeat interval in seconds |
| StandardTrailer | Yes | |
Logout (MsgType = 5)
The Logout message initiates or confirms the termination of a FIX session.
The FIX gateway will receive and generate logout messages as required by the FIX Protocol. The gateway follows the prescribed sequence of messages for the proper termination of the session.
Messages received by the gateway after the client logs out are stored in a log file for transmission to the client once the client logs in again within the same trading day. The messages to be transmitted are dependent on the sequence number reconciliation that occurs on a logon handshake.
Upon receipt of a Logout message:
A confirming logout message will be sent by the gateway to the client; then,
The session will be disconnected. The FIX gateway should never initiate a logoff except when a severe error has occurred.
Tag | Field Name | Required | Note |
| StandardHeader | Yes | MsgType = 5 |
58 | Text | No | Free format text string (Note: this field does not have a specified maximum length) If the Logout message has been sent by the the FIX gateway, then this field will contain the text “Session closed”. |
| StandardTrailer | Yes | |
New Order - Single (MsgType = D)
This message is used to submit an order to the trading system for processing
Tag | Field Name | Required | Note |
| StandardHeader | Yes | MsgType = D |
11 | ClOrdId | Yes | Unique identifier of the order. Must be unique for each session, max 32 chars. |
1 | Account | No | Optional identifier from customer, will be passed back in Execution Report. |
55 | Symbol | Yes | Common, “human understood” representation of the security, bitcoins US Dollar – BTCUSD, etc. |
54 | Side | Yes | '1' = Buy '2' = Sell |
38 | OrderQty | Yes | Size of the order. E.G. 10 |
43229 | FractionBase | Yes | If FractionBase is 100 and OrderQty field = 1, that means the Order Qty sent to the platform is 0.01. |
40 | OrdType | Yes | '1' = Market '2' = Limit |
44 | Price | No | Required for limit Ordtypes |
59 | TimeInForce | No | '3' = IOC (Immediate-Or-Cancel) |
126 | ExpireTime | No | Required if TimeInForce = GTD (GMT Time) |
| StandardTrailer | Yes | |
Order Cancel Request (MsgType = F)
Tag | Field Name | Required | Note |
| StandardHeader | Yes | MsgType = F |
41 | OrigClOrdId | Yes | ClOrdID of the previous order |
37 | OrderID | No | Unique Identifier of order assigned by the platform. |
11 | ClOrdId | Yes | Unique ID of cancel request as assigned by the institution. |
55 | Symbol | Yes | Common, “human understood” representation of the security, bitcoins US Dollar – BTCUSD, etc. |
54 | Side | No | '1' = Buy '2' = Sell |
38 | OrderQty | No | Size of the order. E.G. 10 |
58 | Text | No | |
| StandardTrailer | Yes | |
Order Cancel/Replace Request (MsgType = G)
Tag | Field Name | Required | Note |
| StandardHeader | Yes | MsgType = g |
41 | OrigClOrdId | Yes | ClOrdID of the previous order |
37 | OrderID | No | Unique Identifier of order assigned by the platform. |
11 | ClOrdId | Yes | Unique ID of cancel request as assigned by the institution. |
1 | Account | No | Optional identifier from customer, will be passed back in Execution Report. |
55 | Symbol | Yes | Must match original order |
54 | Side | Yes | Must match original order |
38 | OrderQty | Yes | Size of the order. E.G. 10 |
44 | Price | No | Required for limit OrdTypes. |
59 | TimeInForce | Yes | "Needs definition" |
126 | ExpireTime | No | Required if TimeInForce= |
| StandardTrailer | Yes | |