Logon and session recovery
Use an API key with thetrade permission. Your SenderCompID must be the key’s id and
must be accepted for that venue’s FIX session. See API keys
for key authorization and scope rules.
Persist sequence numbers across logons, logouts and disconnects. Do not request a reset
at logon:
141=Y disconnects the session without changing the stored counters. If a sequence
gap occurs, the venue requests the missing messages before processing a message above the
expected sequence. Send heartbeats at the negotiated interval and support resend recovery.
Order entry opens a few seconds after Logon, once the venue has connected the session’s
execution updates. A New Order Single sent before that is refused with a BusinessMessageReject
(j) whose Text (58) is stream_unavailable; nothing is placed, so wait and send it again.
Discover symbols and market data
Request the Security List withSecurityListRequest (x). The SecurityList (y) response
contains each listed market’s Symbol (55) and SecurityDesc (107). Use the market ids
returned by that network’s list or its public GET /v1/markets catalog as symbols.
MarketDataRequest (V) supports snapshots (263=0), snapshots with updates (263=1)
and unsubscribe (263=2). Request top of book (264=1) and bid (269=0), offer (269=1)
or trade (269=2) entries for symbols from the list. Snapshots arrive as W, updates as X,
and a refused market data request as Y with a reason in Text (58).
Submit and cancel orders
On a network with order entry enabled, sendNewOrderSingle (D) to place an order and
OrderCancelRequest (F) to cancel an order placed by that FIX session.
For a limit order, send OrdType (40) as 2, TimeInForce (59) as 1 (GTC) and ExecInst
(18) as 6 (post-only). Include a unique ClOrdID (11), the network’s Symbol (55),
Side (54, 1 for buy or 2 for sell), OrderQty (38) and Price (44). If Account (1)
is present, it must match the key’s account.
Read ExecutionReports (8) for accepted orders, fills and definitive order refusals.
A refused cancel arrives as OrderCancelReject (9). Check Text (58) on refusals;
BusinessMessageReject (j) can also report a blocked or uncertain request.