Of course, and in practice you basically always need to tweak your FIX layer when connecting to multiple brokers.
Whilst there will be differences, you can rely on a surprising amount being uniform. The general session/authentication flow and serialisation mechanisms will be largely the same. Or the use of standard fields ClOrdID, or OrderQty. Or the "general" meaning of the messages NewOrderSingle or ExecutionReport.
It's somewhat predictable where the differences are going to be: identifying securities (different codes, etc), expressing order types and algo parameters, and subtle differences to order lifecycles.
Again this is a gut feel, but I doubt that if you take 2 proprietary APIs, you'll get that level of uniformity.
I have direct experience building the fix layers for integrating a variety of exchanges. I think FIX is a net negative. The standardization provides so little, there are so many murky edge cases in each implementation and the protocol encoding is so bad, I’d rather just program against the proprietary API. On the exchanges at least the binary APIs make so much more sense.
I think both you and nurettin raise a very good point, in that FIX had some great aspirations, but the wiggle-room in the standards was too wide, and has resulted in, well, not a very a meaningful standard. The existence of certain companies that do nothing but aggregate and normalise broker and LP APIs is further proof of this.
Nonetheless, it'd be great to see brokers in the retail space normalise toward a uniform API. Even if that is a standardised HTTP interface with good WS support for streaming data, or a standardised binary interface. My feel is that FIX is the closest thing we have now that would get us most of the way there, even for all its warts. But of course, I'd be equally keen on anything standardised.
Execution report is another thing that is different between the two. You can't even list your running orders without resorting to custom tags. You can't send multiple orders without providing their custom delimiters. You have to modify login messages and insert custom tags before a message is sent. The only uniformity I am left with is the fix template of key=value\0x01 repeating N times. Nobody conforms to fix 4.2 or 5.0xxx they say they derive from it, then you go through their conformance test of 100 messages and see for yourself what changes they made.
I hear your pain... There's definitely brokers doing some strange things out there, or being overly sensitive to the order of fields. Let's not even talk about repeating groups.
> custom delimiters
Surely you mean custom _message_ delimiters, not field delimiters?
In any case I think it's a foolish endeavour to think that if a broker says "we conform to FIX4.4" to ever take that at face value. Agree that the conformance test always reveals the true extent of conformity.
But zooming out a little, despite these challenges, I'd say you're still in a better position than having N endpoints where 1 gives you a Java library with its own ridiculous threading model, another gives you a Python library that calls a HTTP endpoint (that you need to provide an OAuth token for), and yet another that only has a hosted C# interface. That's where we're headed towards.
Yes I meant repeating group delimiters. What I do like about fix clients (not fix protocol) is the extra value they provide by keeping your sessions alive, tolerating hot restarts, logging in and out on schedule and managing multiple sessions. Things you have to craft when building rest clients. Other than that, I see absolutely no difference between going through a conformance test and reading rest APIs. It is basically the broker's custom designed API under the guise of a so-called industry standard fix protocol.
> What I do like about fix clients (not fix protocol) is the extra value they provide by keeping your sessions alive, tolerating hot restarts, logging in and out on schedule and managing multiple sessions.
I agree somewhat, but I think the protocol needed to come first. Can you honestly say that in its absence, multiple clients would be able to implement these behaviours in a uniform manner?
The fact that there's a concept of a "session" demarcated with LOGON/LOGOUT, sequence numbering, resend semantics, heartbeating - all this had to come from... somewhere.
Put another way: if you get 10 brokers developing their own REST/HTTP API's, what is the chance they'll normalise on a similar set of core concepts?
One earthly concern is that, because of this unified interface myth, management will think that once you integrated with one broker, the others come free because FIX.
Oh, you need another week or two with the other broker? Why? We spent so much just to get the industry standard API.
Sorry I'm too jaded to appreciate sequence numbering and the industry standard logout message format that fix provides at the given time.
About your point on rest, I do acknowledge the difficulties you're mentioning, of every broker requiring different rest messages to do the same thing. I've come across brokers which accept single orders and grouping in different messages. The delay and errors it causes is insufferable.
The problem is, there has not been a body enforcing unity across brokers. Fix is a nice try, but it is left alone in the woods without any restrictions as to what brokers can or cannot alter. I would like this pointed out and heard of more and that's it.
Is there a open source framework/application in go or rust based on FIX protocol?
In forex quite a lot broker offer FIX apis(because MT4 is using FIX).
The use case would be to have only one application to watch/place orders simultanously on 2-3(...multiple) broker accounts. To spread risk of losing funds in case a broker goes bankrupt (or whatever reason).
Whilst there will be differences, you can rely on a surprising amount being uniform. The general session/authentication flow and serialisation mechanisms will be largely the same. Or the use of standard fields ClOrdID, or OrderQty. Or the "general" meaning of the messages NewOrderSingle or ExecutionReport.
It's somewhat predictable where the differences are going to be: identifying securities (different codes, etc), expressing order types and algo parameters, and subtle differences to order lifecycles.
Again this is a gut feel, but I doubt that if you take 2 proprietary APIs, you'll get that level of uniformity.