Monday, February 13, 2006

FIX for Streaming Quotes: version 4.3 vs. 4.4

When using FIX for trading FX Spot on streaming quotes one must choose between the two latest versions of FIX: 4.3 or 4.4. Version 4.2 does not really support spot trading, as several of the required messages are not defined. I've come across some solutions where the MarketData message was modified to contain e.g. a QuoteID. This does work, but one can not really claim to be compliant with the protocol as custom tags have to be introduced. FIX4.2 is really for order routing and that's it.

Should one then go for FIX4.3 or FIX4.4? Our own B2B FIX server is build around FIX4.3. This is mainly because it seemed to be the most commonly used version at the time development began, and it works quite well, but if I should start today, I would definitely got for FIX4.4 as it is much more elegant for spot trading. I will try to quantify that statement below.

Both versions support the QuoteRequest and Quote messages, hence the subscription to and receiving of the quotes are the same. The difference lay in the way you trade on these quotes.

For FIX4.3 you use version 4.2 syntax using the Order - Single message (35=D), with the OrdType set to Previously quoted (40=D).

An example of an Order - Single message if you wanted to Buy 5.000.000 EUR/USD @ 1.3364 could be (tag 117 is the QuoteID):

[Standard Header]
11=1702843[0]64=20060209[0]21=1[0]55=EUR/USD[0]460=4[0]54=1[0] 60=20060207-10:00:29[0]38=5000000[0]40=D[0]44=1.3363[0]117=STE-EURUSD-2006-2-7:10.0.28:45-5000000
[Standard Trailer]

[0] used to represent the basic field delimiter.

Note, that I have included tag 460 to identify the Product as Currency (4). This is pretty basic stuff really, if you come from the cash equities or fixed income world.

If you were to trade FX on streaming quotes using FIX4.4 you would use the QuoteResponse message (35=AJ) - you could in principle also still use the FIX4.2 syntax described above. The advantage of using this syntax is, that apart from not being confused whether you were placing an order or making a trade is, that you are able to unsubscribe to a quote stream. The tag QuoteRespType (694) should be set to "1" if you want to Hit or Lift the quote and to "6" if you want to Pass on it, that is stop the stream.

A QuoteResponse message could look like the following:

[Standard Header]
[Standard Trailer]

As can be seen, then the QuoteResponse message is also slightly more compact that the Order - Single message.