Este protocolo ha sido adoptado por numerosos mercados financieros en todo el mundo como Interactive Brokers y Stonex, incluyendo tres mercados argentinos: Matba-Rofex, ByMAy MAE. Estos mercados utilizan el protocolo FIX como la principal vía de interacción con sus plataformas de negociación, conocidas como “matching engines”.
En TradeSpark, nos hemos dedicado a resolver la conectividad de nuestra plataforma de trading algorítmico, ArQuants, con estos tres mercados argentinos. Actualmente, contamos con conexiones con Interactive Brokers y Stonex para operar internacionalmente, además continuamos desarrollando tecnología para estar conectados con otros mercados como los mercados de Colombia (Set-Icap y BVC). Todos estos mercados implementan el protocolo FIX, y uno de nuestros principales desafíos ha sido establecer conexiones vía FIX con estas plazas de negociación.
En este artículo, nos enfocaremos en explorar cómo se estructura un mensaje FIX y cómo una acción de mercado, como el envío de una orden de compra o venta, se traduce en un mensaje FIX que se envía al mercado.
El elegido por los mercados: La importancia de FIX en las plataformas de negociación
FIX se ha convertido en el protocolo preferido por las plataformas de negociación de los mercados financieros, ya que facilita tanto el ruteo de órdenes (order routing) como la divulgación de precios (market data) en tiempo real. Este protocolo ha sido ampliamente adoptado a nivel global y cuenta con una comunidad dedicada a mantener y expandir sus capacidades, conocida como Fix Trading Community.
En un mercado que implementa el protocolo FIX, cada orden enviada se convierte en un mensaje FIX al llegar a las plataformas de negociación. Estas plataformas generan una respuesta y, en ocasiones, actualizan la información de precios (market data), la cual también se divulga como un mensaje FIX.
Pero, ¿qué es exactamente un mensaje FIX?
Un mensaje FIX es una secuencia de claves (tags), cada una seguida de un valor, que tanto el mercado como sus participantes comprenden y utilizan para llevar a cabo la operatoria financiera.
Veamos un ejemplo paso a paso de cómo una orden enviada al mercado se expresa como un mensaje FIX:
- Se construye un mensaje FIX del tipo “NewOrder”, indicando el valor “D” (NewOrder) en el tag “MessageType (35)”.
Mensaje: 35=D|54=1
- Se utiliza el tag “Side (54)” para indicar si la orden es de compra (1) o venta (2).
Mensaje: 35=D|54=1|55=AL30|15=ARS
- Se asigna un valor al tag “Symbol (55)” para indicar la especie que se está operando, como “AL30”. Además, se debe indicar la moneda de negociación mediante el tag “Currency (15)”, en este caso, ARS.
Mensaje: 35=D|54=1|55=AL30|15=ARS|63=3
- Se completa el tag “SettlType (63)” para indicar el plazo en el que se realizará la operación. Por ejemplo, se utiliza el valor 3 para indicar un plazo de 48 horas.
Mensaje: 35=D|54=1|55=AL30|15=ARS|63=3|40=2
- En el tag “OrdType (40)” se especifica el tipo de orden, como “Market” (1) o “Limit” (2). En este caso, se utiliza una orden de tipo “Limit”.
Mensaje: 35=D|54=1|55=AL30|15=ARS|63=3|40=2|44=2900|38=100
- Para una orden de tipo “Limit”, se indica el precio límite de operación en el tag “Price (44)”. También se especifica el tamaño de la orden en el tag “Size (38)”.
Mensaje: 35=D|54=1|55=AL30|15=ARS|63=3|40=2|44=2900|38=100|167=GO
- El tag “SecurityType (167)” se utiliza para indicar el tipo de activo que se está operando. Por ejemplo, en el caso de Al30 (un bono), se utiliza el valor “GO” (General Obligations). Para una orden de una acción, se utilizaría el valor “CS” (Common Stock).
Mensaje: 35=D|54=1|55=Al30|15=ARS|63=3|40=2|44=2900|38=100|167=GO
- El tag “TimeInForce (59)” permite especificar el tiempo de vigencia de la orden. Por ejemplo, el valor “0” indica que la orden es válida hasta el final del día (“DAY”).
Mensaje: 35=D|54=1|55=Al30|15=ARS|63=3|40=2|44=2900|38=100|167=GO|59=0
- El tag “Account (1)” se utiliza para definir la cuenta de mercado que se utilizará para la operación. En este ejemplo, se utiliza la cuenta “1234”.
Mensaje: 35=D|54=1|55=Al30|15=ARS|63=3|40=2|44=2900|38=100|167=GO|59=0|1=1234
Finalmente, una orden de compra limitada de 100 Al30 en pesos a $9077 con un plazo de 48 horas y para la cuenta 1234 se envía al mercado como un mensaje FIX. Este mensaje se enriquece con información adicional, como el número de secuencia del mensaje, quién envía y recibe el mensaje, el horario de envío, entre otros.
Ejemplo de mensaje FIX completo:
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=9077|54=1|55=AL30|59=0|60=20200218-19:45:57.773|63=3|167=GO|10=153
Este mensaje FIX representa la orden enviada a través de la terminal que se utiliza en la operatoria diaria. Es el software el encargado de crear este mensaje utilizando una biblioteca FIX.
En futuros artículos, exploraremos otros aspectos del protocolo FIX, como la modificación y cancelación de órdenes, los informes de ejecución de órdenes enviados por el mercado y la divulgación de información de precios.
Uno de los principales desafíos que enfrentamos fue establecer la conectividad a través del protocolo FIX con los mercados. Aunque FIX es un estándar, cada mercado realiza su propia implementación, tratando de mantenerse lo más cerca posible del estándar pero también satisfaciendo sus necesidades comerciales específicas.
¡Hasta aquí hemos llegado! En el próximo artículo, te seguiremos contando todo lo relacionado con este apasionante mundo del trading algorítmico y cómo se integra con los entes del mercado.
Si te interesa saber más sobre como automatizar tu mesa de operaciones