Ir para o conteúdo

Modelo de comunicação

Introdução

A FIX API usa comunicação baseada em sessão. Uma sessão é definida como a comunicação entre duas partes: o iniciador (cliente), a parte que inicia a comunicação, e o aceitador (servidor), a parte que recebe o pedido de conexão do iniciador.

O servidor valida os pedidos do cliente usando a mensagem de Logon.

Protocolo de sessão FIX

Cada sessão mantém mensagens bidirecionais entre o cliente e o servidor cTrader. Uma sessão pode incluir várias conexões físicas e é mantida usando números de sequência.

Cada nova mensagem dentro de uma única sessão recebe um número de sequência único começando em 1 (um). Ambas as partes dependem dos números de sequência para manter uma comunicação ordenada. As mensagens em falta são retransmitidas com um acordo bilateral entre ambas as partes.

Fluxo típico de sessão:

  1. O cliente inicia a sessão com uma mensagem de Logon.
  2. O cliente troca mensagens de aplicação com o servidor.
  3. A sessão termina com uma mensagem de Logout.

Categorias de mensagens do protocolo FIX do cTrader

Conforme definido no Protocolo FIX, o servidor FIX do cTrader usa 2 níveis de dados diferentes: sistema e aplicação.

Note que este é o conjunto mínimo de mensagens necessárias para suportar os fluxos de trabalho necessários e está sujeito a alterações ao longo do tempo à medida que as necessidades de negócio e o padrão FIX evoluem.

Mensagens de sistema (admin)

  • Heartbeat (cliente ↔ cTrader) – usado para verificar o link de comunicação entre as duas partes.
  • Pedido de teste (cliente ↔ cTrader) – usado para testar a saúde do link de comunicação.
  • Logon (cliente → cTrader) – mensagem de autenticação do cliente.
  • Logon (cliente → cTrader) – término normal da sessão.
  • Pedido de reenvio (cliente ↔ cTrader) – pedido para retransmitir certas mensagens de aplicação.
  • Rejeitar (cliente ↔ cTrader) – falha de validação ao nível da sessão.
  • Redefinição de sequência (cliente ↔ cTrader) – em caso de problemas de comunicação, as mensagens em falta são recuperadas ou a sequência é redefinida para ignorar as mensagens em falta.

Mensagens de aplicação

  • Pedido de dados de mercado (cliente → cTrader) – pedido geral de dados de mercado.
  • Atualização incremental de dados de mercado (cliente ← cTrader) – respostas a uma mensagem de pedido de dados de mercado.
  • Nova ordem única (cliente → cTrader) – usado para enviar eletronicamente as ordens a um corretor para execução.
  • Relatório de execução (cliente ← cTrader) – usado para enviar informações sobre o estado da ordem a um cliente FIX, como confirmações, preenchimentos e alterações não solicitadas.
  • Rejeição de mensagem de negócio (cliente ← cTrader) – usado para rejeitar um pedido de cliente FIX por razões não relacionadas com a sessão.

Estrutura da mensagem FIX

Esta secção explica como a mensagem da FIX API é composta, descreve o formato da mensagem FIX e ajuda os utilizadores a entender o conceito de par de etiqueta e valor.

Cada mensagem deve conter 3 partes:

  • Cabeçalho – cada mensagem administrativa ou de aplicação é precedida por um cabeçalho padrão. O cabeçalho identifica o tipo de mensagem, versão FIX, comprimento da mensagem, destino, número de sequência, origem e hora.
  • Corpo – o conteúdo no corpo da mensagem é especificado pelo tipo de mensagem definido no cabeçalho.
  • Rodapé – cada mensagem, administrativa ou de aplicação, é terminada por um rodapé padrão. O rodapé é usado para segregar mensagens e contém a representação de três dígitos do valor CheckSum <10>.

Formato da mensagem FIX

Uma mensagem FIX é uma coleção de campos. Cada campo é um par etiqueta-valor formatado como {tag}={value}. Por exemplo, 54=2, o que significa que o tipo de ordem é venda.

Etiqueta

  • O FIX usa etiquetas predefinidas.
  • Cada etiqueta representa um campo específico.
  • Cada etiqueta tem atribuído um número predefinido.
  • A especificação FIX do cTrader fornece uma lista de campos e números de etiqueta correspondentes.

Valor

  • Os valores representam o valor da etiqueta atribuída a ele.
  • Os valores só podem ser de um dos seguintes tipos de dados: inteiro, ponto flutuante, caractere, hora, data, dados ou string.

Todas as mensagens dentro da FIX API do cTrader começam com 8=FIX.x.y, onde x.y é a versão do Protocolo FIX. No final de cada mensagem deve haver um campo 10=xyz, onde xyz representa a soma de todos os valores binários na mensagem chamada checksum.

O checksum ajuda a identificar quaisquer problemas de transmissão, em particular a perda de pacotes, permitindo que o destinatário saiba se alguma parte da mensagem está em falta.

Se a etiqueta Symbol(55) for usada numa mensagem FIX para o cTrader/cServer, deve especificar o ID de símbolo FIX. Esse valor pode ser diferente entre corretores. Pode encontrar o campo ID de símbolo FIX na aplicação cTrader desse corretor na janela de informações do símbolo.

Exemplo de mensagem

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 # Nome da Tag Valor Descrição
8 BeginString 4.4 Versão FIX
9 BodyLength 102 O comprimento do corpo da mensagem é de 102 caracteres
35 MsgType A O tipo de mensagem é Logon
34 MsgSeqNum 1 O número de sequência da mensagem é 1
49 SenderCompI D broker.1047 ID da parte negociadora, onde "broker" é o BrokerUID único fornecido pelo cTrader e "1047" é o identificador numérico da conta de negociação.
57 TargetSubID TRADE Qualificador de sessão adicional. Os valores possíveis são: "QUOTE","TRADE".
50 SenderSubID QUOTE Valor atribuído usado para identificar o originador específico da mensagem
52 SendingTime 20131129- 15:40:10.276 O horário de transmissão da mensagem é 29 de novembro de 2013 (AAAAMMDD) às 15:40:10 e 276 milissegundos
56 TargetCompID CSERVER O destino da mensagem é CSERVER. É o único valor válido dentro da API FIX do cTrader.
98 EncryptMethod 0 Atualmente, o único valor válido é "0" (zero)= NONE_OTHER (a encriptação não é usada)
108 HeartBtInt 30 Intervalo de heartbeat em segundos. O valor é definido no ficheiro "config.properties" (do lado do cliente) como SERVER.POLLING.INTERVAL'. 30 segundos é o valor de intervalo padrão. Se HeartBtInt for definido como 0, nenhuma mensagem de heartbeat é necessária.
553 Username 1047 O ID numérico do utilizador
554 Password MyPassword1 Palavra-passe do utilizador
10 CheckSum 000 A forma de calcular a soma de verificação é a seguinte: somar cada byte da mensagem até, mas não incluindo, o próprio campo de soma de verificação, depois transformá-lo num número módulo 256 prefixado com "0" para receber um número de três dígitos.