Cálculo de una matriz durante la optimización - página 2

 
fxsaber:
Adjuntar recursos. No preguntes cómo. No escribí el código fuente.
¿Necesita un software de terceros para crear una matriz?
 
forexman77:

Así que tengo un dilema: cómo hacer posible leer de un archivo una vez, llenar un array con él y usar este array en todas las pasadas.

Necesito esto para reducir el tiempo de optimización, porque el array siempre estará sin cambios y es costoso leerlo cada vez.

Bien, por ejemplo, escriba un script que prepare y recoja todos los datos en un array, y luego escriba el array terminado en un archivo. Y luego leer esta matriz desde el archivo durante la inicialización en el Asesor de Expertos. El archivo se puede utilizar tantas veces como sea necesario, con cada ejecución del EA.
Creo que esta solución ya se le ha sugerido. ¿No le conviene?
 
forexman77:
¿Utilizando software de terceros para crear una matriz?
Sí, por el mismo MQL5 con una pasada separada antes de la optimización.
 
BlackTomcat:
Por ejemplo, escriba un script que prepare y recoja todos los datos de un array y luego escriba el array listo en un archivo. Y luego leer esta matriz desde el archivo durante la inicialización en el EA. El archivo se puede utilizar tantas veces como sea necesario, con cada ejecución del EA.
Creo que esta solución ya se le ha sugerido. ¿No le conviene?

Sí, esa es la cuestión, no encaja. Hay 15.000 pases en la optimización. Y sólo necesito una vez para calcular y en las siguientes pasadas sólo para dirigirme a un array.

Es decir, ya tengo datos en el archivo que están calculados de antemano y nivelados, y los conozco de antemano. E incluso leer el archivo cada vez en el init es muy costoso (hay miles de líneas). No sé si en MQL5, pero en MQL4 escribieron en el foro que el programa pasa el init en cada pasada.

 
forexman77:
¿Será necesario leer en el inite en cada pase?
Sí, no es difícil ni costoso. Utiliza el modo binario. Puede que no lea todo el archivo, sino que empiece por la posición deseada.
 
forexman77: E incluso leer el archivo cada vez inite, en cada pasada es muy costoso (varios miles de líneas). No sé sobre MQL5, pero en MQL4 escribieron en el foro que el programa toma un init en cada pasada.
Creo que exageras en cuanto a los gastos relacionados con la lectura de la matriz desde el archivo. Cada vez que Windows se despierta del modo de suspensión, restaura desde el disco duro la imagen de su estado que tenía en el momento de entrar en suspensión, incluyendo el estado de todas las aplicaciones. ¿Cree que no hay suficientes objetos e información allí? ¿Y cuánto tiempo se tarda en salir del sueño así?
Estás exagerando, en mi opinión.
 
forexman77:

Sí, esa es la cuestión, no encaja. Hay 15.000 pases en la optimización. Y sólo necesito una vez para calcular y en las siguientes pasadas sólo para dirigirme a un array.

Es decir, ya tengo en el archivo datos calculados de antemano y nivelados, y los conozco de antemano. E incluso leer el archivo cada vez en el init es muy costoso (hay miles de líneas). No sé si en MQL5, pero en MQL4 escribieron en el foro que el programa pasa el init en cada pasada.

Un truco clásico del mundo C/C++ : puedes hacer/convertir un array estático desde tu archivo (sólo texto: double arr[100500]={1,2,3....} ) y simplemente incluirlo a través de #include.

 
BlackTomcat:
Creo que exageras con lo de los costes de leer un array desde un archivo. Cada vez que Windows se despierta del modo de suspensión, restaura desde el disco duro una imagen del estado que tenía en el momento de entrar en suspensión, incluyendo el estado de todas las aplicaciones. ¿Cree que no hay suficientes objetos e información allí? ¿Y cuánto tiempo se tarda en salir del sueño así?
Estás exagerando, en mi opinión.

Los costes son mayores sin lugar a dudas. Hay dos variantes con la configuración del indicador sin cambios y con los mismos valores, pero ya escritos en un archivo, que se vuelcan en un array.

La variante con el archivo tarda muchas veces más en ser calculada que la variante con el cálculo del indicador en el Asesor Experto.

Estaba pensando que tal vez haya una forma de guardar el array una vez y usarlo para todas las pasadas de optimización, aliviando así la carga del algoritmo.

 
Maxim Kuznetsov:

Un truco clásico del mundo C/C++: puedes hacer/convertir un array estático desde tu archivo (sólo texto: double arr[100500]={1,2,3....} ) y simplemente incluirlo mediante #include.

Si lo hace, ¿se guardará la matriz cuando cambie a un nuevo pase?
 
forexman77:

Los costes son mayores sin lugar a dudas. Hay dos variantes con la configuración del indicador sin cambios y con los mismos valores, pero ya escritos en un archivo, que se vuelcan en un array.

La variante con el archivo tarda muchas veces más en ser calculada que la variante con el cálculo del indicador en el Asesor Experto.

Sólo pensé que tal vez hay una manera de almacenar la matriz una vez y utilizarla para todos los pases de optimización, aliviando así la carga del algoritmo.

Calcula UN tiempo y guarda la matriz con los resultados en un archivo. Y luego leer el array terminado desde el archivo durante la inicialización y utilizarlo inmediatamente. No es necesario volver a calcular. Ya has calculado todo antes y lo has guardado. ¿Por qué contar de nuevo? :)
Razón de la queja: