By Carlyle Gordon
The intention of this article is to explain what the FIX Protocol is to someone who is not familiar or only has a vague familiarity with the FIX Protocol. Reading this article should demystify the purpose and substance of the FIX Protocol.
Who should read this article?
I would say any person working in a technology department of a financial services firm. Due to the very basic nature of this article I would also encourage people who are working on the business side of these firms. For the trader this information is mostly unimportant, but since this could be the core technology surrounding the tools you use to make your living I would recommend that you at least be familiar with it.
What is FIX?
FIX stands for Financial Information Exchange and is by definition a protocol used to communicate financial data; more specifically for electronic trading or trading of stocks/securities via computer software. It has to do with previously agreed upon standards of communication between traders/firms and other traders/firms. It is the electronic language used to transmit, for example; a buy order of 100 shares of Microsoft or to check on the status of that order or to cancel that order or even reject that order. Just about every kind of securities trading-related transaction message could be transmitted in the language of FIX.
The analogy of FIX
FIX can be thought of as a spoken language where you have appropriate and previously agreed upon questions, statements and requests, which in turn have appropriate responses. Just like with spoken languages we have electronic equivalents of dictionaries and grammar books that tell you everything that can be communicated and how it should be done. The documents are called FIX Protocol specifications.
In plain “English” if we speak with the “protocol” of the English language and say “Hello” and another person responds “nana” (gibberish) or “blue” (a color), odds are that we will be confused and your communication with this person would therefore be a failure. In English, people cannot simply respond in any manner they choose, blurting out things using their own exclusive code words or anything that comes to mind. We have to follow a protocol or language in order to communicate and be understood.
In the financial world, this applies to the electronic trading systems of brokerages and exchanges. If your trading system were to electronically send orders in a proprietary format, then how would trading systems at other firms understand your trades? That chaotic method of trading would surely result in many errors and financial losses. This is why we have FIX, where (for example) all FIX compliant parties have agreed that every new message will begin with “BeginString<8>=value” and end with “CheckSum<10>=value”.
FIX in practice
FIX facilitates the elimination of the spoken words used in manual order execution by phone. Instead of calling a broker and saying, “buy 100 shares”, you can use software to send the same order using the language of FIX. Instead of transmitting a message “buy 100 shares”, FIX compliant software transmits this message as “54=1 38=100”. This
message is sent from one trading software program (OMS) to another for execution. The FIX Protocol is what tells us to send “54=1 38=100” in place of “buy 100 shares”. If you are developing your own FIX compliant trading software, such as Portware Professional or FIXTrader, NYFIX’s powerful trader workstation, then you need to ensure that all of your messages comply with the FIX Protocol.
Essentially you would look up the transaction type that you need and use the tags listed for that message. For example if you wanted to have your program send a reject message, you would look up the “reject” in the FIX specification document and find and utilize the appropriate tags. As a trader assisting in this process, you would tell your developer that you need the program to support a reject and he/she would look up reject protocol (grammar) in the appropriate FIX Protocol specification document and implement it for you. FIX has rules or a syntax that should be followed. The first thing to know is that every message consists of:
Header: Message delivery details. Begins with: [BeginString][BodyLength][MsgType]
Body: Consists of the details of the order. For example, What are you trading? Are you buying or selling?
Trailer: Consists primarily of the [CheckSum] tag which is used to validate message integrity.
FIX syntax
All messages are written in the form, “Tag=Value”. Tags can have both alpha elements (BeginString) and numerical elements (8). For example “BeginString<8>”. The tag “8” and the value “FIX.4.4”, would be written: 8=FIX4.4 Here is a complete FIX message with all tags and values color coded for your learning convenience:
[8=FIX.4.2 9=0164 35=D 34=20 49=Customer 56=Broker 52=20050329-18:12:47 55=IBM 21=3 60=20050329-18:12:48 15=USD 11=48025 54=1 47=A 40=1 38=100 10=164]
NOTE: Allowed values are restricted by the rules of the particular FIX version being used. The values can sometimes even be case sensitive as in MsgType<35>, where “d” and “D” are two different message types. For your reference here are some of the above tags translated:
- “34” or “MsgSeqNum<34>”, stands for message sequence number.
- “55” or “Symbol<55>”, stands for symbol.
- “54” or “Side<54>”, stands for side (buy, sell, sell short).
- “38” or “OrderQty<38>”, stands for order quantity.
Here is a sample message where a single order to buy 100 shares of IBM at market price is sent from “Customer” to another bank called “Broker”:
[8=FIX.4.2 9=0164 35=D 34=20 49=Customer 56=Broker 52=20050329-18:12:47 50=589634 55=IBM1=PRA 21=3 100=A 60=20050329-18:12:48 15=USD 110=0 11=48025 63=0 59=0 54=1 47=A 40=1 38=100 10=087]
The FIX Protocol tells you that Broker can acknowledge receipt and processing of the order in what we call an “execution report”(35=8) by sending Customer the following message:
[8=FIX.4.2 9=0250 35=8 34=20 49=Broker 56=Customer 52=20050329-18:12:49 57=589634 1=PRA 6=0 11=48025 14=0 15=USD 17=47569003231 20=0 21=1 31=0 32=0 37=02075M8B 38=100 39=0 40=1 47=A 54=1 55=IBM 58=ROUTED 59=0 60=20050329-18:12:48 63=0 150=0 151=100 198=DMO*24 207=A 10=242]
There is much more to the FIX Protocol, such as the way in which it facilitates communications between buy-side and sell-side firms and the ways it is able to route orders to multiple destinations. There are value types, required and optional tags and the list goes on. A lot of this information can be found at www.fixprotocol.org. This article is intended to be very basic so it can be understood by almost anyone. To this end I have filtered out many details unnecessary for gaining a basic understanding of the FIX Protocol.
Where do you go from here?
- Start reviewing the FIX Protocol itself here: http://www.fixprotocol.org/specifications/ (use FIXimate on the above page)
- Start becoming more familiar with FIX by building your own messages using the protocol’s specifications documents. Make up an order and then try to code it in the FIX language using the specification documents.
- Post any questions you may have about FIX on the fixprotocol.org forums: http://www.fixprotocol.org/discuss/