Hacker News new | ask | show | jobs
by srazzaque 2225 days ago
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.

2 comments

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 wish exchanges would do like Eurex and release a C header of structs representing their binary protocol.

Unambiguous, no transcription errors from an obnoxious PDF, none of FIX’s stupid design.

It’s been an age but when I was doing connector work Eurex was so great. Everything about it technically was high quality.
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.

Edit: typo

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.