Array multidimensionalMuy buenos días.
Tengo un problema en la programación de un indicador. Necesito un array bidimensional con la segunda dimensión variable. En C directamente lo declararía así: double array[x][y]; Pero MQL4 no me lo permite. Así que intenté saltarme el problema con el siguiente código: switch (Barras) { case 3: double trainingData[][4]; double liveData[][4]; break; case 4: double trainingData[][5]; double liveData[][5]; break; case 5: double trainingData[][6]; double liveData[][6]; break; } Pero al compilar me dice, en case 4 y 5, que los arrays ya fueron declarados (en case 3m entiendo). ¿A alguien se le ocurre cómo resolverlo?
Re: Array multidimensionalEntiendo que es normal que no te deje hacer declaraciones diferentes de un mismo array en tiempo de compilación con condiciones de tiempo de ejecución.
Si no te deja definir arrays dinámicas, crea un array con el máximo de dimensiones que necesites y te guardas los Indices Max utilizados, para hacer los bucles controlados con tus indices. Algo así... double trainingData[][6]; double liveData[][6]; switch (Barras) { case 3: int idxMax = 4; break; case 4: int idxMax = 5; break; case 5: int idxMax = 6; break; } for(i=0;i<=idxMax;i++)... No sé si te vale para lo que necesitas hacer...
Re: Array multidimensionalAntes que nada, muchas gracias por la respuesta.
Lo que apuntas es una posibilidad. Lo que sucede es que estoy programando una red neuronal, mediante llamadas a funciones definidas tipo FANN4MQL. Claro, estas funciones no controlan el índice máximo. Para hacer lo que tú aconsejas, debería rehacer esas funciones (no creo que sea demasiado complicado. Si acaso, un poco arduo). Pero bueno, es una solución posible. Estaba intentándolo por otra vía. Tal vez más compleja, porque tengo que desempolvar C puro (no C++), pero me sirve para entretenerme y, a lo mejor, si le saco partido, podría servirle a mucha más gente. La solución contra la que me estoy peleando trata de crear una .dll en C, que contenga y exporte las funciones necesarias para crear y/o redimensionar arrays de hasta 4 dimensiones (máximo permitido por MQL4). Es un poco difícil, pero me gustan estos retos. Si lo consigo os lo posteo. Mientras tanto, naturalmente siguen aceptándose soluciones más sencillas, por favor.
Re: Array multidimensionalTema realmente interesante...
Hace un tiempo me dedique a programar RNA en .NET, es alucinante ver de que son capaces estos algoritmos de aprendizaje. Lo realmente importante son los patrones de aprendizajes que les ejecutes, si la red "sobreaprende", simplemente tendrás respuestas aprendidas pero no seguirá un patron, si no aprende correctamente el patrón indicado te puede dar respuestas imprevisibles... Sobre el tema de arrays mírate la función ArrayResize() a ver si te permite redimensionar la segunda dimensión del Array... http://docs.mql4.com/array/ArrayResize Salu2.
Re: Array multidimensionalNo, ArrayResize() sólo permite redimensionar la primera.
Casi tengo resuelto el asunto. Ya he sido capaz de crear la .dll (con Visual C++ Express), exportar la función y ejecutarla en un .mq4 Aún no obtengo los resultados esperados, seguramente por alguna cuestión relativa al modo de pasar el array a la función (por valor o por referencia). O sea, que me estoy divirtiendo pero aún me falta un último empujón. Ya os cuento...
Re: Array multidimensionalesto esta bien interesante, estare atento a los progresos y comentas como podemos hacerlo nosotros.
Saludos
6 mensajes
• Página 1 de 1
|
|
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados