The Challenges of Building a FIX Protocol
The first day I was introduced to FIX was when I worked at an investment bank in London as a developer, I was told to write a feed handler to retrieve market data. Bear in mind that at this time, I knew nothing about FIX, apart from googling it for about 10 mins on the internet. With a touch of overconfidence and slight arrogance, I set to work coding a direct socket connection to the remote FIX endpoint, thinking, “How hard could it be?”
So, What Is FIX?
Financial Information eXchange (FIX) is both a market data format and a protocol: it is used by investment banks to place orders and receive market data and has become a global language in financial trading. The format of a FIX message controls how it is encoded. All FIX messages start with 8=FIX
, which denotes the start of a FIX message. They then go on to list key and value pairs. The keys are represented as numbers (known as TagNumbers
) followed by a =
delimiter to delimit the values. Each key=value
combination is then delimited by the \u0001
character, which is sometimes visually represented as either ^
or |
. The value is often written in a semi-human-readable format. I say semi-human readable because most of the time it is human-readable, but all too often, FIX will use a single character to denote a state or type of message. These characters are not always that obvious. I agree that the character B
for "Buy" and S
for "Sell" makes sense, but other characters are used that make no sense. For example, D
denotes a "New Order Single" message, which is a message that is often used when you wish to place an order with your counterparty.