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

 
Vitaly Muzichenko #:

Copiar en una matriz

¿Cómo obtener el máximo de un array?

Adicionalmente copie CopyHigh y obtenga el máximo de esta matriz. Entiendo que a través de ...ello... pero la única otra forma es probar de nuevo en el bucle.

 
Alexey Viktorov #:

Adicionalmente copie CopyHigh y obtenga el máximo de esta matriz. Entiendo que a través de ...ello... pero la otra opción es sólo el bucle.

Lo hice, pero es una copia adicional. El uso de un bucle tampoco es una opción.

Lo dejaré conCopyHigh.

 
Vitaly Muzichenko #:

Lo hice, pero es una copia extra. Atravesar el bucle tampoco es una opción.

Lo dejaré a través deCopyHigh entonces.

Llevo mucho tiempo pensando en ello. Y he llegado a la conclusión, de que si necesitamos buscar el mínimo/máximo del array MqlRates, es mejor copiar los datos requeridos a diferentes arrays dobles.

 
Vitaly Muzichenko #:

Copiar en una matriz

¿Cómo puedo obtener el máximo de un array?

CopySymb[i].high
 
Vitaly Muzichenko #:

Copiar en una matriz

¿Cómo puedo obtener el máximo de la matriz?

Puedes escribirlo directamente en el código:

MqlRates CopySymb[];
double maxHigh;
int iMaxHi, len;  

if((len = CopyRates(mSymbol,PERIOD_CURRENT,0,6,CopySymb))<0) return;

iMaxHi = 0;
maxHigh = CopySymb[0].high;

for (int i = 1; i < len; i++)
  if(CopySymb[i].high > maxHigh) {
    maxHigh = CopySymb[i].high;
    iMaxHi = i;
  }

Print(iMaxHi, ": ", maxHigh);

Y está bien que ArrayMaximum no funcione con arrays MqlRates.

 
Mihail Matkovskij #:

Podrías escribirlo directamente en el código:

pero si lo piensas bien...

incluso en este corto código hay errores brutales

 
Maxim Kuznetsov #:

¿y si lo piensas?

incluso en este corto código hay errores brutales

Escribió el código en línea. Lo he revisado y he corregido todos los errores, creo. Pega el código en el script y el compilador mostrará los errores si los hay.

 
Mihail Matkovskij #:

Escribió el código en línea. Lo he revisado y he corregido todos los errores, creo. Inserte el código en el script y el compilador mostrará los errores si los hay.

No hay cura con el compilador, sólo hay que saber: puede haber 0 y EMPTY_VALUE en el resultado de CopyXXX. Muy pocas veces pero bien. EMPTY_VALUE es DBL_MAX, es decir, el valor máximo. Eso es lo que encontrarás.

no se comprueba la corrección de los valores recibidos del exterior.

 
Maxim Kuznetsov #:

Esto no se puede arreglar con el compilador, sólo hay que saber: los resultados de CopyXXX pueden contener 0 y EMPTY_VALUE. Rara vez, pero a menudo. EMPTY_VALUE es DBL_MAX, es decir, el valor máximo. Eso es lo que encontrarás.

No se comprueba la corrección de los valores recibidos del exterior.

¿Esperas que CopyRates devuelva 0,EMPTY_VALUE oDBL_MAX en un array alto? ¿Hablas en serio? :)

¿Tal vez pueda mostrarme un ejemplo en el que ocurra?

 
Mihail Matkovskij #:

¿Crees que CopyRates devolverá 0,EMPTY_VALUE oDBL_MAX en un array alto? ¿Hablas en serio? :)

¿Tal vez pueda mostrarme un ejemplo en el que ocurra?

¿Y qué hará ArrayMaximum cuando llegue a0,EMPTY_VALUE oDBL_MAX en el array doble rellenado con CopyHigh?

¿Dónde está la lógica de tu afirmación?