- The FIX gateway is accessible with an OpenVPN connection.
- There are two interfaces: FIX Market data and FIX Trading.
- FIX Trading requires a valid
SenderCompId
,login
andpassword
specified in theLogon
message. - The protocol is based on FIX protocol 4.4 (http://www.fixprotocol.org/FIXimate3.0). Refer to FIX 4.4 documentation if there is no tag information specified.
- The FIX gateway supports subset of messages and tags listed in this document.
- Quantity is represented in lots (e.g. 1 lot of BTCUSD is 0.01 BTC)
- Price is represented in natural value (e.g. 550$ for BTC)
Symbol | Lot size | Price step |
---|---|---|
BTCUSD | 0.01 BTC | 0.01 |
BTCEUR | 0.01 BTC | 0.01 |
LTCBTC | 0.1 LTC | 0.00001 |
LTCUSD | 0.1 LTC | 0.001 |
LTCEUR | 0.1 LTC | 0.001 |
DSHBTC | 1 DSH | 0.00000001 |
ETHBTC | 0.001 ETH | 0.000001 |
ETHEUR | 0.001 ETH | 0.0001 |
NXTBTC | 1 NXT | 0.00000001 |
BCNBTC | 100 BCN | 0.0000000001 |
XDNBTC | 100 XDN | 0.0000000001 |
DOGEBTC | 1000 DOGE | 0.000000001 |
XMRBTC | 0.01 XMR | 0.000001 |
QCNBTC | 0.01 QCN | 0.000001 |
FCNBTC | 0.01 FCN | 0.000001 |
LSKBTC | 1 LSK | 0.0000001 |
LSKEUR | 1 LSK | 0.0001 |
STEEMBTC | 0.001 STEEM | 0.00001 |
STEEMEUR | 0.001 STEEM | 0.0001 |
SBDBTC | 0.001 SBD | 0.00001 |
DASHBTC | 0.001 DASH | 0.000001 |
XEMBTC | 1 XEM | 0.00000001 |
EMCBTC | 0.1 EMC | 0.00000001 |
SCBTC | 100 SC | 0.000000001 |
ARDRBTC | 1 ARDR | 0.000000001 |
ZECBTC | 0.001 ZEC | 0.000001 |
WAVESBTC | 0.01 WAVES | 0.0000001 |
- All tags listed should be treated as required by default. Optional tags will be marked.
- Tags that are not listed are not supported
- Tags are implemented according to FIX protocol 4.4 (http://www.fixprotocol.org/FIXimate3.0). If some values are not supported the complete list of values is specified.
There are two FIX end-points that use different network addresses (ipv4:port):
- FIX Trading end-point: interface for trading (placing new orders, order status requests, execution reports, order cancellation)
- FIX Market data end-point: interface for market data subscription
Client should use proper endpoint. Behavior in case of receiving wrong message is not specified. Client could possibly be disconnected or receive Reject messages in case of using an incorrect endpoint.
In case of severe fault the FIX session could be forcibly reset.
In this case Client will receive ResetSeqNo
flag from server and should synchronize its state by MassStatusRequest.
There are restrictions on internal order placement timeouts. In case of fault Client will receive Reject with the specific reason "Too late to enter".
There are two pseudo-states that could be returned only by sending OrderStatusRequest or OrderMassStatusRequest:
- Pending New
- Pending Cancel.
Please note:
- First ExecutionReport will be New or Rejected
- Not-filled FOK and IOC orders become Expired
Consider the following diagram:
FIX session has no persistence.
Supports the following application-level messages:
From Client to FIX gateway:
- NewOrderSingle [type 'D']
- OrderCancelRequest [type 'F']
- OrderStatusRequest [type 'H']
- OrderMassStatusRequest [type 'AF']
From FIX gateway to Client:
- OrderCancelReject [type '9']
- ExecutionReport [type '8']
Client will receive ExecutionReports for orders that are placed with the same SenderCompID
.
Supports the following application-level messages:
From Client to FIX gateway:
- MarketDataRequest [type 'V']
From FIX gateway to Client:
- MarketDataRequestReject [type 'Y']
- MarketDataSnapshotFullRefresh [type 'W']
- MarketDataIncrementalRefresh [type 'X']
Tag | Name | Values | Comments |
---|---|---|---|
8 | BeginString | FIX.4.4 | |
9 | BodyLength | ||
35 | MsgType | 0 - Heartbeat 1 - Test Request 2 - Resend Request 5 - Logout A - Logon D - NewOrderSingle F - Order Cancel Request H - Order Status Request V - Market Data Request AF - Mass Status Request AN - Request For Positions |
|
49 | SenderCompID | Should be in the login_ format; only one connection can be established with the same SenderCompID |
|
56 | TargetCompID | ME | |
34 | MsgSeqNum | ||
43 | PossDupFlag | ||
52 | SendingTime | @Snt |
Tag | Name | Values | Comments |
---|---|---|---|
10 | CheckSum |
Tag | Name | Values | Comments |
---|---|---|---|
112 | TestReqID | this Heartbeat is a response to TestRequest |
Tag | Name | Values | Comments |
---|---|---|---|
112 | TestReqID |
Tag | Name | Values | Comments |
---|---|---|---|
7 | BeginSeqNo | ||
16 | EndSeqNo |
Tag | Name | Values | Comments |
---|---|---|---|
45 | RefSeqNum | ||
371 | RefTagID | ||
58 | Text | optional |
Tag | Name | Values | Comments |
---|---|---|---|
123 | GapFillFlag | N (default), Y | |
371 | RefTagID | ||
123 | GapFillFlag | ||
36 | NewSeqNo |
Tag | Name | Values | Comments |
---|---|---|---|
58 | Text | optional | could contain a reason for server-initiated logout |
Tag | Name | Values | Comments |
---|---|---|---|
98 | EncryptMethod | 0 | |
108 | HeartBtInt | ||
553 | Username | ||
554 | Password | ||
ResetSeqNumFlag | optional, default=N | ||
10001 | CancelOnDisconnect | Y or N, optional, default:N | cancel all orders for a specific SenderCompID on disconnect |
Tag | Name | Values | Comments |
---|---|---|---|
55 | Symbol | e.g. "BTCUSD |
Tag | Name | Values | Comments |
---|---|---|---|
453 | NoPartyIDs | 1 | |
448 | PartyID | user id |
Tag | Name | Values | Comments |
---|---|---|---|
262 | MDReqID | ||
281 | MDReqRejReason | 0 | |
58 | Text | optional | could contain a reason |
Tag | Name | Values | Comments |
---|---|---|---|
262 | MDReqID | ||
Instrument | (component) | ||
268 | NoMDEntries | (repeating group) | |
269 | > MDEntryType | 0 - Bid 1 - Offer |
|
270 | > MDEntryPx | ||
271 | > MDEntrySize |
Tag | Name | Values | Comments |
---|---|---|---|
262 | MDReqID | ||
268 | NoMDEntries | (repeating group) | |
279 | >MDUpdateAction | 0 - New | in case of level removal MDEntrySize will be 0 |
269 | >MDEntryType | 0 - Bid 1 - Offer 2 - Trade |
|
> Instrument | (component) | ||
270 | > MDEntryPx | ||
271 | > MDEntrySize |
Subscribe:
Tag | Name | Values | Comments |
---|---|---|---|
262 | MDReqID | ||
263 | SubscriptionRequestType | 0 - Snapshot 1 - Snapshot and updates |
|
264 | MarketDepth | 0 - Full Book 1 - Top Of Book |
|
267 | NoMDEntryTypes | (repeating group) | |
269 | >MDEntryType | 0 - Bid 1 - Offer 2 - Trade |
|
146 | NoRelatedSym | (repeating group) | |
> Instrument | (component) |
Unsubscribe:
Tag | Name | Values | Comments |
---|---|---|---|
262 | MDReqID | ||
263 | SubscriptionRequestType | 2 - Disable previous Snapshot + Update Request (Unsubscribe) |
Tag | Name | Values | Comments |
---|---|---|---|
37 | OrderID | (Repeating group), size = 1 | |
11 | ClOrdID | <= 32 characters | |
41 | OrigClOrdID | filled for ExecutionReport initiated by OrderCancelRequest | |
790 | OrdStatusReqID | ExecType=I | |
17 | ExecID | ||
150 | ExecType | 0 - New 4 - Canceled 8 - Rejected C - Expired F - Trade (partial fill or fill) I = Order Status |
|
39 | OrdStatus | 0 - New 1 - Partially filled 2 - Filled 4 - Canceled 8 - Rejected C - Expired 6 - Pending Cancel A - Pending New |
Pending Cancel and Pending New could be sent if ExecType=I |
103 | OrdRejReason | 1 - Unknown symbol 2 - Exchange closed 4 - Too late to enter 5 - Unknown Order 6 - Duplicate Order (e.g. dupe ClOrdID (11)) 11 - Unsupported order characteristic 15 - Unknown account(s) 99 - Other |
if Rejected |
1 | Account | ||
Instrument | (component) | ||
54 | Side | 1 - Buy 2 - Sell |
|
60 | TransactTime | ||
38 | OrderQty | ||
40 | OrdType | 1 - Market 2 - Limit |
|
44 | Price | for limit orders | |
32 | LastQty | for Trades | |
31 | LastPx | for Trades | |
851 | LastLiquidityIn | for Trades | |
151 | LeavesQty | ||
14 | CumQty | ||
6 | AvgPx | ||
584 | MassStatusReqID | Mass status request identifier. Present if Order_Mass_Status_Request (35=AF) is used. | |
912 | LastRptRequested | N - There is at least one more execution report Y = This is last execution report |
Present if Order_Mass_Status_Request (35=AF) is used |
Tag | Name | Values | Comments |
---|---|---|---|
11 | ClOrdID | @ID | |
Parties | (component), size=1 | ||
1 | Account | ||
Instrument | (component) | ||
54 | Side | 1 - Buy 2 - Sell |
|
60 | TransactTime | ||
38 | OrderQty | ||
40 | OrdType | 1 - Market 2 - Limit |
|
44 | Price | ||
59 | TimeInForce | 0 - Day (or session) 1 - Good Till Cancel (GTC) 2 = Immediate or Cancel (IOC) 4 = Fill or Kill (FOK) 6 - Good Till Date (GTD) |
|
126 | ExpireTime | UTCTimestamp | for GTD orders |
18 | ExecInst | optional, 'o' from FIX5.0 (cancel on disconnect) | |
10001 | CancelOnDisconnect | optional Y N (default) |
Tag | Name | Values | Comments |
---|---|---|---|
37 | OrderID | If CxlRejReason="Unknown order", specifies "NONE" | |
11 | ClOrdID | ||
41 | OrigClOrdID | ||
39 | OrdStatus | If CxlRejReason = "Unknown Order", specifies Rejected | |
434 | CxlRejResponseTo | ||
102 | CxlRejReason |
Tag | Name | Values | Comments |
---|---|---|---|
41 | OrigClOrdID | ||
11 | ClOrdID | ||
Instrument | (component) | ||
1 | Account | ||
54 | Side | ||
60 | TransactTime |
Behavior:
- Server sends order status as ExecutionReport
- Account and Side are required
- If order is not found the server doesn't send any response.
Tag | Name | Values | Comments |
---|---|---|---|
11 | ClOrdID | @ID | |
790 | OrdStatusReqID | @StatReqID | |
1 | Account | ||
Instrument | (component) | ||
54 | Side | 1 - Buy 2 - Sell |
Tag | Name | Values | Comments |
---|---|---|---|
584 | MassStatusReqID | ||
585 | MassStatusReqType | 7 - Status for all orders | |
1 | Account | (required) |
Tag | Name | Values | Comments |
---|---|---|---|
710 | PosReqID | ||
724 | PosReqType | 0 - Positions | |
263 | SubscriptionRequestType | 0 - Snapshot | |
453 | NoPartyIDs | size=0 | |
1 | Account | in account_ format | |
581 | AccountType | 8 = Joint Backoffice Account (JBO) | |
15 | Currency | currency code | |
715 | ClearingBusinessDate | YYYYMMDD | ignored, use now date |
60 | TransactTime | YYYYMMDD-HH:MM:SS | ignored, use now |
Tag | Name | Values | Comments |
---|---|---|---|
721 | PosMaintRptID | 0 | |
710 | PosReqID | ||
728 | PosReqResult | 0 - Valid request 1 - Invalid or unsupported request |
|
715 | ClearingBusinessDate | 19810711 | no info |
453 | NoPartyIDs | (repeating group) size=0 | |
1 | Account | ||
581 | AccountType | 8 = Joint Backoffice Account (JBO) | |
15 | Currency | ||
720 | SettlPrice | 0.0 | no info |
731 | SettlPriceType | 1 = Final | |
734 | PriorSettlPrice | 0.0 | no info |
702 | NoPositions | (repeating group) size=0 | |
753 | NoPosAmt | (repeating group) size=1 | |
707 | > PosAmtType | CASH | a |
708 | > PosAmt | account balance or 0 in case of error | |
58 | Text | optional "15(Currency)" "1(Account)" "710(PosReqID)" |
contains incorrect tag in case of wrong message |