El protocolo Financial Information eXchange ( FIX ) es un protocolo de comunicaciones electrónicas creado en 1992 para el intercambio internacional en tiempo real de información relacionada con transacciones y mercados de valores . Con billones de dólares negociados anualmente solo en el NASDAQ , las entidades de servicios financieros están utilizando el acceso directo al mercado (DMA) para aumentar la velocidad de acceso a los mercados financieros. Gestionar la entrega de aplicaciones de negociación y mantener una baja latencia requiere cada vez más un conocimiento profundo del protocolo FIX.
Historia
La especificación del protocolo FIX fue creada originalmente en 1992 por Robert "Bob" Lamoureux y Chris Morstatt para permitir la comunicación electrónica de datos de negociación de acciones entre Fidelity Investments y Salomon Brothers . Inicialmente, FIX se centraba en la información entre los intermediarios y sus clientes institucionales. En aquel entonces, esta información se comunicaba verbalmente por teléfono. Fidelity se percató de que la información de sus intermediarios podía enviarse al operador equivocado o simplemente perderse al colgar el teléfono. Quería que dichas comunicaciones se sustituyeran por datos legibles por máquina que pudieran compartirse entre los operadores, analizarse, procesarse y almacenarse. Por ejemplo, los intermediarios llaman para indicar su interés en comprar o vender un bloque de acciones. La iniciativa FIX creó nuevos mensajes, como el de indicación de interés.
Según la comunidad de negociación FIX, FIX se ha convertido en el estándar de mensajería de facto para la comunicación previa y posterior a la negociación en los mercados de renta variable globales, y se está expandiendo al espacio posterior a la negociación para admitir el procesamiento directo , además de continuar expandiéndose a los mercados de divisas , renta fija y derivados . [ 1 ]
Comunidad de comercio FIX
La comunidad de negociación FIX es un organismo de normalización sin ánimo de lucro, impulsado por la industria, cuya misión es abordar los problemas comerciales y regulatorios que afectan a la negociación de múltiples activos en los mercados financieros globales mediante un mayor uso de estándares, incluido el lenguaje de mensajería del Protocolo FIX, lo que proporciona eficiencia operativa, mayor transparencia y reducción de costes y riesgos para todos los participantes del mercado. [ 2 ]
Usuarios
FIX es ampliamente utilizado tanto por los compradores (instituciones) como por los vendedores (corredores/agentes) de los mercados financieros . Entre sus usuarios se encuentran fondos de inversión , bancos de inversión , corredores, bolsas de valores y ECN .
FIX se ha convertido en el protocolo electrónico estándar para las comunicaciones previas a la negociación y la ejecución de operaciones. Si bien se utiliza principalmente para transacciones de renta variable en el área de operaciones , también permite el uso de derivados de bonos y operaciones de divisas. Podría decirse que, mientras que SWIFT es el estándar para la mensajería de back office , FIX lo es para la mensajería de front office. Sin embargo, actualmente, los miembros de FIX Protocol Ltd. están extendiendo el uso de FIX a la asignación de bloques de operaciones y otras fases del proceso de negociación, en todos los mercados y para prácticamente todas las clases de activos.
Especificaciones técnicas
Originalmente, el estándar FIX era monolítico, incluyendo la semántica de la capa de aplicación, la codificación de mensajes y la capa de sesión en una única especificación técnica. Permaneció monolítico hasta la versión 4.2 de FIX. [ 3 ] Posteriormente, las especificaciones de codificación de mensajes y de la capa de sesión comenzaron a dividirse en documentos separados y, finalmente, FIX evolucionó hasta convertirse en una familia de estándares técnicos relacionados. [ 4 ]
Codificaciones de mensajes
La codificación de mensajes, denominada capa de presentación en el modelo de interconexión de sistemas abiertos ( modelo OSI ), es responsable del formato de transmisión de los mensajes.
Codificación de valor de etiqueta (FIX clásico)
La codificación de mensajes FIX original se conoce como codificación tagvalue. Cada campo consta de una etiqueta numérica única y un valor. La etiqueta identifica el campo semánticamente. Por lo tanto, los mensajes son autodescriptivos. La codificación tagvalue se basa en caracteres y utiliza códigos ASCII .
Formato de mensaje de valor de etiqueta CORREGIR
Un mensaje se compone de un encabezado, un cuerpo y un pie de página. Los campos del mensaje están separados por el carácter de inicio de encabezado (SOH) ( ASCII 0x01).
Hasta FIX.4.4, el encabezado contiene tres campos: 8 ( BeginString), 9 ( BodyLength) y 35 ( MsgType).
Desde FIXT.1.1 / FIX.5.0, el encabezado contiene cinco o seis campos: 8 ( BeginString), 9 ( BodyLength), 35 ( MsgType), 49 ( SenderCompID), 56 ( TargetCompID) y el opcional 1128 ( ApplVerID).
El contenido del cuerpo del mensaje está definido por el tipo de mensaje (35 MsgType) en el encabezado.
El tráiler contiene el último campo del mensaje, 10 ( Checksum), siempre expresado como un número de tres dígitos (por ejemplo, 10=002).
Ejemplo de un mensaje FIX, Informe de ejecución ( 35=8), donde el carácter de barra vertical ( |) representa el carácter SOH:
8=FIX.4.2 | 9=178 | 35=8 | 49=PHLX | 56=PERS | 52=20071123-05:30:00.000 | 11=ATOMNOCCC9990900 | 20=3 | 150=E | 39=E | 55=MSFT | 167=CS | 54=1 | 38=15 | 40=2 | 44=15 | 58=PHLX EQUITY TESTING | 59=0 | 47=C | 32=0 | 31=0 | 151=15 | 14=0 | 6=0 | 10=128 |
Cuerpo
Los mensajes FIX se componen de varios campos; cada campo tiene un par de etiquetas y valores separados del siguiente campo por el delimitador SOH (0x01). La etiqueta es un número entero que indica el significado del campo. El valor es una matriz de bytes que contiene un significado específico para la etiqueta en cuestión (por ejemplo, la etiqueta 48 es SecurityID, una cadena que identifica la seguridad; la etiqueta 22 es IDSource, un número entero que indica la clase de identificador que se está utilizando). Los valores pueden estar en texto plano o codificados como binario puro (en cuyo caso el valor va precedido de un campo de longitud). El protocolo FIX define significados para la mayoría de las etiquetas, pero reserva un rango de etiquetas para uso privado entre partes que dan su consentimiento.
El protocolo FIX también define conjuntos de campos que componen un mensaje; dentro de cada conjunto, algunos campos son obligatorios y otros opcionales. El orden de los campos dentro del mensaje generalmente no es importante; sin embargo, los grupos repetitivos van precedidos de un contador y los campos cifrados de su longitud. El mensaje se divide en tres secciones distintas: la cabecera, el cuerpo y la cola. Los campos deben permanecer dentro de la sección correcta y, dentro de cada sección, la posición puede ser importante, ya que los campos pueden actuar como delimitadores que impiden que un mensaje se solape con el siguiente. El último campo de cualquier mensaje FIX es la etiqueta 10 ( suma de verificación ).
Existen dos grupos principales de mensajes: de administración y de aplicación. Los mensajes de administración gestionan los aspectos básicos de una sesión FIX. Permiten iniciar y finalizar una sesión, así como recuperar los mensajes perdidos. Los mensajes de aplicación se encargan del envío y la recepción de información relacionada con las operaciones, como una solicitud de orden o información sobre el estado actual y la posterior ejecución de dicha orden.
longitud del cuerpo
La longitud del cuerpo es el número de caracteres que comienza en la etiqueta 35 (incluida) hasta la etiqueta 10 (excluida), incluyendo los delimitadores SOH finales. El ejemplo siguiente (mostrado con los delimitadores SOH como '|') tiene una longitud de cuerpo de 65:
8=FIX.4.2|9=65|35=A|49=SERVIDOR|56=CLIENTE|34=177|52=20090107-18:15:16|98=0|108=30|10=062| ^ 5 + 10 + 10 + 7 + 21 + 5 + 7 ^ = 65
Suma de verificación
La suma de verificación de un mensaje FIX siempre es el último campo del mensaje, con una etiqueta 10y un valor de 3 caracteres. [ 5 ] Se obtiene sumando el valor ASCII de todos los caracteres del mensaje (excepto el propio campo de suma de verificación) y luego aplicando el módulo 256. [ 6 ] Por ejemplo, en el mensaje anterior, la suma de todos los valores ASCII (incluidos los caracteres SOH con valor ASCII 1) da como resultado 4158. Al realizar la operación de módulo se obtiene el valor 62. Dado que la suma de verificación se compone de tres caracteres, esto resulta en 10=062.
FIXML
FIXML [ 7 ] es un esquema XML para mensajes FIX. Es semánticamente equivalente a los mensajes codificados con tagvalue, pero aprovecha la tecnología de análisis XML. FIXML se usa comúnmente en aplicaciones de back-office y compensación, más que en operaciones bursátiles.
Codificación binaria simple (SBE)
La codificación binaria simple [ 8 ] define un formato de transmisión utilizando tipos de datos primitivos propios de los sistemas informáticos. Por lo tanto, la codificación y decodificación de mensajes presenta una latencia mucho menor que los protocolos basados en caracteres, ya que no se requiere traducción para convertir los datos a un formato utilizable por las computadoras. Además de las ventajas en cuanto a latencia, el rendimiento es más determinista, dado que los mensajes SBE están limitados por plantillas y se prefieren elementos de datos de longitud fija. Otra consecuencia es que los campos suelen estar en una posición fija, de modo que los filtros y enrutadores de mensajes no necesitan analizar el mensaje completo para acceder a los campos clave.
SBE fue desarrollado por el Grupo de Trabajo de Alto Rendimiento de FIX para dar soporte a operaciones de alto rendimiento. Se consideró que la codificación Tagvalue ya no era adecuada, puesto que se basa en caracteres en lugar de binarios, y sus campos y mensajes de longitud variable dan como resultado un rendimiento no determinista.
A diferencia de tagvalue y FIXML, un mensaje SBE no es autodescriptivo. Solo se envían datos por la red con una cabecera mínima para identificar la plantilla que controla el mensaje. Los metadatos que describen la estructura del mensaje se intercambian fuera de banda entre los participantes.
La comunidad de negociación FIX publica un esquema XML para los esquemas de mensajes SBE. Un esquema de mensaje puede contener cualquier número de plantillas de mensaje. Una plantilla describe los campos que componen un mensaje. Además, un esquema proporciona una lista de tipos de datos simples y compuestos que pueden ser reutilizados por cualquier número de campos.
Desde una perspectiva práctica, asumiendo una implementación en C/C++ y ajustando el orden de bytes : la mayoría de los tipos no compuestos en el mensaje se asignan directamente al mismo tipo en el lenguaje. Por ejemplo, un entero de 32 bits se asigna a uint32_t, las cadenas fijas se asignan a const char *, los números de punto flotante se asignan a floaty así sucesivamente. Se puede generar un C/C++ structa partir de la definición del esquema. Luego, dado un puntero a un búfer de mensajes, acceder a los campos no compuestos del mensaje equivale a convertirlo a un puntero a una estructura y acceder directamente a los miembros de la estructura.
/* Estructura generada a partir del esquema */ struct Message { ... uint32_t qty ; ... const char * symbol ; ... };void consume_message ( void * incoming_message ) { const struct Message * msg = ( const struct Message * ) incoming_message ; printf ( "Intercambiado %u de %s \n " , msg -> qty , msg -> symbol ); ... }Otras codificaciones FIX
La comunidad de comercio FIX también ha desarrollado asignaciones estándar entre FIX y otros protocolos de mensajería, entre los que se incluyen:
Protocolos de sesión
La capa de sesión es responsable del intercambio de mensajes, incluidos los mecanismos de recuperación de puntos de control.
Transporte FIX (FIXT)
El protocolo de sesión FIX original no tenía nombre propio, ya que formaba parte de una especificación monolítica que abarcaba tanto la semántica de la capa de aplicación como la codificación de mensajes. Sin embargo, a partir de la versión 5.0 de FIX, la capa de sesión se separó como una especificación independiente con la introducción de FIXT. [ 9 ] FIXT era prácticamente igual que la capa de sesión original sin nombre de la versión 4.x, pero ofrecía una innovación significativa: proporcionaba un mecanismo para combinar versiones de la capa de aplicación FIX sobre una versión de sesión común. La versión actual de FIXT es la 1.1.
En teoría, FIXT es independiente del protocolo de transporte. Sin embargo, suele emplearse sobre el Protocolo de Control de Transmisión (TCP).
FIXT es un protocolo punto a punto . Garantiza la entrega de mensajes en ambas direcciones. Los mensajes enviados en cada dirección incluyen un número de secuencia en la cabecera. Si se produce un fallo de comunicación, un interlocutor puede solicitar la retransmisión de los mensajes perdidos. La entrega de mensajes se mantiene incluso en caso de desconexión y posterior restablecimiento de la sesión.
Para implementar el establecimiento de sesiones y la entrega garantizada, FIXT y FIX 4.x clásico definen estos tipos de mensajes de sesión:
- Latido del corazón
- Solicitud de prueba
- Reenviar solicitud
- Rechazar
- Reinicio de secuencia
- Cerrar sesión
- Iniciar sesión
- XMLnonFIX
Capa de sesión de rendimiento FIX (FIXP)
FIXP [ 10 ] fue desarrollado por el Grupo de Trabajo de Alto Rendimiento de FIX [ 11 ] para satisfacer las necesidades de la negociación de alto rendimiento. La necesidad principal es la codificación y decodificación de mensajes de baja latencia y el control sobre las garantías de entrega de mensajes.
Para garantizar una baja latencia, se admiten codificaciones de mensajes binarios tanto para la capa de sesión como para los mensajes de la aplicación. El formato de transmisión real se abstrae en la especificación FIXP, por lo que los usuarios pueden seleccionar la codificación FIX que prefieran, siempre que los participantes acuerden un protocolo. En las primeras fases de desarrollo se utilizó la codificación binaria simple.
FIXP cubre casos de uso tanto de punto a punto como de multidifusión con primitivas comunes.
Cuando se establece una sesión punto a punto, los participantes negocian garantías de entrega entre las siguientes opciones:
- Recuperable: entrega de mensajes una sola vez. Si se detectan interrupciones, los mensajes perdidos pueden recuperarse mediante retransmisión.
- Idempotente: entrega como máximo una vez. Si se detectan interrupciones, se notifica al remitente, pero la recuperación queda bajo el control de la aplicación, si es que se realiza.
- Sin secuenciar: no ofrece garantías de entrega. Esta opción es apropiada si las garantías no son necesarias o si la recuperación se proporciona en la capa de aplicación o a través de un canal de comunicación diferente .
- Nota: No se deben enviar mensajes de la aplicación en una sola dirección de la sesión.
Las garantías de entrega pueden ser asimétricas. Por ejemplo, un operador puede introducir órdenes a través de un flujo idempotente, mientras que las ejecuciones se devuelven a través de un flujo recuperable. En mercados volátiles, la demora inherente a la retransmisión suele ser indeseable, lo que conlleva la pérdida de oportunidades o malas operaciones.
Representación esquemática del sistema FIX
A continuación se muestra un diagrama de cómo se ve la mensajería de FIX entre el comprador/cliente y el vendedor/proveedor. [ 12 ]
![]()
Últimos avances en el protocolo FIX
La última versión del protocolo FIX implementa la "independencia del transporte" al permitir que se transmitan múltiples versiones de mensajes de la aplicación a través de una única versión de la sesión FIX independiente del transporte (FIXT.1.1 y superior).
La independencia del transporte también allana el camino para que se utilicen protocolos de transporte como las colas de mensajes y los servicios web en lugar del tradicional FIX sobre TCP.
FIX ahora admite el comercio algorítmico mediante el uso del lenguaje de definición de comercio algorítmico de FIX, FIXatdl .
En 2005, la comunidad de negociación FIX lanzó el protocolo FAST , cuyas siglas significan FIX adaptado para transmisión en tiempo real. FAST es un protocolo binario que se utiliza principalmente para enviar datos de mercado multicast a través de conexiones UDP.
Además, en 2020, la comunidad de negociación FIX lanzó una nueva codificación binaria FIX, basada en la codificación binaria simple (SBE), destinada a complementar la codificación FAST existente. [ 13 ]
Véase también
- FIXatdl
- SWIFT: Tipos de mensajes
- Lista de protocolos de negociación electrónica
Notas
- ↑ "¿Qué es FIX?" . La Organización del Protocolo FIX. 8 de junio de 2009. Archivado del original el 9 de septiembre de 2004.
- ↑ "Descripción general • Comunidad de comercio FIX" . Comunidad de comercio FIX . Consultado el 6 de diciembre de 2018 .
- ↑ "Especificación FIX 4.2 con erratas 20010501 • Comunidad de Comercio FIX" . Comunidad de Comercio FIX . Consultado el 5 de diciembre de 2018 .
- ↑ "Estándares FIX • Comunidad de Comercio FIX" . Comunidad de Comercio FIX . Consultado el 5 de diciembre de 2018 .
- ↑ CORRECCIÓN 4.2 : Campo CheckSum <10> | Diccionario de correcciones
- ↑ Apéndice B - Cálculo de suma de verificación | Diccionario FIX
- ↑ "FIXML • Comunidad de Comercio FIX" . Comunidad de Comercio FIX . Consultado el 5 de diciembre de 2018 .
- ↑ "Codificación binaria simple (SBE) • Comunidad de negociación FIX" . Comunidad de negociación FIX . Consultado el 5 de diciembre de 2018 .
- ↑ "FIX Transport (FIXT) • Comunidad de Comercio FIX" . Comunidad de Comercio FIX . Consultado el 5 de diciembre de 2018 .
- ↑ "FIX Performance Session Layer (FIXP) • FIX Trading Community" . FIX Trading Community . Consultado el 5 de diciembre de 2018 .
- ↑ "Inicio – Grupo de trabajo de alto rendimiento" . Comunidad de negociación FIX . Consultado el 5 de diciembre de 2018 .
- ↑ DeMarco, Darren. "¿Explotando el protocolo de intercambio de información financiera (FIX)?" .
- ↑ "Codificación binaria simple (SBE)" . 21 de marzo de 2024.
Enlaces externos
- FIX Protocol Ltd. - este sitio web oficial de la comunidad comercial FIX contiene los estándares FIX.
- Diccionario FIXimate FIX Versiones heredadas de FIX FIX más reciente
- FIXwiki : una wiki dedicada a FIX. Una herramienta de referencia de especificaciones similar a FIXimate, pero al ser una wiki, también permite que los usuarios añadan notas y comentarios.
- Antena B2BITS FIX .NET Core : una implementación de motor FIX .NET de código abierto.
- Esprow FIX Tools : un navegador de diccionario FIX en línea para todas las versiones de FIX, que incluye un analizador de mensajes FIX.
- Diccionario completo del protocolo FIX en Onixs : diccionario contemporáneo rápido y fácil de usar del protocolo FIX (versiones 4.0 , 4.1 , 4.2 , 4.3 , 4.4 , 5.0 , 5.0.SP1 , 5.0.SP2 , FIXT1.1 ).
- FIXSIM - Analizador de mensajes FIX, mensajes de ejemplo, soporte para pruebas.
- Recurso en línea que incluye notas de uso sobre Rapid Addition - Recurso FIX en línea que incluye notas detalladas sobre su uso (versiones 4.0, 4.2, 5.0 SP2).
- FIXGlobal : Revista global gratuita sobre operaciones bursátiles y publicación oficial del Protocolo FIX.
- ¿Qué es el protocolo FIX? - Descripción general no técnica del protocolo FIX.
- Un decodificador FIX sencillo escrito en un script de shell con sed que se ejecuta rápidamente de forma nativa en Unix/Linux, necesita actualizarse a la última versión de FIX.
- Fix Parser : un analizador de mensajes FIX en línea
- Decodificador de mensajes FIX : impulsado por fix-message, un componente web de código abierto para decodificar mensajes FIX.
- Estándares de enrutamiento financiero
- Datos de mercado
- metadatos financieros
- protocolos de red
- protocolos de la capa de aplicación
- Estándares basados en XML para la industria financiera
- Software financiero
- Sistemas de comercio electrónico
- Mercados financieros