Hora do sistema em millisegundos... ou nano

 

Pessoal,

olhei na documentação e não achei. Vocês sabem algum método do sistema que informaria a hora atual em millisegundos? ou com uma precisao de nano... 

 abraços

 Humberto Brandão 

 

olhei na documentação e não achei. Vocês sabem algum método do sistema que informaria a hora atual em millisegundos? ou com uma precisao de nano...

Olá Humberto,

Qual seria exatamente sua necessidade?

A precisão máxima que o terminal retorna para variáveis de tempo, se não me engano, é mesmo segundos.

Entretanto, para aplicações que demandam milisegundos intra-código, por favor dê uma olhada na função GetTickCount().

Abraços,
Malacarne

 

Ola Malacarne.

obrigado pela resposta. Respondendo a sua pergunta, nossas estratégias tem uma frequência mais alta e alguns pontos precisam ter precisão em milissegundos para atingir os resultados estatisticamente esperados.

O Leonardo Moreira me mandou um código que faz gravação com precisão de milissegundos mas este invoca uma DLL, o que geraria algumas chamadas de sistema. Eu estava buscando algo nativo do MQL para não pagar o preço de invocar algo externo. Mas acho que não vai ter outro jeito.

 Abraços 

 
humbertobrandao:

Ola Malacarne.

obrigado pela resposta. Respondendo a sua pergunta, nossas estratégias tem uma frequência mais alta e alguns pontos precisam ter precisão em milissegundos para atingir os resultados estatisticamente esperados.

O Leonardo Moreira me mandou um código que faz gravação com precisão de milissegundos mas este invoca uma DLL, o que geraria algumas chamadas de sistema. Eu estava buscando algo nativo do MQL para não pagar o preço de invocar algo externo. Mas acho que não vai ter outro jeito.

 Abraços 

Olá Humberto, essa é uma boa ideia de melhoria para o tipo Datetime, até porque o o Windows disponibiliza essa informação.

Note, entretanto, que para tua necessidade de alta frequência, a resolução do timestamp no Windows é acima de 10 ms, portanto na prática você não vai conseguir precisão abaixo disso em qualquer aplicação nesse ambiente, a menos que use alguma mudança fora do padrão como overclock ou outra alteração de setup de hardware.

Se isso for suficiente, realmente a função GetTickCount(), bem lembrada pelo Malacarne, e que é nativa na API do Windows (com o mesmo nome), poderia te ajudar a atingir essa resolução se você fizer um loop de sincronismo com tua estratégia/algoritmo.

Recomendo também analisares o histórico e comparar com teu sistema atual, já que é possível acessar essa resolução com a função HistoryDealGetInteger() e a opção DEAL_TIME_MSC. 

Se puderes compartilhar os resultados em termos de precisão acredito que será uma ótima experiência para todos aqui (até para quebrar alguns paradigmas), pois penso que o gargalo de desempenho da maioria dos algoritmos no MT5 (talvez não seja o teu caso) esteja na latência de execução de ordens, que praticamente joga essa precisão para a casa de segundos, mesmo operando com a plataforma com brokers e mercado Forex, inviabilizando estratégias que dependam de precisão de timestamp para análise e/ou execução. 

Razão: