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

 
Anton:

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

SymbolInfoTick(NULL, Tick);

SymbolInfoTick(_Symbol, Tick);

¿O no hay ninguna diferencia para el Terminal/Tester?

 
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?

No puedo asegurarlo, pero intuitivamente nunca escribo NULO en ningún sitio.

En teoría, no debería haber diferencia. Creo que al compilar NULL cambia a un valor normal, y no me gusta ver cosas incomprensibles con mis ojos.

 
Alexey Viktorov:

No puedo asegurarlo, pero intuitivamente nunca escribo NULO en ningún sitio.

En teoría, no debería tener ningún efecto. Creo que NULL cambia a un valor normal al compilar, y no me gusta ver cosas que no tienen sentido para mis ojos.

Lo mismo ocurre. Pero es la velocidad lo que me preocupa.

 

¡No entiendo cómo SymbolInfoTicks puede ralentizar en un temporizador de segundos en el fin de semana!

2021.02.28 21:33:02.993 ::SymbolInfoTick(_Symbol,Tick) = 171 mcs.

20 gráficos de diferentes símbolos, en cada uno se está ejecutando un EA, que sólo toma un tick de su símbolo en el segundo temporizador.

¡¿Qué hay que frenar en un día de descanso?!


SZY 3374 MB en la captura de pantalla - que es hace una hora solicitando ticks para la semana. Ahorrar recursos así.

 
fxsaber:

¡No entiendo cómo SymbolInfoTicks puede ralentizar en un temporizador de segundos en el fin de semana!

20 gráficos de diferentes símbolos, en cada uno se está ejecutando un EA, que sólo toma un tick de su símbolo en el segundo temporizador.

¿Qué hay que frenar en un día de fin de semana?

Lo has hecho:

  1. falta de información
  2. un par de docenas de hilos del Asesor Experto corriendo en paralelo en 4 núcleos (8 con hyperthreading puede ser ignorado)
  3. ¿se encuentra de nuevo un único valor atípico de una larga espera?
  4. de nuevo una única latencia aleatoria del sistema a voluntad del gestor de hilos?


 
Renat Fatkhullin:

Lo has hecho:

  1. falta de información
  2. un par de docenas de hilos expertos que se ejecutan en paralelo en 4 núcleos (se puede prescindir de 8 con hyperthreading)
  3. ¿se encuentra de nuevo un único valor atípico de una larga espera?
  4. ¿Otra vez una única latencia aleatoria del sistema a voluntad del gestor de hilos?

Me pregunto por qué SymbolInfoTick es una función tan selectiva para la latencia.

 
fxsaber:

Me pregunto por qué SymbolInfoTick es una función tan elegida para frenar?

No lo es.

Siempre se encontrarán retrasos aleatorios en cualquier parte de 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 de .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 recogiendo más información.

Ya se ha revelado que nosotros:

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

En teoría, no debería tener ningún efecto. Creo que NULL cambia a un valor normal al compilar, y no me gusta ver cosas incomprensibles con mis ojos.

Teóricamente debería tener un efecto, pero no lo tendrá porque el

SymbolInfoTick(_Symbol, Tick);

_Symbol no se pasa por valor (como se deduce de la descripción en la Ayuda) sino por referencia

 
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.

Gracias, lo comprobaré.


Por favor, piense en esta característica.

int SymbolInfoTicks( const string Symb, MqlTick &Ticks[] ); // Возвращает свежие тики (не более сотни), пришедшие с предыдущего вызова этой функции.


El problema de obtener ticks tardíos sin saltos se resuelve ahora sólo a través de CopyTicks*. Es un mecanismo muy engorroso para esta tarea tan extendida. Es como disparar a los pájaros con un cañón.

De ahí los frenos, la retención de grandes cachés, etc.

 
A100:

Teóricamente debería tener un efecto, pero no lo tiene, porque en

_Symbol no se pasa por valor (como sugiere la descripción en la Ayuda), sino por referencia

Dentro de la función, todavía tenemos que pasar al personaje de la garrapata apropiado. Este es el tiempo necesario para analizar la variable de la cadena. Esto no es necesario con NULL.