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

 
Andrey Khatimlianskii:

Por que derrubar os gráficos quando você pode derrubar todo o terminal?

Verificado. A carga da CPU é maior do que se você minimizar os gráficos, o Market Watch e as Ferramentas.


Eu poderia estar errado.

 
Favor adicionar TERMINAL_IS_MINIMIZADO semelhante a CHART_IS_MINIMIZADO. Até agora, temos que usar uma solução DLL.
user32::IsIconic(TerminalHandle)
Para entender que você pode remover as mesmas sondagens do mouse, não desenhar painéis, etc.
 

Por favor, compartilhe os resultados da execução deste EA a partir de seu VPS (não de sua máquina de casa).

#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

const bool Init = EventSetTimer(1);

void OnTimer()
{  
  _B(GetMicrosecondCount(), 1); // Замеряем длительность выполнения GetMicrosecondCount()
}


Sobre este VPS

2020.10.03 20:21:49.222 Terminal        MetaTrader 5 x64 build 2629 started for MetaQuotes Software Corp.
2020.10.03 20:21:49.222 Terminal        Windows Server 2012 R2 build 9600 on KVM, Intel Xeon E3-12 xx v2 (Ivy Bridge, IBRS), 4 / 5 Gb memory, 7 / 38 Gb disk, IE 11, RDP, UAC, Admin, GMT+3


resultado.

2020.10.04 12:01:22.763 Test6 (EOSUSD,M1)       Alert: Time[Test6.mq5 7 in OnTimer: GetMicrosecondCount()] = 26 mсs.
2020.10.04 12:01:23.747 Test6 (EOSUSD,M1)       Alert: Time[Test6.mq5 7 in OnTimer: GetMicrosecondCount()] = 33 mсs.
2020.10.04 12:01:24.747 Test6 (EOSUSD,M1)       Alert: Time[Test6.mq5 7 in OnTimer: GetMicrosecondCount()] = 36 mсs.
2020.10.04 12:01:25.748 Test6 (EOSUSD,M1)       Alert: Time[Test6.mq5 7 in OnTimer: GetMicrosecondCount()] = 32 mсs.
2020.10.04 12:01:26.762 Test6 (EOSUSD,M1)       Alert: Time[Test6.mq5 7 in OnTimer: GetMicrosecondCount()] = 23 mсs.


É desejável fornecer a configuração do VPS junto com o resultado, como mostrado acima.


Diante do fato de que, literalmente, todas as funções são lentas. Antes de mudar o VPS, quero comparar com outras soluções e entender qual é a melhor para escolher. Portanto, por favor, compartilhe para uma imagem objetiva.


Eu posso usar qualquer terminal, MT4/MT5. Mas eu estou mais interessado em 5, é claro.

 
Tentei substituí-la pela versão WinAPI.
#import "kernel32.dll"
  int QueryPerformanceCounter(ulong &lpPerformanceCount);
  int QueryPerformanceFrequency(ulong &lpFrequency);
#import

ulong QueryPerfomanceCounter() { ulong value;  if (QueryPerformanceCounter(value)) return value;  return 0; } 

ulong QueryPerformanceFrequency() { ulong freq = 0;  if (kernel32::QueryPerformanceFrequency(freq)) return freq;  return 0; }  


// https://www.mql5.com/ru/forum/170952/page89#comment_8203859
ulong GetPerfomanceCount_mcs()
{ 
  static ulong freq= QueryPerformanceFrequency();
  return freq ? QueryPerfomanceCounter()*1000000/freq : 0;
}

#define GetMicrosecondCount GetPerfomanceCount_mcs
O resultado é idêntico ao normal. Aparentemente, a implementação interna é a mesma. Existe alguma outra implementação de medição de microssegundos?
Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2018.07.27
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 

Determina se um programa está funcionando ou não na máquina travada.

// Возвращает true, если тормозной VPS.
bool IsFreezeVPS()
{
  static bool FirstRun = true;
  static bool Res;
  
  if (FirstRun)
  {
    if (Res = ::GetMicrosecondCount() - ::GetMicrosecondCount())
      ::Alert("Warning: FreezeVPS - https://www.mql5.com/ru/forum/342090/page40#comment_18579094");
    
    FirstRun = false;
  }
  
  return(Res);
}
 

Parece ter contornado os freios GetMicrosecondsCount nas máquinas VPS. Pode parecer que não é nada. De fato, os EAs de combate estavam matando o VPS com a carga da CPU, porque a contagem de microssegundos deve ser totalmente utilizada em instantâneos do ambiente comercial, que por sua vez são projetados não para carregar, mas para tirar a carga da CPU.


Quem mais entrou aqui? Instantâneos, e agora GetMicrosecondsCount...

 
fxsaber:

Determina se um programa está funcionando ou não na máquina travada.

Se a diferença é ou não nula, é uma questão de sorte:

void OnStart()
{
        const int max = 2000000;
        int count = 0;
        for ( int i = 0; i < max; i++ )
                if ( GetMicrosecondCount() != GetMicrosecondCount() )
                        count++;
        Print( max, ":" ,count );
}

Resultado: 2000000:213579

 
A100:

Zero ou não zero é uma questão de sorte:

Resultado: 2000000:213579

Sim, é por isso que eu uso tal condição em mqh.

    // Несколько проверок - от ложных срабатываний.
    bool Res = (bool)(::GetMicrosecondCount() - ::GetMicrosecondCount()) &&
               (bool)(::GetMicrosecondCount() - ::GetMicrosecondCount()) &&
               (bool)(::GetMicrosecondCount() - ::GetMicrosecondCount()) &&
               (bool)(::GetMicrosecondCount() - ::GetMicrosecondCount()) &&
               (bool)(::GetMicrosecondCount() - ::GetMicrosecondCount());
 
fxsaber:

Sim, é por isso que eu uso esta condição em mqh.

São apenas 5 verificações. Tenho um computador lento (tablet), mas até eu tenho apenas uma diferença a cada2000000/213579=10º cheque. E o fato de eu ter um lento é confirmado pelo fato de que mesmo este nãoé reproduzido por ninguém mais:

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

MT5 e velocidade em ação

A100, 2020.09.05 00:13

Também sobre atrasos

e todos os gráficos manuais (tendência, Fibonacci, etc.) também são lentos

As configurações são todas por padrão:

  • Servidor: MetaQuotes-Demo
  • História: disponível desde 01.01.1971
  • Prazo preciso: nenhum
  • Max barras na janela: 100000
  • Tipo de gráfico: candelabros
  • Escala para baixo da tabela: Máximo

Símbolo, período bares latência
EURUSD, Montanhês 597 ir para
EURUSD, Semanalmente
2590 Confira
EURUSD, diariamente

12797

não

Algum tipo de dependência inversa: quanto menos barras, mais lento

Em gráficos mensais e semanais, por exemplo EURGBP (onde não há um histórico tão profundo) - sem atrasos


 
A100:

Isso são apenas 5 verificações. Tenho um computador lento (tablet), mas até eu tenho apenas uma diferença a cada2000000/213579=10º cheque. E o fato de eu ter um lento é confirmado pelo fato de que mesmo este nãoé reproduzido por ninguém mais:

Se cinco cheques consecutivos derem um resultado diferente de zero, é uma contagem lenta GetMicrosecondsCount. É claro que pode haver outras opções (ainda mais lógicas) para determinar se existe um problema. Por enquanto, deixei as coisas assim.

Quanto a trabalhar com a história dos bares - eu não a uso. É sempre M1+5000 barras. A tarefa é negociar rapidamente.

Razão: