Mt4 Fin de soporte. - página 44

 
Реter Konow:

Ahora dime: ¿he completado la tarea?

Vosotros (tanto Pedro como los opositores) lo estáis enfocando desde el lado equivocado. La tarea puede realizarse en ambos sentidos.

Un ensamblador vendrá y dirá que puede hacerlo aún más eficazmente y con un consumo aún menor de recursos informáticos.

¿Pero qué sentido tiene?

En mi opinión, debemos pensar en la eficiencia sólo cuando nos falte velocidad o memoria. Cuando se tiene suficiente, es más importante que sea fácil mantener y modificar el sistema. Aunque suponga un detrimento de la velocidad del programa y de la memoria utilizada.

Los nombres rusos no me molestan, lo único que me molesta - estoy acostumbrado a los prefijos, para que se pueda entender inmediatamente el tipo de variable por su apariencia. Y el identificador ruso o inglés - la diferencia no es grande (1C - hay mucho ruso).

Pero sobre todo me sorprende el rechazo voluntario de un depurador. Es sólo masoquismo... Puedo entender cuando no hay depurador (en su día no había depuración de datos históricos) - hay que retorcer, emitir mensajes de depuración, registros... Pero si tienes un depurador, ¡es mucho más cómodo y eficiente trabajar con él!

 
George Merts:

Vosotros (tanto Pedro como los opositores) lo estáis enfocando desde el lado equivocado. La tarea puede realizarse en ambos sentidos.

Un ensamblador vendrá y dirá que puede hacerlo aún más eficazmente y con un consumo aún menor de recursos informáticos.

¿Pero qué sentido tiene?

En mi opinión, debemos pensar en la eficiencia sólo cuando nos falte velocidad o memoria. Cuando se tiene suficiente, es más importante que sea fácil mantener y modificar el sistema. Aunque suponga un detrimento de la velocidad del programa y de la memoria utilizada.

Los nombres rusos no me molestan, lo único que me molesta - estoy acostumbrado a los prefijos, para que se pueda entender inmediatamente el tipo de variable por su apariencia. Y el identificador ruso o inglés - la diferencia no es grande (1C - hay mucho ruso).

Pero sobre todo me sorprende el rechazo voluntario de un depurador. Es sólo masoquismo... Puedo entender cuando no hay depurador (en su día no había depuración de datos históricos) - hay que retorcer, emitir mensajes de depuración, registros... Pero si tienes un depurador, ¡es mucho más cómodo y eficiente trabajar con él!

George, no tenía ni idea de cómo usar un depurador. Ni siquiera sabía o se preguntaba para qué servía. Así que aquí no hay masoquismo. Y ahora es demasiado tarde.
 

Peter, has sustituido la tarea. Su solución se necesita a veces, pero muy raramente, y no puramente en esta forma, pero similar.

Más a menudo una tarea diferente - aparición de nuevas barras debe ser rastreado en diferentes lugares del programa. Por lo tanto, pasar un símbolo y un marco temporal a las funciones y buscarlos en matrices no es una buena solución en absoluto. Como la función isNewBar tiene una variable estática, tenemos que hacer una copia de la función para cada símbolo del marco temporal. Es posible pasar a la función una variable para el último plazo por referencia.

Pero hay una variante ideal con OOP - crea su propio objeto para cada símbolo - marco de tiempo.

Esto es, si no tenemos en cuenta que la función isNewBar no es necesaria en absoluto, sólo para estereotipar de nada que hacer.

 
Dmitry Fedoseev:

Peter, has sustituido la tarea. Su solución se necesita a veces, pero muy raramente, y no puramente en esta forma, pero similar.

Más a menudo una tarea diferente - aparición de nuevas barras debe ser rastreado en diferentes lugares del programa. Por lo tanto, pasar un símbolo y un marco temporal a las funciones y buscarlos en matrices no es una buena solución en absoluto. Como la función isNewBar tiene una variable estática, tenemos que hacer una copia de la función para cada símbolo del marco temporal. Es posible pasar a la función una variable para el último plazo por referencia.

Pero hay una variante ideal con OOP - crea su propio objeto para cada símbolo - marco de tiempo.

Es decir, si no consideramos que la función isNewBar no es necesaria en absoluto, es puramente a la basura, de nada que hacer.

No he cambiado nada. Acabo de resolver esta tarea de una manera diferente. Siguiendo tu lógica, debo haber llegado inevitablemente a la necesidad de la POO. Sin embargo, lo mires como lo mires, puedes utilizar mi solución con seguridad. Cualquier función, en cualquier momento y desde cualquier lugar del programa accede a la matriz global para un nuevo evento de barra en cualquier símbolo y cualquier marco temporal.

No importa cuántos símbolos y cuántos plazos haya: en mi solución su número no aumenta la carga del sistema. Sólo hay que mirar la matriz: si hay un nuevo evento de barra o no.

