Saltar a contenido

Modelo de comunicación

Introducción

La API FIX utiliza comunicación basada en sesiones. Una sesión se define como la comunicación entre dos partes: el iniciador (cliente), la parte que inicia la comunicación, y el aceptador (servidor), la parte que recibe la solicitud de conexión del iniciador.

El servidor valida las solicitudes del cliente utilizando el mensaje de inicio de sesión.

Protocolo de sesión FIX

Cada sesión mantiene mensajes bidireccionales entre el cliente y el servidor cTrader. Una sesión puede incluir múltiples conexiones físicas y se mantiene utilizando números de secuencia.

Cada nuevo mensaje dentro de una sola sesión recibe un número de secuencia único comenzando desde 1 (uno). Ambas partes confían en los números de secuencia para mantener una comunicación ordenada. Los mensajes faltantes se retransmiten con un acuerdo bilateral entre ambas partes.

Flujo típico de sesión:

  1. El cliente inicia la sesión con un mensaje de inicio de sesión.
  2. El cliente intercambia mensajes de aplicación con el servidor.
  3. La sesión finaliza con un mensaje de cierre de sesión.

Categorías de mensajes del protocolo FIX de cTrader

Según lo definido en el protocolo FIX, el servidor FIX de cTrader utiliza 2 niveles de datos diferentes: sistema y aplicación.

Tenga en cuenta que este es el conjunto mínimo de mensajes necesarios para admitir los flujos de trabajo necesarios y está sujeto a cambios con el tiempo a medida que evolucionan tanto las necesidades comerciales como el estándar FIX.

Mensajes del sistema (admin)

  • Latido (cliente ↔ cTrader) – se utiliza para verificar el enlace de comunicación entre dos partes.
  • Solicitud de prueba (cliente ↔ cTrader) – se utiliza para probar el estado del enlace de comunicación.
  • Inicio de sesión (cliente → cTrader) – mensaje de autenticación del cliente.
  • Cierre de sesión (cliente → cTrader) – terminación normal de la sesión.
  • Solicitud de reenvío (cliente ↔ cTrader) – solicitud para retransmitir ciertos mensajes de aplicación.
  • Rechazo (cliente ↔ cTrader) – fallo de validación a nivel de sesión.
  • Restablecimiento de secuencia (cliente ↔ cTrader) – en caso de problemas de comunicación, los mensajes faltantes se recuperan o la secuencia se restablece para ignorar los mensajes faltantes.

Mensajes de aplicación

  • Solicitud de datos de mercado (cliente → cTrader) – solicitud general de datos de mercado.
  • Actualización incremental de datos de mercado (cliente ← cTrader) – respuestas a un mensaje de solicitud de datos de mercado.
  • Nueva orden individual (cliente → cTrader) – se utiliza para enviar electrónicamente las órdenes a un bróker para su ejecución.
  • Informe de ejecución (cliente ← cTrader) – se utiliza para enviar información sobre el estado de la orden a un cliente FIX, como confirmaciones, ejecuciones y cambios no solicitados.
  • Rechazo de mensaje de negocio (cliente ← cTrader) – se utiliza para rechazar una solicitud de cliente FIX por razones no relacionadas con la sesión.

Estructura del mensaje FIX

Esta sección explica cómo se compone el mensaje de la API FIX, describe el formato del mensaje FIX y ayuda a los usuarios a comprender el concepto de par de etiqueta y valor.

Cada mensaje debe contener 3 partes:

  • Encabezado – cada mensaje administrativo o de aplicación va precedido de un encabezado estándar. El encabezado identifica el tipo de mensaje, la versión FIX, la longitud del mensaje, el destino, el número de secuencia, el origen y la hora.
  • Cuerpo – el contenido en el cuerpo del mensaje se especifica según el tipo de mensaje definido en el encabezado.
  • Pie de página – cada mensaje, administrativo o de aplicación, termina con un pie de página estándar. El pie de página se utiliza para segregar mensajes y contiene la representación de tres dígitos del valor CheckSum <10>.

Formato del mensaje FIX

Un mensaje FIX es una colección de campos. Cada campo es un par de etiqueta-valor con el formato {tag}={value}. Por ejemplo, 54=2, lo que significa que el tipo de orden es venta.

Etiqueta

  • FIX utiliza etiquetas predefinidas.
  • Cada etiqueta representa un campo específico.
  • A cada etiqueta se le asigna un número predefinido.
  • La especificación FIX de cTrader proporciona una lista de campos y los números de etiqueta correspondientes.

Valor

  • Los valores representan el valor de la etiqueta asignada a él.
  • Los valores solo pueden ser de uno de los siguientes tipos de datos: entero, punto flotante, carácter, hora, fecha, datos o cadena.

Todos los mensajes dentro de la API FIX de cTrader comienzan con 8=FIX.x.y, donde x.y es la versión del protocolo FIX. Al final de cada mensaje debe haber un campo 10=xyz, donde xyz representa la suma de todos los valores binarios en el mensaje llamada suma de comprobación.

La suma de comprobación ayuda a identificar cualquier problema de transmisión, en particular la pérdida de paquetes, permitiendo que el destinatario sepa si falta alguna parte del mensaje.

Si se utiliza la etiqueta Symbol(55) en un mensaje FIX para cTrader/cServer, debe especificar el ID de símbolo FIX. Ese valor puede ser diferente entre brókeres. Puede encontrar el campo ID de símbolo FIX en la aplicación cTrader de ese bróker en la ventana de información del símbolo.

Ejemplo de mensaje

8=FIX.4.4|9=126|35=A|34=1|49=theBroker.12345|57=TRADE|50=any_string|52=20170117-08:03:04|56=CSERVER|98=0|108=30|553=12345|554=passw0rd!|10=131|
Tag # Nombre de la etiqueta Valor Descripción
8 BeginString 4.4 Versión FIX
9 BodyLength 102 La longitud del cuerpo del mensaje es de 102 caracteres
35 MsgType A El tipo de mensaje es Logon
34 MsgSeqNum 1 El número de secuencia del mensaje es 1
49 SenderCompI D broker.1047 ID de la parte comercial, donde "broker" es el BrokerUID único proporcionado por cTrader y "1047" es el identificador numérico de la cuenta de operaciones.
57 TargetSubID TRADE Calificador de sesión adicional. Los valores posibles son: "QUOTE","TRADE".
50 SenderSubID QUOTE Valor asignado utilizado para identificar el originador específico del mensaje
52 SendingTime 20131129- 15:40:10.276 La hora de transmisión del mensaje es el 29 de noviembre de 2013 (AAAAMMDD) a las 15:40:10 y 276 milisegundos
56 TargetCompID CSERVER El destino del mensaje es CSERVER. Es el único valor válido dentro de la API FIX de cTrader.
98 EncryptMethod 0 Actualmente, el único valor válido es "0" (cero)= NONE_OTHER (no se utiliza encriptación)
108 HeartBtInt 30 Intervalo de latido en segundos. El valor se establece en el archivo "config.properties" (del lado del cliente) como SERVER.POLLING.INTERVAL'. 30 segundos es el valor de intervalo predeterminado. Si HeartBtInt se establece en 0, no se requiere ningún mensaje de latido.
553 Username 1047 El ID de usuario numérico
554 Password MyPassword1 Contraseña del usuario
10 CheckSum 000 La forma de calcular la suma de comprobación es la siguiente: sumar cada byte del mensaje hasta, pero sin incluir, el campo de suma de comprobación en sí, luego transformarlo en un número módulo 256 prefijado con "0" para recibir un número de tres dígitos.