Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 73

 
Alexey Viktorov:
Artem, estás equivocado. El array declarado a nivel global es visible en todas las partes del programa y no es necesario pasarlo a algún sitio desde algún lugar. Lo rellenas en un lugar del programa, lo ordenas en otro y lo lees en el tercero, no importa.

La misma función puede ordenar y/o buscar datos en diferentes matrices con éxito. ¿Verdad? Y si es así, es mejor pasar el array por referencia - para el futuro. Y al llamar a la función, no estará de más ver con qué array funcionará.

Sólo estoy haciendo estas consideraciones. ¿En qué me equivoco?

 
Artyom Trishkin:

La misma función puede ordenar y/o buscar datos en diferentes matrices con éxito. ¿Verdad? Y si es así, es mejor pasar el array por referencia - para el futuro. Y al llamar a la función, también deberías poder ver el array con el que trabajará.

Sólo tengo razón en eso. ¿Dónde está el error?

Lo tengo. Tus consejos son para los programadores de lego. No se hace esta perversión.

Eso deja una cosa mal, en que el array debe ser declarado globalmente.

Me alegro de que nos entendamos.

 
Alexey Viktorov:

Lo tengo. Tus consejos son para los programadores de lego. Tú no haces esas perversiones.

Entonces queda una cosa, equivocada sobre que el array tiene que ser declarado globalmente.

Me alegro de que nos entendamos.

Lo que quiero decir en este contexto es lo siguiente:

  1. Tenemos que conseguir el menor número posible de bucles por tic.
  2. Queremos tener un array constante con datos de órdenes y posiciones de mercado y un array con datos de órdenes y posiciones borradas/cerradas
  3. Si tenemos la matriz localmente en una función, llamarla repetidamente requiere llenarla de nuevo. Sugiero que se llene sólo una vez en un nuevo tick - por lo que la matriz es global, de lo contrario la perderíamos al salir de la función.
  4. Para encontrar algo en él (en el array), necesitamos un array lleno y funciones que devuelvan los datos encontrados. Dentro de las funciones, podemos declarar matrices auxiliares para los cálculos necesarios.

Por esta razón, sería mejor tener matrices globales - para órdenes y posiciones cerradas y abiertas. Una vez en un nuevo tick, pasamos la cantidad necesaria de órdenes/posiciones una vez, llenando dos arrays con ellas. Y luego obtenemos todos los datos necesarios de ellos en el mismo momento. Tenga en cuenta que no sólo se calcula la última orden/posición cerrada/abierta y todos sus datos, sino que también se buscan todos los ticks padres e hijos de todas las posiciones en caso de cierre parcial. En consecuencia, en cualquier momento puedo ver de qué billete es tal o cual posición, si se ha cerrado parcialmente más de una vez - todo esto ya funciona en una clase que se ejecuta en un temporizador. Tengo muchos otros datos que necesito con un pequeño número total de ciclos. La profundidad requerida del historial para las matrices se establece para el probador.

Y así sucesivamente...

 
Artyom Trishkin:

En este contexto, mi punto es este:

  1. Tenemos que conseguir el menor número posible de ciclos por tic.
  2. Necesitamos tener un array constante con los datos de las órdenes y posiciones de mercado y un array con los datos de las órdenes y posiciones borradas/cerradas
  3. Si tenemos la matriz localmente en una función, llamarla repetidamente requiere llenarla de nuevo. Sugiero que se llene sólo una vez en un nuevo tick - por lo que la matriz es global, de lo contrario la perderíamos al salir de la función.
  4. Para encontrar algo en él (en el array), necesitamos un array lleno y funciones que devuelvan los datos encontrados. Dentro de las funciones, podemos declarar matrices auxiliares para los cálculos necesarios.

Por esta razón, sería mejor tener matrices globales - para órdenes y posiciones cerradas y abiertas. Una vez en un nuevo tick, pasamos la cantidad necesaria de órdenes/posiciones una vez, llenando dos arrays con ellas. Y luego obtenemos todos los datos necesarios de ellos en el mismo momento. Tenga en cuenta que no sólo se calcula la última orden/posición cerrada/abierta y todos sus datos, sino que también se buscan todos los ticks padres e hijos de todas las posiciones en caso de cierre parcial. En consecuencia, en cualquier momento puedo ver qué billete se originó en una u otra posición, si se ha cerrado parcialmente más de una vez - todo esto ya funciona en una clase que se ejecuta en un temporizador. Tengo muchos otros datos que necesito con un pequeño número total de ciclos. Para el probador, se establece la profundidad deseada de la historia para las matrices.

Y así sucesivamente...

Así que no nos entendemos del todo.

Si el array es global, ¿por qué pasarlo a una función por referencia si ya es visible dentro de esta función?

 
Alexey Viktorov:

Entonces no nos entendemos del todo.

Si el array es global, ¿por qué pasarlo a una función por referencia, si ya es visible dentro de esta función?

Sobrecarga de funciones - existe esta noción ;)

Si necesitas hacer las mismas acciones con diferentes arrays en una función...

Sin embargo - estamos discutiendo diferentes casos especiales...

 
Artyom Trishkin:

Sobrecarga de funciones - existe este concepto ;)

Si necesitas hacer las mismas acciones con diferentes arrays en una función...

Sin embargo - estamos discutiendo diferentes casos especiales...

Bueno, gracias a Dios, entendí tus pensamientos. Pero son muy similares a los consejos a los lego-programadores.
 
Alexey Viktorov:
Bueno, menos mal que entiendo tus pensamientos. Pero son muy parecidos a los consejos para los programadores de lego.

Sería muy extraño tener un gran número de funciones que funcionen al 100% y escribirlas de nuevo cada vez. Este no es un consejo para construir casas de cubos. Es un consejo para acumular sus propias bibliotecas de funciones y clases. ¿Y qué hay de malo en que una función maneje varios arrays dependiendo de cuál se le pase por referencia? ¿Y qué tienen de malo las plantillas de funciones?

Si tienes código para ordenar un array, ¿por qué escribir una función distinta para cada tipo de array? Puedes simplemente sobrecargar y ordenar cualquier tipo. ¿Cómo crees que funciona ArraySort()? Allí se pasan diferentes tipos de arrays, y en una salida se recibe el ordenado que se pasó - ¿o las meta cuotas también lego-codifican o qué?

 
Artyom Trishkin:

Sería muy extraño tener un gran número de funciones que funcionen al 100% y escribirlas de nuevo cada vez. Este no es un consejo para construir casas de dados. Es un consejo para acumular sus propias bibliotecas de funciones y clases. ¿Y qué hay de malo en que una función maneje varios arrays dependiendo de cuál se le pase por referencia? ¿Y qué tienen de malo las plantillas de funciones?

Si hay código para ordenar un array, ¿por qué debemos escribir una función distinta para cada tipo de array? Puedes hacer una sobrecarga y ordenar cualquier tipo. ¿Cómo crees que funciona ArraySort()? Allí pasas diferentes tipos de arrays, y la salida es una ordenada, que pasaste - o metacotizaciones también lego-codificadores, o qué?

Lo principal es no llegar a esto.

https://www.mql5.com/ru/forum/165468/page3#comment_3978059

Простой советник. Проверка размера бара. Покупка/продажа
Простой советник. Проверка размера бара. Покупка/продажа
  • www.mql5.com
Что должен делать советник: на каждом тике проверять размер бара как только размер бара станет равным или превысит заданный размер то: если свеча б...
 
Alexey Viktorov:

Lo principal es no llegar a esto.

https://www.mql5.com/ru/forum/165468/page3#comment_3978059

No sirve de nada. Tiene un control para comprobar y luego un control para ver si es correcto. Todavía está torcido. Ese no es el caso, ahí es donde se necesitan profesores.
 

hay una variable

int Nivel = 0;

Mientras el programa está en marcha, cambia constantemente. Ayúdame a escribir una condición: si el Nivel NO ha cambiado, no hacer nada, si el Nivel ha cambiado (no importa si ha cambiado más o menos), hacer alguna acción { operador }