Puede reducir la lista de símbolos si no los toma del informe de mercado sino que los escribe manualmente en la matriz Symbols[]. Por favor.


Añadido:

Por cierto, tenga en cuenta que la función New_bar() ya no existe. Realmente ha resultado ser innecesario. Tenías razón.

 
Реter Konow:

Se me encargó: hacer que pudiera obtener nuevos eventos de barra de un conjunto de símbolos, en un conjunto de plazos, sin OOP, y que fuera un código corto y eficiente.

Ahora dime: ¿he completado la tarea?

Absolutamente sí. Pero... Lo que pasa es que mi sugerencia se torció un poco y como resultado la entendiste como la entendiste. En el mercado de divisas, sólo le interesan los datos que necesita aquí y ahora. Necesito la información para un símbolo y para el período actual, eso es todo - los otros no me interesan. Necesitamos la información para otro símbolo y un periodo determinado, entonces el mismo código debería obtenerla. Y no es necesario sobrecargar el sistema con la recepción de información, que ahora no es necesaria.

No es tu culpa, simplemente sucedió. Traté de detenerte, pero no pude.

 
Dmitry Fedoseev:

Peter, has sustituido la tarea.

No lo cambió. Fue la forma en que se parafraseó la frase la que lo entendió así.

 
Alexey Viktorov:

Por supuesto que sí. Pero... Resulta que mi sugerencia se ha tergiversado un poco y como resultado se ha entendido como se ha entendido. En el mercado de divisas, sólo le interesan los datos que necesita aquí y ahora. Necesito la información sobre un símbolo y el período actual, eso es todo - los otros no me interesan. Necesitamos la información para otro símbolo y un periodo determinado, entonces el mismo código debería obtenerla. Y no es necesario sobrecargar el sistema con la recepción de información, que ahora no es necesaria.

No es tu culpa, simplemente sucedió así. Traté de detenerte, pero no pude.

No hay problema, sólo tienes que escribir los nombres de los símbolos necesarios en la matriz Symbols[].

Eliminar el registro de OnInit():

   for(int a1 = 0; a1 < All_symbols; a1++)
     {
      Symbols[a1] = SymbolName(a1 + 1,true); 
      //Возможно, нумерация символов в обзора рынка идет с нуля.
      //Тогда: Symbols[a1] = SymbolName(a1,true);
     }

E inicializar el array en el ámbito global:

Symbols[3] = {"EURUSD","AUDUSD","GBPUSD"};

Y eliminar los plazos innecesarios de la matriz Timeframes[];

int    Timeframes[3] = {PERIOD_M1,PERIOD_M5,PERIOD_M15};

Cambia la variable.

int    All_Timeframes = 3;

Y cambiar la variable All_Symbols:

int    All_symbols = 3;

De este modo, sólo recibirá eventos para los símbolos y los plazos adecuados.

Añadido:

También elimine la configuración del tamaño del array en OnInit(), ya que conoce el número de símbolos:

   //-------------------------------------------------------------   
   All_symbols = SymbolsTotal(true);
   //---------------------------------------------------------   
   ArrayResize(Symbols,All_symbols);
   //---------------------------------------------------------
   ArrayResize(All_bars_table,All_symbols);
   //---------------------------------------------------------
 
Реter Konow:

No he sustituido nada. Acabo de resolver este problema de manera diferente. Siguiendo tu lógica, inevitablemente tuve que llegar a la necesidad de la POO. Sin embargo, lo mires como lo mires, puedes utilizar mi solución con seguridad. Cualquier función, en cualquier momento y desde cualquier lugar del programa accede a la matriz global para un nuevo evento de barra en cualquier símbolo y cualquier marco temporal.

No importa cuántos símbolos y cuántos plazos haya: en mi solución su número no aumenta la carga del sistema. Sólo hay que mirar la matriz: si hay un nuevo evento de barra o no.

Puede reducir la lista de símbolos si no los toma del informe de mercado sino que los escribe manualmente en la matriz Symbols[]. Por favor.


Añadido:

Por cierto, fíjate: la función New_bar() ha desaparecido. Realmente resultó ser innecesario. Tenías razón.


Si es así, como se destaca en negrita - en la papelera.

 
Dmitry Fedoseev:

Si es así, como se muestra en negrita, va a la papelera.

¿Por qué?
 
Реter Konow:

No hay problema, simplemente escribe en el array Symbols[] los nombres de los símbolos que quieras y listo.

Eliminar la entrada de OnInit():

E inicializar el array en el ámbito global:

Y eliminar los plazos innecesarios de la matriz Timeframes[];

Cambiar la variable

Y cambiar la variable All_Symbols:

De este modo, recibirá eventos sólo para los símbolos y plazos necesarios.


Peter, para. No necesito ninguna otra función para definir una nueva barra que no sea la mía. Pues resulta que todo tu trabajo duro se ha vuelto innecesario, lo siento.