[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 306

 
drknn:

Se puede declarar una matriz de longitud "infinita" en un indicador. Decláralo y luego en el bucle escribe inmediatamente los valores encontrados en el array. La única pregunta es cómo transferir la selección necesaria al Asesor Experto/Script? Hay algunas herramientas, pero hay que evaluar la complejidad. Tal vez sería realmente más fácil hacer 2 ejecuciones - en la primera calculamos el número de valores filtrados, luego cambiamos la dimensión del array, y en la segunda introducimos los valores en el array?

Gracias, pero la variante con el indicador no es adecuada - antes de pasar la muestra obtenida al Asesor Experto, hay un problema con el paso de las condiciones de la muestra del Asesor Experto al indicador.
 
PapaYozh:

Declarar un array más grande que el tamaño máximo requerido.


Exactamente :) Funcionará si aumentamos el tamaño muchas veces. Por ejemplo, sabemos de antemano que el número de valores filtrados no puede ser superior a mil. Declaremos un array de varios miles de celdas y ya está :)

Pero se llevará parte de la memoria necesaria. :(

 
drknn:


Exactamente :) Funcionará si aumentamos el tamaño muchas veces. Por ejemplo, sabemos de antemano que el número de valores filtrados no puede ser superior a mil. Declaremos un array de varios miles de celdas y ya está :)

Pero se llevará parte de la memoria necesaria. :(


Si "sabemos de antemano que el número de valores filtrados no puede ser superior a mil", basta con declarar un array de tamaño 1000.
 
splxgf:

https://docs.mql4.com/ru/math/MathPow ¿no? O las operaciones elementales son una condición del problema. Entonces la opción http://bpascal.ru/download/desc/436.php si lo haces todo a mano, entonces implementa el exponente y el logaritmo con tus propias funciones.

Sí, exactamente según la condición. Gracias por el enlace, ¡es exactamente lo que necesito!
 
Elenn:
Buenas tardes, un consejo: El bucle busca los valores que cumplen ciertas condiciones. Los valores encontrados se escriben en un array. No se sabe de antemano cuántos valores se van a encontrar, por lo que se desconoce el tamaño del array a declarar. Desde el punto de vista del tiempo y los recursos, preferiría no hacer dos ejecuciones (para poder contar el número de valores encontrados en la primera ejecución, declarar el array y escribir datos en el array en la segunda). ¿Hay alguna forma de obtener el resultado deseado en una sola pasada?
Puede aumentar el tamaño de la matriz en una celda por cada valor encontrado. Pero esto no es muy rápido. Se puede optimizar aumentando el tamaño en varias celdas, y luego omitir el cambio de tamaño durante varias iteraciones.
 
PapaYozh:

Si "sabe de antemano que el número de valores filtrados no puede ser superior a mil", puede declarar simplemente una matriz de tamaño 1000.


Pero, ¿qué hay de un plan de contingencia en caso de fuerza mayor? ¿Escribirías un código que informara de un error y bloqueara el Asesor Experto? Bueno, una persona podría no verlo - bueno, él estaba en el trabajo en ese momento.

Sí, efectivamente, hay más de una solución al problema. Creo que la mejor solución es la sugerida por Zhunko: aumentar dinámicamente la dimensionalidad del array dentro del bucle de filtrado. Francamente, estoy encantado con esta respuesta. Nunca se me ocurrió :)

 
drknn:


Creo que la mejor sigue siendo la sugerida por Zhunko - aumentar dinámicamente la dimensionalidad del array dentro del bucle de filtrado. Sinceramente, estoy encantado con esa respuesta. Nunca se me ocurrió :)

La solución es realmente original, debería probarla. Pero al volver a declarar el array, ¿no se perderán los datos debido a la reinicialización?
 
Elenn:
La solución es realmente original, deberíamos probarla. Pero cuando se vuelve a declarar el array, ¿no se perderán los datos debido a la reinicialización?

Lo hago a menudo. Creo una matriz inicial. Luego (si es necesario) lo maximizo en algún valor (no se puede, se tarda demasiado en realizar las operaciones del array) y sólo compruebo el tamaño del array realmente lleno en mi trabajo. Hasta ahora, no ha habido problemas
 
Vinin:

Las operaciones de la matriz tardan demasiado en completarse
¿Son largas todas las operaciones de la matriz, o sólo algunas?
 
Elenn:
¿Tarda mucho tiempo en realizar cualquier operación de matriz o sólo algunas?

Especialmente al redimensionar un array. Es mejor hacerlas con la menor frecuencia posible
Razón de la queja: