One of the best FIX API for retail trading we ever use was provided by FXCM.
I am not trying to affiliate FXCM Corp, I just want say big thanks for their engineers and mangers who was working under that great solution. Maybe this small review will help people make right decision about programming interfaces.
So, what so great we have find out?
Any version of FIX protocol provides big set of messages, useful for traders(and for developers too). Things is that most of the brokers implements only very limited quantity of them. Yes, FIX protocol not force you to do this, you free provides only some basics which allow you to tell – ‘look, we also have FIX interface’.
Lets say broker X(sure, you can replace X with someone familiar to you, there are a lot of around) can process NewOrderSingle for Market, Stop and Limit orders(plus some limitations), OrderCancelRequest(to cancel pending orders), OrderCancelReplaceRequest(to modify pending orders).
From their side broker will response using ExecutionReport, OrderCancelReject and Reject, plus market feed streaming with MarketDataSnapshotFullRefresh(not all provides market feed through FIX protocol).
Looks like this is enough to trade.
Open orders, receive confirmations, modify and cancel….
From point of view of trader – yes, this is good enough.
But is this list of messages enough to build stable and robust trading application?
I think no. Why?
Behind of high level abstraction like open order developers have tons of nuances like stability of network communications, transmission latency, problems of synchronization to keep integrity of trading information.
Today most of us have good and reliable Internet connection but even now sometimes something going wrong and connection can disappear.
After several tough call to your ISP link is up and this is great.
But using described above list of messages you simply cant restore your current status of order book.
We can suppose that nothing was changed and all your orders still open.
This way is like jump into the dark. Second – open broker’s trading terminal and ‘manually’ check/sync orders with your application.
This sounds like a bad joke but few months ago one broker suggest me do this.
Why we like FXCM?
They provides rich FIX protocol API for developers and integrators.
You can track status of your orders/positions and accounts in real time.
You can sync trading history, you able to receive orders book(full or with some conditions), send messages to deal desk using Email message, ask to re quote market orders, get market depth for select symbols.
Yes, this is not all functionality which included into FIX 4.4 but this is good enough(at least for us).
To summarize FXCM FIX API functions:
- open/close positions
- open/modify/cancel conditional orders
- synchronize positions
- synchronize conditional orders
- receive updates about accounts statuses
- work with market feed(subscribe, unsubscribe, receive market prices)
- check security statuses
- send messages to deal desk
Honestly, we not using all of this functions but better to have them than constantly send requests to broker and ask ‘when we will finally have this’ and receive standard ‘we working under this’.
FXCM FIX API is not ideal and have some weak sides(from my point of view and this is definitely another story) but you can close eyes on this because their provides one of the best API for integration.
Their API can be a educative example for another developers which working under sell side functionality, for the integrators it a good prize:)
Original article located here