MT5 e velocidade em ação - página 52

 

Re-engenharia para uma macro

#define  µsSLEEP(µsRange)                              \
        {                                             \
           ulong c = GetMicrosecondCount() + µsRange; \ 
           while(GetMicrosecondCount() < c);          \
        }


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   while(!_StopFlag)
   {
      µsSLEEP(5000000);
      Print("Прошло 5000000 микросекунд");
   }
}
 
Roman:

É claro, pode fazer mais do que apenas um núcleo.

Referia-me a enquanto não dormia.

É evidente que o escorregamento não é adequado aqui porque precisamos de microsegundos. Mas será um zumbido sem ele.

 
Andrey Khatimlianskii:

Referia-me a enquanto não dormia.

É evidente que o deslize não vai funcionar aqui porque precisamos de microsegundos. Mas ele irá cantarolar sem ele.

É claro, ele zumbe sem escorregar.
O contadorGetMicrosecondCount está funcionando

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   ulong µs = 0;
   
   while(!_StopFlag)
   {
      µs = GetMicrosecondCount();
      
      Comment((string)µs);
      ChartRedraw();      
   }
   
   Comment("");   
}
 
Roman:

É claro que está girando sem escorregar.
O contador GetMicrosecondCount está funcionando.

Não é apenas o balcão que é carregado. Um loop infinito vazio irá carregá-lo também. É isso que eu quero dizer.

Má solução, em geral. Mas não vou sugerir melhor.

 
Andrey Khatimlianskii:

Não é apenas o balcão que é carregado. Um loop infinito vazio também será carregado. É isso que eu quero dizer.

É uma má solução, no final das contas. Mas eu não vou sugerir melhor.

Portanto, um loop vazio irá obviamente extrair todo o potencial dos ciclos do relógio do processador.
Não entendo a reclamação sobre uma má solução. Se não for adequado para seus recursos, isso não significa que seja ruim.
µsSLEEP lhe dá uma latência de laço menor que o padrão Sleep(1); ou seja, em microssegundos, não em milissegundos.
O 5000000 nos exemplos acima é apenas um exemplo, a freqüência real em combate seria inferior a 1 ms

Eu não entendo seu problema.
Você
precisa que ele esteja livre de estresse?
Coloque um sono regular(20); em milissegundos

 
Roman:

Portanto, vazio, ao mesmo tempo em que, compreensivelmente, capta todo o potencial dos ciclos do relógio do processador.
Não entendo a reclamação sobre uma má solução. Se não for adequado aos seus recursos, não significa que seja ruim.
µsSLEEP lhe dá uma latência de laço menor que o padrão Sleep(1); ou seja, em microssegundos, não em milissegundos.
O 5000000 nos exemplos acima é apenas um exemplo, a freqüência real em combate seria inferior a 1 ms

Eu não entendo seu problema.
Você
precisa que ele esteja livre de estresse?
Dormir regularmente(20); em milissegundos.

Não houve nenhuma reclamação.
Não preciso desse cronômetro, estava estudando-o por interesse. Mas eu a considero uma má solução, uma vez que carrega desnecessariamente o processador.

E para que propósito você precisa de um deslizamento de microssegundo?

 
Andrey Khatimlianskii:

Não houve reclamação.
Não preciso desse cronômetro, estudei-o por interesse. Mas eu acho a solução ruim, pois ela carrega desnecessariamente o processador.

Para que você precisa de um deslizamento de microssegundo?

Se você se perguntasse por que ele carrega, e descobrisse por que, você não teria esta opinião.
Se você quiser menos de 1ms, terá que pagar por isso com recursos.
E me parece que você não pode descarregá-lo, porque precisa de um timer de microssegundo para contar o intervalo.
Por outro lado, se o timer de microssegundo está constantemente funcionando e dá carga igual a vazio enquanto,
então há uma pergunta, por que este atraso então coloca, e usa o timer de microssegundo. De qualquer forma, isso é lírico.
Por isso, estou pingando o servidor, com uma certa freqüência, sem demora.
E preciso de uma amostragem de microssegundos, porque haverá chamadas desnecessárias.
Estou usando a primeira solução, que coloquei antes, e escrevi µsSleep também, pode vir a ser útil.


 
Andrey Khatimlianskii:


Para que você precisa de um deslizamento de microssegundo?

Aqui está uma solução já feita.
Imprimir() é claro que você o substitui por seu próprio código.

#define  SEND_PING                                           \
{                                                           \   
   ulong currCount = GetMicrosecondCount();                 \
   switch((currCount - prevCount) > 5000000)                \
   {                                                        \
      case 0:                                               \
         break;                                             \
      case 1:                                               \
         prevCount = currCount;                             \
         Print("ping");                                     \
         break;                                             \
   }                                                        \
}
       

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   ulong  prevCount = 0;
   
   while(!_StopFlag)
   {
      SEND_PING;
   }  
 
}
 
Renat Fatkhullin:
No novo testador que estamos escrevendo, vamos tentar mudar isso.
fxsaber:

Enviado para o PM.

No Testador, este EA gera milhões de registros de ordens comerciais completas e razoáveis (não spam) sob a forma de modificações. Por este motivo, o tronco do Testador fica entupido de forma catastrófica e rápida.

Estes logs não são necessários 99% do tempo, mas muitas vezes precisamos do que o Expert Advisor produz através da impressão. Portanto, gostaria de pedir novamente que considerassem a possibilidade de desativar a geração automática de entradas para cada pacote de OrderSend no Testador.

Se eu entendi corretamente, então desativar a geração de tais cordas resultará no aumento do desempenho de execuções únicas. Isto é, o benefício é duplo.

 
Renat Fatkhullin:


Mas o AMPGlobalEU-Live (na verdade é melhor procurá-lo como AMPGlobalUSA-Live) para o MetaTrader 5 com um núcleo de plataforma física em Chicago é na verdade 19,53 ms, já que nossos servidores mais próximos estão em Nova York:

Especialmente digitalizados todos os seus pontos manualmente - o mínimo é de 19 ms.

Vamos tentar colocar servidores em Chicago nos próximos dias. Ainda não chegou a esse ponto.

O servidor em Chicago foi implantado.

Dentro de 24 horas, ele escaneará todos os servidores e começará a distribuí-los.