Olá Membros da Comunidade NeoTraderBot!
Hoje vamos falar de um assunto que talvez você ainda não tenha parado para pensar a respeito. A importância de manter o horário do seu sistema operacional adequadamente sincronizado. Mas o que o relógio do meu PC tem a ver com o meu trading? Muita coisa…vamos ver!
Vamos supor que eu esteja operando um mini-contrato futuro de NASDAQ (NQ) lá na bolsa de Chicago, a famosa CME. É um ativo que em média bem é mais volátil que um mini-contrato de S&P 500 (ES). Não é raro vermos em alguns momentos uma excursão 20 pontos em menos de 1 segundo, o que representa US$ 400.
Agora pensemos sobre o caminho que os dados fazem desde o momento em que uma negociação é registrada na bolsa de Chicago até chegar na tela da sua plataforma no seu PC aqui no Brasil ou lá na VPS que você aluga. O dado é marcado com o timestamp dentro da CME com precisão de microssegundos (talvez daqui a pouco estejamos falando de nanosegundos).
A CME gasta muito dinheiro para garantir que está marcando o horário correto das negociações porque isso é muito importante! Existem diferentes protocolos para garantir que os servidores de uma rede possuem o mesmo horário. Um dos protocolos é o NTP (Network Time Protocol). Esse protocolo organiza um sistema de sincronização mundial, no qual em sua origem há relógios atômicos, em seguida servidores ligados a esses relógios, e depois outros servidores ligados a esses servidores. O projeto Sonar estimou que há hoje em dia aproximadamente 1 milhão e meio de servidores NTPs. O seu sistema operacional tenta sincronizar o horário com um desses servidores NTP. Veja abaixo uma figura exemplificativa da estratificação de servidores de NTP.
Mas voltando, para você ver na sua plataforma um dado de um negócio realizado na CME, um servidor de Market Data recebe essa informação da bolsa e propaga para a sua plataforma pela internet. Isso leva tempo para chegar até o seu PC e depende de um monte de coisa…sua conexão local, a estrutura da sua rede, trafego da internet, etc…Como você poderia saber com quanto tempo de atraso você recebe essa informação? É uma pergunta importante, estamos querendo saber qual é o nosso tempo mínimo de reação a um movimento de mercado!
Ora, a resposta é simples: pegue o horário do seu PC e subtraia do horário marcado no dado quando a negociação que você está vendo ocorreu dentro da CME. Se o seu relógio local estiver sincronizado com o relógio da CME, você saberá qual é a latência do seu Market Data. Entendeu!? Na prática você está reagindo ao “AGORA” que aconteceu a alguns milissegundos atrás. Mas quantos milissegundos?
Você pode ter a certeza de que o horário da CME está sincronizado com erro de poucos microssegundos em relação a um relógio atômico (primeiro nível da figura acima). Mas será que o horário do seu PC é tão preciso assim que lhe permita fazer essa conta simples de subtração?
A resposta é não! Mas eu vou te ensinar como manter o horário do seu PC sempre sincronizado para poder medir o atraso do seu Market Data!
Sincronizando o horário do seu PC
Tenho uma novidade para você, o hardware do seu PC não é tão bom quanto imagina. O relógio dele tem uma precisão muito baixa. E isso não é um problema na grande maioria das aplicações do dia a dia de um sistema operacional rodando aplicações locais de baixo nível de criticidade.
Porém, ao longo de um dia, você possivelmente terá acumulado alguns milissegundos de atraso, que acumulando ao longo de poucos dias, estará atrasado em segundos. E esses atrasos vão se acumulando ao longo do tempo, podendo chegar a minutos ou além.
A sorte é que o sistema operacional tem um serviço que busca um servidor NTP, que está sincronizado com o horário UTC (Coordinated Universal Time) e sincroniza o horário do seu PC!
Quer aprender a sincronizar seu relógio? Então vou te mostrar o passo-a-passo de como fazer isso da maneira amadora (que todo mundo faz, mas não você trader!) e que não será suficiente para sincronizar com precisão o seu horário local.
Depois na sequência, vou te mostrar como você deveria manter seu horário sincronizado.
Sincronizando seu horário pela “Solução Windows”
1) Clique com o botão direito no seu relógio (canto direito inferior) e em seguida, na opção “Ajustar Data/hora”
2) Você verá um botão de “Sincronizar agora” e, logo acima dele, o endereço do servidor ao qual irá sincronizar. Basta clicar no botão e pronto!
3) Para mudar o servidor de sincronização, você pode clicar na opção “Adicionar relógios para diferentes fusos horários” e acessar a aba “Horário na Internet”.
Em seguida, clique em “Alterar configurações” e insira o endereço do servidor que deseja sincronizar. No Projeto NTP Pool tem uma lista de servidores NTP aos quais você pode sincronizar.
Clique em “Atualizar agora”! Agora você sincronizou com o servidor NTP que deseja.
Porque a solução Windows não funciona para nós (traders)?
A solução Windows vai sincronizar o seu horário local com um servidor NTP, mas não com uma precisão boa o suficiente para medirmos a latência do Market Data. Por alguma razão, os algoritmos implementados pelo Windows não permitem uma sincronização muito precisa. E além disso, o serviço de sincronização de horário não fica ativado o tempo inteiro, ele é acionado manualmente, acumulando assim atrasos ao longo do tempo.
Ainda bem que você está no Blog da NeoTraderBot e vamos te ensinar a como sincronizar seu horário like a pro!
Sincronizando seu horário com maior precisão (Serviço NetTime)
O NIST (National Institute of Standards and Technology) é tipo o “INMETRO” dos Estados Unidos. E no site do NIST há uma relação de links de empresas e softwares que oferecem serviços de sincronização.
A maior parte das opções são produtos pagos de empresas. Mas há também algumas boas almas que oferecem gratuitamente programas compilados que seguem a norma NTP e implementam os algoritmos de sincronização.
Uma opção que encontrei é o NetTime, código escrito originalmente por Graham Mainwaring em 1997 e, atualmente mantido por Mark Griffiths (www.timesynctool.com).
Basta você baixar o arquivo compilado (exe, versão estável), e executá-lo. Ele irá instalar em sua máquina um serviço que irá ser executado continuamente e irá sincronizar periodicamente o seu horário.
Agora sim o seu horário está sincronizado com precisão de poucos milissegundos em relação ao padrão UTC!
Acessando e configurando o NetTime
1) Na barra de status do seu Windows, você verá um ícone amarelo de relógio que é o programa NetTime. Ao passar o mouse sobre o ícone, você verá a última vez que houve sincronização.
2) Clique sobre o ícone do NetTime e você poderá visualizar o painel do programa. Lá você poderá habilitar/desabilitar o serviço de sincronização e acessar as configurações do programa.
3) Ao clicar em “Settings” você será direcionado para tela de configuração, onde poderá definir o intervalo de atualização do seu relógio junto aos servidores listados na tabela. No meu caso, defini a atualização a cada 15 minutos.
Medindo a latência do Market Data
Agora sim, poderemos medir corretamente a latência do Market Data que utilizamos! Mas calma, nem todo market data ou plataforma é tão transparente com o timestamp de cotações e negócios.
“A verdade dói, mas a ignorância pode matar” (apesar de ter pensado nessa frase ao escrever este artigo, vou colocar em aspas porque alguém já deve ter pensado isso antes!).
A maior parte das plataformas não disponibiliza a informação necessária para calcular a latência ou demonstram de fato a latência em algum ambiente. Você pode imaginar alguns motivos para isso!
Se você usa o Profit Chart da Nelogica, plataforma que utiliza o Market Data próprio, conhecido por Data Feed, você não conseguirá por meio da linguagem NTSL saber a latência porque não conseguirá criar um código que pegue em tempo real o último negócio realizado e compare com o seu horário local.
Há quem vá dizer que no menu “Ajuda”, opção “Diagnóstico de Sistema” você terá acesso a tela abaixo, a qual exibe o valor da latência.
É pouquíssimo provável que esse valor exibido seja relacionado à medição de latência do Market Data, conforme estamos apresentando nesse artigo. O que me leva a crer nisso é que mesmo antes de sincronizar o meu relógio local, a Latência apresentada já era de 10 ms. O relógio do seu PC precisa estar com uma precisão muito alta para medir uma latência de market data de 10 segundos, tipicamente o seu erro em relação ao padrão UTC já será nessa ordem de grandeza.
Segundo ponto, no canto inferior esquerdo é apresentado o horário local e o horário do servidor com precisão apenas de minutos. Convenhamos que isso não tem valia nenhuma para fins de medição de latência de market data, o máxima que saberemos é se há uma diferença de minuto entre o horário local e do servidor da Nelogica.
Seria interessante saber o que de fato é esse número apresentado como “Latência”, não acham!?
Felizmente, outras plataformas nos oferecem a possibilidade de calcularmos a nossa latência do sinal de Market Data via código! É o caso da TraderEvolution e da NinjaTrader.
Nós da NeoTraderBot fizemos indicadores gratuitos para você incorporar as suas ferramentas de trading, tanto na TraderEvolution quanto para NinjaTrader. Acesse os links abaixo e comece a usar os indicadores agora!