Características da linguagem mql5, subtilezas e técnicas - página 93

 
Renat Fatkhullin:

Isto é o que a WinAPI faz.

Eu discordo.
WinAPI não reage à correção da hora local, ao contrário de GetMicrosecondCount.


Arquivos anexados:
 
Nikolai Semko:

Eu discordo.
WinAPI não reage à correção da hora local, ao contrário de GetMicrosecondCount.

Isto porque o tempo aqui mostrado não é absoluto, mas sim um delta desde o início do programa:

A função GetMicrosecondCount() retorna o número de microssegundos que passaram desde o início do programa MQL5.

Como o valor do contador é fixado no início da aplicação, este delta é afetado por mudanças de data. Mudar seriamente a data no seu computador quando um software dependente do tempo está a funcionar é sabotagem e aproximação de homens russos com uma motosserra japonesa. Para o bem de uma anedota, serve.

A justificação "bem, o corretor de tempo de fundo funciona" não funciona aqui - sua correção é de milissegundos por dia e não tem efeito.

Otemporizador Microsecond é necessário para a medição precisa de pequenos períodos, não para contar desde o início dos tempos.

 
Nikolai Semko:

Eu discordo.
WinAPI não reage à correção da hora local, ao contrário de GetMicrosecondCount.

e como você vê a aplicação prática do GetMicrosecondCount que estraga todo o trabalho do programa na versão atual? descreva a aplicação prática

por exemplo, não vejo nenhuma variante nem em c++ nem aqui, exceto as descritas por Renat, ou seja, medir o tempo de execução do código com precisão em mcs

ou seja, não entendo a tua persistência, francamente.

 
Renat Fatkhullin:

Como o valor do contador no início da aplicação é fixo, este delta é afetado pela mudança de data. Mudar seriamente a data num computador quando um software dependente do tempo está a funcionar lá é sabotagem e a abordagem dos homens russos com uma motosserra japonesa. Serve para uma anedota.

Eu mostrei propositadamente a sincronização de tempo na Internet no gif animado. Este tipo de sincronização é automática por defeito e acontece com bastante frequência e de acordo com o horário, sem a participação de ninguém.
E não há garantia de que no momento da medição esta sincronização possa acontecer.
Eu não me preocupo comigo mesmo porque já sei sobre esta peculiaridade de GetMicrosecondCount() e que esta função é mais lenta do que GetTickCount.
Mas outros, que não vão ler este ramo mas ler ajuda para esta função mesmo com muito cuidado, podem ter problemas se usarem GetMicrosecondCount() na lógica real da EA, porque durante o teste tudo estará OK, mas durante a negociação real no momento da sincronização do tempo planejado ou mudar para a hora de Verão, pode acontecer OY, especialmente se o tempo diminuir e transbordar como ulong ocorrer.
E a propósito, esta nova informação para mim não documentada, fez ajustes significativos na lógica da classe multitimer, que é criada agora e que organiza o funcionamento de vários temporizadores simultaneamente. No trabalho desta classe, a função de microssegundo foi usada com todas as suas forças. Mas agora entendo, que terei que sacrificar 15625 µs de precisão, também para aumentar sua velocidade.
Faber é um pliz. Ele não é mau, ele é apenas insistente, mas é bom.
Merda, eu também estou prestes a ser banido :((

 
Renat Fatkhullin:

Isto porque o tempo apresentado não é absoluto, mas sim um delta desde o início do programa:

Como o valor do contador na inicialização da aplicação é fixo, este delta é afetado por mudanças de data. Mudando seriamente a data no computador quando o software dependente do tempo está em execução há sabotagem e a abordagem dos homens russos com uma motosserra japonesa. Para o bem de uma anedota, serve.

A justificação "bem, o corretor de tempo de fundo funciona" não se aplica aqui - sua correção é de milissegundos por dia e não tem efeito.

O temporizador Microsecond é necessário para a medição precisa de pequenos períodos, não para contar desde o início do tempo.

Ou seja, faz sentido reiniciar periodicamente o terminal?

 
Nikolai Semko:

Eu mostrei especificamente a sincronização de tempo através da internet no gif animado. Esta sincronização é automática por padrão para todos e acontece em um horário sem ninguém estar envolvido e com bastante frequência.

Eu escrevi explícita e claramente - a correção diária por milissegundos é automática.

E sim, você será igualmente surpreendido por uma função WinAPI pura ( GetTickCount ou QueryPerformanceCounter) quando você colocar uma sucata na motosserra, alterando a data mesmo por segundos. Não há nenhuma protecção que estás a falar em supostamente ter. Sugado do nada, tanto o problema como a alegada solução.

Então tudo está certo - isto é o que a WinAPI é e isto é a realidade.

 
Aleksey Vyazmikin:

Ou seja, faz sentido reiniciar o terminal periodicamente?

Não.
 
Renat Fatkhullin:
Não.

O meu contador de tempo de fecho do castiçal começa a correr por 5 segundos numa semana, pensei que tinha algo a ver com o software.

Ele ajuda a reiniciar e sincronizar a hora com o serviço em questão.

Mudou a bateria da mãe não há muito tempo.

 
Aleksey Vyazmikin:

O meu contador de tempo de fecho do castiçal começa a correr por 5 segundos numa semana, pensei que tinha algo a ver com o software.

Ele ajuda a reiniciar e sincronizar a hora com o serviço em questão.

Mudei a bateria da minha mãe não há muito tempo.

Configure o serviço interno de Time do Windows para sincronizar todas as noites (ou mais frequentemente) com pool.ntp.org e a correção diária será em milissegundos.
 
Renat Fatkhullin:
Configure um serviço interno de Windows Time para sincronizar diariamente à noite (ou mais frequentemente) com pool.ntp.org e a correção diária será em milissegundos.

Configurado, mas não ajuda - não entendo a razão. Mas o meu servidor é ntp2.stratum2.ru