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

 
Slava:

Tens a certeza que leste a pergunta toda?

...entre duas chamadas para a GetMicrosecondsCount...

Bem, é o que estou dizendo. A primeira chamada ocorre antes da sincronização e a segunda após a sincronização. A diferença será a mesma: o número real de microssegundos + correção da sincronização.

 
Alexey Navoykov:

É disso que estou a falar. A primeira chamada é antes da sincronização e a segunda é depois da sincronização. A diferença é o número real de microssegundos + correcção da sincronização.

Agora me diga a probabilidade de correção de tempo entre duas chamadas para GetMicrofsecondsCount?

Se você está realmente medindo microssegundos, a probabilidade é próxima de 0.

E você mede micro segundos em intervalos de segundos ou mais? Porquê? Spherocon no vácuo?

 
Alexey Navoykov:

Você está errado, eu citei especificamente o código aqui usando o WinApi. Execute-o, mude o relógio no processo, e veja o resultado.

Não é muito claro como conduzir qualquer diálogo com você, se seus argumentos são baseados em especulações. E você não considera sequer necessário se familiarizar com o curso da discussão temática.

És tu que não fazes ideia do problema que levantaste.

Como eu disse, uma mudança de tempo inesperada matará seu código, que é baseado no controle de tempo preciso, independentemente das funções que você usa.
 
Slava:

Agora me diga a probabilidade de correção de tempo entre duas chamadas para GetMicrofsecondsCount?

Se você está realmente medindo microssegundos, então a probabilidade é quase 0.

E você mede microssegundos em segundos ou mais? Porquê? Spherocon no vácuo?

Já lhe disse, esta probabilidade depende do período de sincronização. Quanto mais curto for, mais vezes teremos um turno, ou seja, maior será a probabilidade. E também da distância entre as medidas vizinhas. Quanto mais longo for, mais frequentemente vamos atingir o offset. Assim, a probabilidade é calculada com base nestes dois parâmetros, e não apenas com um dedo no céu.

E por que você diz algo abaixo de 16 msec? Por exemplo, qualquer coisa abaixo de 16 msec só pode ser medida com esta função. E mesmo 16-30 milissegundos devem ser medidos com esta função, caso contrário, o erro será demasiado grande.

Se lhe parece que são bagatelas e podem ser ignoradas, então é puramente a sua opinião pessoal. Há pouco falamos aqui sobre a função padrão do sistema QueryPerformanceCounter, que funciona corretamente, sem nenhum turno. Deve ter sido inventado por alguma razão. E, a propósito, Renat aqui o declarou por alguma razão:

É assim que contamos os microssegundos.

Mas na verdade não é. É sobre o QueryPerformanceCounter.

 
Renat Fatkhullin:
És tu que não fazes ideia do problema que levantaste.

Como eu disse, uma mudança de tempo inesperada matará o código vinculado ao controle de tempo preciso, independentemente das funções usadas.

Não há mudança de tempo no QueryPerformanceCounter. Como assim? Executou o código para o qual lhe dei o link?

 

Depois de verificar a máquina de execução de código MQL5, descobriu-se que tínhamos um esquema de medição híbrido na GetMicrosecondCount:

  • para Windows 8 e superior, a função GetSystemTimePreciseAsFileTime ligeiramente mais rápida foi utilizada, dependendo do tempo do sistema
  • para outros casos, QueryPerformanceFrequency + QueryPerformanceCounter
  • em ambos os casos, GetMicrosecondCount desempenhou sua função de buscar microssegundos desde o início do programa

Este código surgiu devido a uma tentativa de reduzir a sobrecarga do sistema na chamada de medição do tempo. Um dos desenvolvedores exagerou.

Nós, pessoalmente, e Slava tínhamos a certeza de que um puro QueryPerformanceCounter estava a funcionar. E havia um tal código. Mas estávamos enganados por causa da presença de um modelo híbrido.

Agora o QueryPerformanceFrequency + QueryPerformanceCounter puro vai funcionar.

Conclusão: sim, estragamos tanto a implementação da função GetMicrosecondCount como a proteção do seu comportamento.

Slava e eu pedimos desculpa por isso!
 
Comentários não relevantes para este tópico foram movidos para "Bugs, bugs, problemas".
 
Renat Fatkhullin:

Um lembrete sobre o uso de frases do tipo "deve" explícita ou implicitamente. O uso de "metaquotes deve" em vez de "por favor considere" é agora inaceitável.

Por favor, considere a hipótese de que, na maioria das vezes, a leitura nas entrelinhas não tem nada a ver com o que o interlocutor escreve.

Relatórios de bugs reais com assistência do fórum e despejando em MQs são coisas incompatíveis. É difícil imaginar uma pessoa que se transforma constantemente em odiadora e volta para trás.

 
O próprio MT5 mede longos intervalos de tempo através daGetMicrosecondCount
IS      0       13:32:55.239    Trades  '11391209': accepted exchange buy 1.00 AFKS at market
DM      0       13:33:07.896    Trades  '11391209': deal #265475900 buy 1.00 AFKS at 9.095 done (based on order #284425784)
OD      0       13:33:07.898    Trades  '11391209': order #284425784 buy 1.00 / 1.00 AFKS at 9.095 done in 12757.608 ms
 

Amigos, podem dizer-me a quem pedir conselhos - quero entender como trabalhar com diferenças de preço para o mesmo produto em trocas diferentes - sou novo neste negócio, quero entender. Eu ficaria grato por qualquer conselho - talvez eu devesse escrever em outro tópico?

Eu tenho acesso a vários intercâmbios estrangeiros, mas não entendo como tudo funciona