MT5 y la velocidad en acción - página 40

 
Andrey Khatimlianskii:

¿Por qué colapsar los gráficos cuando se puede colapsar todo el terminal?

Comprobado. La carga de la CPU es mayor que si se minimizan los gráficos, Market Watch y Tools.


Podría estar equivocado.

 
Por favor, añada TERMINAL_IS_MINIMIZED de forma similar a CHART_IS_MINIMIZED. Hasta ahora tenemos que utilizar la solución DLL.
user32::IsIconic(TerminalHandle)
Para entender que se pueden eliminar los mismos sondeos del ratón, no dibujar paneles, etc.
 

Por favor, comparta los resultados de la ejecución de este EA desde su VPS (no su máquina doméstica).

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

const bool Init = EventSetTimer(1);

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


En 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.


Es deseable proporcionar la configuración del VPS junto con el resultado, como se muestra arriba.


Ante el hecho de que, literalmente, todas las funciones son lentas. Antes de cambiar de VPS, quiero comparar con otras soluciones y entender cuál es mejor elegir. Así que, por favor, comparta para tener una imagen objetiva.


Puedo utilizar cualquier terminal, MT4/MT5. Pero me interesa más el 5, por supuesto.

 
He intentado sustituirlo por la versión 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
El resultado es idéntico al normal. Aparentemente, la implementación interna es la misma. ¿Existe alguna otra implementación de la medición de microsegundos?
Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2018.07.27
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 

Determina si se está ejecutando un programa en la máquina frenada.

// Возвращает 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 que se han saltado los frenos de GetMicrosecondsCount en las máquinas VPS. Puede parecer que no es nada. De hecho, los EAs de combate estaban matando al VPS con la carga de la CPU, ya que los recuentos de microsegundos deben ser utilizados en su totalidad en las instantáneas del entorno comercial, que a su vez están diseñados para no cargar, sino para quitar la carga de la CPU.


¿Quién más ha entrado aquí? Instantáneas, y ahora GetMicrosecondsCount...

 
fxsaber:

Determina si se está ejecutando un programa en la máquina frenada.

Que la diferencia sea nula o no es una cuestión de azar:

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:

Cero o no cero es una cuestión de azar:

Resultado: 2000000:213579

Sí, por eso uso esa condición en mqh.

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

Sí, por eso uso esta condición en mqh.

Son sólo 5 cheques. Tengo un ordenador lento (tableta), pero incluso yo sólo tengo una diferencia en cada2000000/213579=10ª comprobación. Y el hecho de que tengo una lenta se confirma por el hecho de que incluso esto no es reproducido por nadie más:

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

MT5 y la velocidad en acción

A100, 2020.09.05 00:13

También sobre los retrasos

y todos los gráficos manuales (tendencia, Fibonacci, etc.) también son lentos

Los ajustes son todos por defecto:

  • Servidor: MetaQuotes-Demo
  • Historia: disponible desde el 01.01.1971
  • Plazo preciso: ninguno
  • Máximo de barras en la ventana: 100000
  • Tipo de gráfico: velas
  • Reducción del gráfico: Máximo

Símbolo, punto bares latencia
EURUSD, Mounthly 597 ir a
EURUSD, Semanal
2590 Comprueba
EURUSD, Diario

12797

no

Una especie de dependencia inversa: cuanto menos barras, más lento

En los gráficos mensuales y semanales, por ejemplo, del EURGBP (donde no hay un historial tan profundo), no hay retrasos


 
A100:

Son sólo 5 cheques. Tengo un ordenador lento (tableta), pero incluso yo sólo tengo una diferencia en cada2000000/213579=10ª comprobación. Y el hecho de que tengo una lenta se confirma por el hecho de que incluso esto no es reproducido por nadie más:

Si cinco comprobaciones consecutivas dan un resultado distinto de cero, se trata de un GetMicrosecondsCount lento. Por supuesto, puede haber otras opciones (incluso más lógicas) para determinar si existe un problema. Lo he dejado así por ahora.

En cuanto al trabajo con el historial de bares, no lo uso. Siempre es M1+5000 bares. La tarea consiste en negociar rápidamente.