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

 
fxsaber:

Más rápido.

Hace lo mismo: devuelve el valor de la función. Pero también hace comprobaciones previas.
Dentro de la función en sí también hay comprobaciones para el valor pasado del nombre del símbolo, y de él - ya sea "si un parámetro de cadena simple en lugar de Symbol(), _Symbol o NULL, a continuación, comprueba el programa completo y más solicitud de propiedades", o utiliza los valores del símbolo actual de la caché sin comprobaciones adicionales.
¿Por qué los hace una vez más y sigue afirmando que acelera la recuperación de datos? No entiendo la lógica de tal razonamiento.

Por cierto, siempre lo hago en mis funciones, pero no creo que de alguna manera acelere la recuperación de datos, sino que la ralentiza debido a las comprobaciones del valor del nombre del símbolo pasado en mi función.

 
Artyom Trishkin:

¿Por qué los hace de nuevo, y sin embargo afirma que acelera los datos?

Tú mismo has citado la explicación.

 
Slava:

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

¿Es lo mismo en MT4? ¿Y en MT5 Tester qué pasa?

 
Artyom Trishkin:

Por cierto, siempre hago esto en mis funciones

Muéstrame, por favor.

 
fxsaber:

Tú mismo has citado la explicación.

Exactamente - todo se hace dentro de la función regular. ¿Por qué duplicarlo también en el exterior?

 
Artyom Trishkin:

Exactamente - todo se hace dentro de la función regular. ¿Por qué duplicarlo también en el exterior?

Entonces no has entendido la explicación. La velocidad de las dos llamadas es diferente.

void OnTick()
{
  static const string Symb = _Symbol;
  MqlTick Tick;
  
  SymbolInfoTick(_Symbol, Tick);
  SymbolInfoTick(Symb, Tick);  
}
 
fxsaber:

Por favor, muéstrame.

¿Todas las funciones y métodos donde se hace esto conmigo?

Hay demasiados.

 
Artyom Trishkin:

¿Todas las funciones y métodos donde lo hago?

Uno es suficiente.

 
fxsaber:

Entonces no has entendido la explicación. La velocidad de las dos llamadas es diferente.

Parece que lo he entendido todo. Por supuesto que es diferente. ¿Y cómo lo has acelerado? Se pasa un valor que no es el símbolo actual a la función en un caso - si es not_Symbol.

Aquí, en el caso de pasar el valor anterior a la función, ésta no realiza comprobaciones y toma el valor del símbolo actual de la caché.

En otros casos, consulta los datos del símbolo especificado con la comprobación "programa completo" + su presencia en el resumen del mercado. Su función "rápida" no se libra de estas comprobaciones cuando solicita datos de un símbolo no nativo. Entonces, ¿dónde está la aceleración?

bool SymbolInfoTickFast( const string &Symb, MqlTick &Tick )
{
  return((Symb == _Symbol) ? SymbolInfoTick(_Symbol, Tick)
                           : SymbolInfoTick(Symb, Tick));
}

Sólo dos opciones en su función cuando se llama if(SymbolInfoTickFast(Symbol(), tick_array)) {}

  1. obtener datos del símbolo actual - llamar a SymbolInfoTick con el parámetro _Symbol (quick)
  2. obtener otros datos del símbolo - llamar a SymbolInfoTick con el parámetro de la cadena (lento)

Otra cosa, si usted (en su costumbre de definir todo lo que se mueve) crea una variable de cadena para el símbolo actual, entonces sí - tiene que hacer comprobaciones aquí y reemplazar su macro sustitución con una variable predefinida, o llamar a Symbol()

 
Artyom Trishkin:

¿Cómo lo has acelerado?

Me resulta difícil explicar lo evidente.
const MqlTick GetMarketWatchTick( const string &Symb )
{
  MqlTick Tick = {0};

  SymbolInfoTick(Symb, Tick);

  return(Tick);
}

void OnTick()
{
  MqlTick Ticks[1];
  
  Ticks[0] = GetMarketWatchTick(_Symbol);
  ArrayPrint(Ticks);
}
En este código, es posible acelerar GetMarketWatchTick.