El protocolo FIX (Financial Information eXchange) es (valga la redundancia) un protocolo de comunicación electrónica iniciado en 1992 para el intercambio de información financiera. Este protocolo es implementado, entre otros tipos de entidades financieras, por una gran cantidad de mercados del mundo.
Entre estos mercados se encuentran 3 mercados argentinos @matba_rofex, @BYMAOficial y @MAE_ARG, ya que implementan este protocolo como principal vía de interacción con sus plataformas de negociación (matching engines).
Desde TradeSpark, resolvimos la conectividad de nuestra plataforma de trading algorítmico ArQuants con estos 3 mercados, y actualmente estamos llevando adelante los desarrollos para conectarnos a Interactive Brokers y con los mercados de la región que componen el MILA, comenzando por los mercados de Colombia, Set-Icap y BVC.
Todo ellos implementan el protocolo FIX, y justamente uno de los principales desafíos que tuvimos que resolver es la de poder establecer conexiones vía FIX con las plazas de negociación.
En este artículo vamos a ver específicamente qué aspecto tiene un mensaje FIX, y como una acción de mercado como puede ser el envío de una orden de compra o venta se traduce en un mensaje FIX para enviarse al mercado.
El elegido por los mercados
FIX es el protocolo utilizado por las plataformas de negociación de los mercados para facilitar la operatoria en tiempo real, lo que implica tanto, el ruteo de órdenes (order routing) como la divulgación de precios (market data). En los mercados del mundo es un estándar y existe una comunidad que se encarga de mantenerlo y extenderlo, ampliando sus capacidades. (Fix Trading Comunnity – https://www.fixtrading.org/)
En un mercado que implementa el protocolo FIX, cada orden enviada, arriba a las plataformas de negociación cómo un mensaje FIX. Al ser recibida se genera una respuesta por parte del mercado y eventualmente una nueva conformación de precios (market data) que es divulgada también como un mensaje FIX.
Pero, ¿qué es un mensaje FIX?
Es una secuencia de claves (tags), cada una seguida de un valor, que tanto un mercado como sus participantes saben interpretar para llevar adelante la operatoria.
Veamos un ejemplo paso a paso (o tag a tag) de cómo una orden enviada al mercado es expresada como un mensaje FIX.
Para enviar una orden al mercado se debe construir un mensaje FIX del tipo NewOrder.
Se especifica indicando en el tag MessageType (35) el valor D (NewOrder).
Para indicar si es compra o venta, se usa el tag Side (54). 1 indica compra y 2 venta.
Mensaje: 35=D|54=1
Para indicar la especie que se está operando es necesario asignar un valor al tag Symbol (55). Por ejemplo AY24 También debe indicarse la moneda de negociación mediante el tag
Currency (15). En este caso ARS.
Mensaje: 35=D|54=1|55=AY24|15=ARS
Para indicar el plazo en el que se va a realizar la operación se debe completar el tag SettlType (63). 1 es contado inmediato, 2 es 24hs y 3 es 48hs. Para el ejemplo usaremos 48hs.
Mensaje: 35=D|54=1|55=AY24|15=ARS|63=3
También debe indicarse el tipo de orden en el tag OrdType (40), si bien el protocolo FIX especifica varios, los más conocidos son Market (1) y Limit (2). Para el ejemplo usaremos una orden Limit.
Mensaje: 35=D|54=1|55=AY24|15=ARS|63=3|40=2
Al ser una orden Limit, se indica el precio límite a operar en el tag Price (44). También se indica el tamaño de la orden en el tag Size (38)
Mensaje: 35=D|54=1|55=AY24|15=ARS|63=3|40=2|44=2900|38=100
Además debe indicarse el tipo de activo que se está operando mediante el tag SecurityType (167). En este ejemplo AY24 es un bono porque lo que corresponde enviar el valor GO (General Obligations). Si estuviésemos enviando una orden para una acción, el valor sería CS (Common Stock)
Mensaje: 35=D|54=1|55=AY24|15=ARS|63=3|40=2|44=2900|38=100|167=GO
Se indica el tiempo de vida de la orden mediante el tag TimeInForce (59). Existen alternativas como indicar una fecha y hora de vencimiento (Good Till Date o GTD valor 6), o que sea válida hasta que se indique que se cancele (Good Till Cancel o GTC valor 1), entre otras.
Para el ejemplo indicaremos que sea válida hasta el final del día (DAY valor 0). Al alcanzarse el tiempo de vencimiento de la orden, si corresponde, será dada de baja por el mercado automáticamente.
Mensaje: 35=D|54=1|55=AY24|15=ARS|63=3|40=2|44=2900|38=100|167=GO|59=0
El tag Account (1) permite definir la cuenta de mercado que se utilizará para la operación. Para el ejemplo usemos la 1234
Mensaje: 35=D|54=1|55=AY24|15=ARS|63=3|40=2|44=2900|38=100|167=GO|59=0|1=1234
Finalmente así luce una orden Limit DAY de compra de 100 AY24 en pesos a $2900 en 48hs para la cuenta 1234 cuando es recibida por el mercado como un mensaje FIX. Al mensaje se le agregan algunos tags más (información de la sesión mantenida con el mercado) como el número de secuencia del mensaje (34), Quien es quien envía (49), quien es el receptor (56), el horario de envío (52), etc.
8=FIXT.1.1|9=229|35=D|34=6389|49=client|52=20200218-19:45:57.843|56=server|1=1234|11=Sqeidnab2v|15=ARS|38=100|40=2|44=2900|54=1|55=AY24|59=0|60=20200218-19:45:57.773|63=3|167=GO|10=153
Que tiene que ver ese mensaje con la orden que envió a través de la terminal que uso diariamente?
Todo, ya que la misma se termina enviando al mercado como un mensaje FIX con estas características. Es el software el que se encarga de crear este mensaje valiéndose de alguna biblioteca FIX.
En otro artículo podremos analizar la modificación y cancelación de una orden, reportes de ejecuciones de órdenes enviados por el mercado y divulgación de información de precios.
Una de las principales cuestiones que tuvimos que resolver es la de poder conectarnos vía protocolo FIX con los mercados.
Si bien FIX es un estándar, cada mercado hace su propia implementación intentando siempre mantenerse lo más apegado posible al estándar, pero también satisfaciendo sus propias necesidades de negocio.
Para mayor información de cómo enviar y recibir diferentes tipos de mensajes FIX a los mercados, pueden acceder a las ROE’s (Rules of Engagement) FIX de @matba_rofex y @BYMAOficial
¡Hasta acá llegamos! La próxima será sobre otros tipos de mensajes FIX, QuickFix (una librería de software para el desarrollo de aplicaciones que implementan protocolo FIX), y otros temas relacionados. Espero que les resulte útil!

Ingeniero de sistemas de la Universidad de Buenos Aires y Co founder de TradeSpark.