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

 

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

MT5 y Speed en acción

fxsaber, 2021.03.10 14:53

Un claro ejemplo de lo que ralentiza el Market Watch.

Fíjese en los valores de la columna Procesador (segunda por la derecha).


¿Quizá la tarjeta de vídeo debería encargarse de la visión general del mercado?

 
BillionerClub:

¿Quizás la visión general del mercado debería ser manejada por la tarjeta de video?

Especialmente si la MT está en una máquina virtual (no es un caso raro).

 
BillionerClub:

¿Quizás la visión general del mercado debería ser manejada por la tarjeta de video?

No hay límite de FPS (Fotogramas por Segundo) en el Terminal. En Market Watch puede ser de 300 fps o más.

Cualquier visualización en los terminales de negociación a fps > 50 es un desperdicio de recursos informáticos.

 
BillionerClub:

¿Quizás la visión general del mercado debería ser manejada por la tarjeta de video?

en lugar de basarse en SysListView32, que no es rápido en sí mismo, sino que tiene su propio elemento para la representación, pero con todas las "campanas y silbatos" de la implementación de desplazamiento, clasificación, etc. Otra pregunta - ¿es tan necesario cuando se trabaja de esta forma? y entonces apagarlo durante el periodo de trabajo sería una opción para solucionar este problema (si es que es un problema)

 
Se ha encontrado que falta el caché de propiedades para los objetos gráficos.
#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

void OnStart()
{
  const string Name = "ObjectName";
  
  ObjectCreate(0, Name, OBJ_BITMAP_LABEL, 0, 0, 0);
  
  for (int i = 0; i < 10; i++)
    _B(::ObjectGetInteger(0, Name, OBJPROP_COLOR), 100); // Повторное обращение к тому же объекту должно быть быстрым, но этого не происходит.
    
  ObjectDelete(0, Name);
  
  Print(::ObjectSetInteger(0, Name, OBJPROP_COLOR, 0)); // true для удаленного объекта!
}


Resultado.

Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 9361 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 396 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 1399 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 987 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 1111 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 1040 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 639 mcs.
Alert: Bench_Stack = 0, 100 <= Time[Test9.mq5 555 in OnStart: ::ObjectGetInteger(0,Name,OBJPROP_COLOR)] = 796 mcs.
true


Muy caro. Y un error de la función ObjectSet también.

Cadena de búsqueda: Oshibka 026.

 
fxsaber:

Y un error de la función ObjectSet también.

Cadena de búsqueda: Oshibka 026.

Manipulación de objetos de forma asíncrona

 
Andrey Khatimlianskii:

El manejo de objetos es asíncrono

Resulta que ObjectSet siempre tiene que devolver true.

 
fxsaber:

Resulta que ObjectSet siempre tiene que devolver true.

Lee la ayuda:

https://www.mql5.com/ru/docs/objects/objectsetinteger

Valor devuelto

Devuelve true sólo si la orden de cambiar las propiedades del objeto gráfico fue enviada con éxito al gráfico, de lo contrario devuelve false. Para obtener más información sobre el error, llame a GetLastError().


Документация по MQL5: Графические объекты / ObjectSetInteger
Документация по MQL5: Графические объекты / ObjectSetInteger
  • www.mql5.com
ObjectSetInteger - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber:

Resulta que ObjectSet siempre tiene que devolver true.

No puedo llegar a la misma conclusión utilizando la lógica.

 
Andrey Khatimlianskii:

Anton:

false - sólo si está mal el ChartID. Con el propio ChartID (cero) siempre es cierto.

Hay que esforzarse mucho para causar falsos.