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

 
fxsaber:

@Anton, en muchas funciones estándar se puede especificar NULL en lugar de un carácter. ¿Afecta a la velocidad de ejecución?

¿O no hay ninguna diferencia para Terminal/Tester?

Symbol(), las entradas _Symbol son equivalentes a NULL (donde se permite NULL en lugar de un nombre de símbolo).

En este caso, no hay ninguna comprobación adicional de la existencia del símbolo actual, la presencia del símbolo actual en la vigilancia del mercado y las propiedades de llamada innecesarias del símbolo actual, ya que las propiedades del carácter actual se almacenan en la memoria caché

Es decir, si se especifica un parámetro de cadena simple en lugar de Symbol(), _Symbol o NULL, entonces se comprueba el programa completo y se siguen solicitando propiedades

 
Slava:

Symbol(), las entradas _Symbol son equivalentes a NULL (donde se permite NULL en lugar del nombre del símbolo).

En este caso, no hay una comprobación innecesaria de la existencia del símbolo actual, de la presencia del símbolo actual en Market Watch y de la llamada innecesaria de las propiedades del símbolo actual, ya que las propiedades del símbolo actual se almacenan en la caché

Slava, puedes comentar: en las acciones, el precio del tick en la especificación del símbolo se establece en '0'. Y esto es lo que dice el soporte:

"Recibí la confirmación del departamento técnico. Por favor, tenga en cuenta que no es posible rellenar el parámetro "precio del tick" para la acción. El valor será por defecto 0.
¡Gracias por contactar con nosotros!"


¿Es realmente así? ¿Es en las Especificaciones del Símbolo donde el precio del tick se pone a cero sólo para las acciones?

 
Vladimir Karputov:

Slava, puedes comentar: en la acción, el precio del tick en la especificación del símbolo se establece en '0'. Y esto es lo que dice el soporte:

"Recibí la confirmación del departamento técnico. Por favor, tenga en cuenta que no es posible rellenar el parámetro "Tick price" para la acción. El valor será por defecto 0.
¡Gracias por contactar con nosotros!"


¿Es realmente así? ¿Está en las Especificaciones del Símbolo que el precio del tick es cero sólo para las acciones?

Sí, hay matices.

Cuando se exhibe el cero, tienes que hacer las cuentas tú mismo. Pregunte a su agente por la fórmula

 
fxsaber:

El problema de obtener ticks tardíos sin saltos se resuelve ahora sólo a través de CopyTicks*. Se trata de un mecanismo muy engorroso para este problema tan extendido.

Por cierto, de los registros frescos de hoy de la última versión de MT5:

Time[Main.mqh 162 in ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 704931 mcs.
Time[Main.mqh 162 in ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 704684 mcs.
Time[Main.mqh 162 in ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 704425 mcs.

Estaba colgando 3 EAs en 1 símbolo, cada uno en su propio gráfico. Y la petición continúa cada vez que hay un tic. Tales picos son, por supuesto, infrecuentes, pero de hecho 1 solicitud de nuevos ticks, procedente del último tick, fue de 700 ms.

 
Renat Fatkhullin:

No lo es.

Siempre se encontrarán retrasos aleatorios en cualquier programa. Empieza a llevar la cuenta de todo y te horrorizarás de la realidad de Windows. Ya he explicado esto en detalle varias veces.

En un momento dado, nosotros también nos asombramos cuando detectamos ráfagas aleatorias de 60-80 ms en lugar de 0 ms en las funciones WinAPI del sistema.


Ahora estamos migrando en masa la mayoría de nuestras soluciones de Windows a versiones de Windows Server 2019 Core especialmente degradadas, y los proyectos web.NET Core a Linux. Esto supone un enorme ahorro de recursos del sistema y reduce considerablemente la latencia del mismo.

El primer paso para descremar los terminales de MataTrader 5 fue empezar a implementar un gestor de tareas para llevar un control del consumo de recursos sobre la marcha. Para nosotros, estamos recopilando más información.

Ya ha quedado claro que sí:

  • Retención excesiva de flujos innecesarios
  • sobreescala
  • Exceso de cachés.
Para la próxima versión arreglaremos algunos problemas de recursos paso a paso.

Estaría bien tener un terminal de linux también ))))

 
Slava:

Sí, hay matices.

Si tienes cero, tienes que calcularlo tú mismo. Pida a su agente la fórmula.

Todo es correcto con SymbolInfoXXXX. La pregunta era por qué dicen que "0" se establece para las acciones en el pliego de condiciones. Dicen que está claro: un tic equivale a un céntimo. ¿Pero no es la razón para poner "0" en la Especificación?

 
fxsaber:

Dentro de la función, todavía hay que saltar al carácter de tilde correspondiente. Este es el momento de analizar la variable de la cadena. No es necesario hacerlo con NULL.

Lo comprobé en ese momento y no vi ninguna diferencia de velocidad significativa. Puede comprobarlo usted mismo

 
Slava:

Si se especifica un parámetro de cadena normal en lugar de Symbol(), _Symbol o NULL, se comprueba el programa completo y se consultan también las propiedades

Gracias por la información. Resulta que es mejor hacerlo así:

// Быстрый SymbolInfoTick.
bool SymbolInfoTickFast( const string &Symb, MqlTick &Tick )
{
  return((Symb == _Symbol) ? SymbolInfoTick(_Symbol, Tick)
                           : SymbolInfoTick(Symb, Tick));
}
 
fxsaber:

Gracias por la información. Resulta que es mejor hacerlo así:

Incluso sin detalles técnicos, no podría imaginar cómo podría hacerlo de forma diferente en sus funciones...

¿Cómo debería ser esta construcción más rápida que la estándar SymbolInfoTick()?

 
Artyom Trishkin:

¿Cómo se supone que esta construcción es más rápida que el SymbolInfoTick() estándar?

Más rápido.

Razón de la queja: