Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 731

 
Vitalie Postolache:

¿No es 10.000 x 10.000 bidimensional?

double arr[10000][10000];

y todo eso...

Top2n:
Bueno sí es bidimensional, no es así como lo puse, aparentemente no es una matriz sino un array. ¿Una matriz implica multidimensionalidad?
Estoy de acuerdo. Eso no es lo que se dijo, además se malinterpretó.

Lo que se frena en este código no es la escritura de un array sino un bucle dentro de un bucle.
 
Alexey Viktorov:
De acuerdo. Eso no es lo que se dijo y se malinterpretó.

Lo que frena en este código no es la escritura del array sino el bucle en el bucle.

¿Es necesario portar a otro entorno de programación, o no es un problema común para todo tipo de lenguajes? ¿Cuál puede ser la solución para acelerar?

Si un bucle y aumentar el valor de la variable del bucle eliminado

         for(int q=0; q<ARRAY_SIZE_X*ARRAY_SIZE_Y; q++) // Перебор по периоду, колонка X
                 {
                  int arr++
                  if(arr=ARRAY_SIZE_X) {z++;arr=0;}

                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);


Puede que lo haya comprobado, pero no quiero dar problemas al ordenador: si no se acelera, el disco duro volverá a sufrir un estrés adicional)))

 
Top2n:

¿Es necesario pasar a otro entorno de programación, o no es un problema común para todo tipo de lenguajes? ¿Cuál puede ser la solución para acelerar?

Si un bucle y aumentar el valor de la variable de bucle eliminado en él, ¿se acelerará?

Podría comprobarlo, pero no quiero torturar al ordenador, si no se acelera, volverá a estresar el disco duro)))

¿Y no puedes escribir el array después del bucle? ¿Se puede hacer sólo en cada línea? Me refiero a la primera variante, en la que el bucle está en el bucle.
 
Vitalie Postolache:
¿No puedes escribir el array después del bucle? ¿Es posible hacerlo sólo en cada línea? Me refiero a la primera variante en la que el bucle está en el bucle.
Un array de este tamaño no cabría en la RAM asignada.

Por supuesto, puede insertar adicionalmente un contador y escribir en este contador, no en cada línea por separado, pero es poco probable que acelere el proceso tanto como para que se note sin medir.
 
Alexey Viktorov:
Un array de este tamaño no cabría en la RAM asignada.

Por supuesto, puede insertar adicionalmente un contador y registrar por este contador, no por cada fila por separado, pero es poco probable que acelere tanto el proceso que se note sin medir.

Por favor, dime que la documentación dice (y también el compilador) que: "La banderaAS_SERIES no puede establecerse para matrices multidimensionales"

Pregunta: ¿Cómo puedo ordenar un array en mql5?

void Func()
{
double m[][3];

if(условия)
  {
   // много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
  }
 BySort(m); // передаём в функцию "BySort"
}

void BySort(double &mas[][3])
{
// Сортируем по размеру лота от большего к меньшему
  ArraySort(mas);
  ArraySetAsSeries(mas,true); // при такой записи mql5 ругается, в mql4 работает

 ... здесь работа с массивом и основной код 

}
 
Vitaly Muzichenko:

Por favor, avisa, la documentación dice (y también el compilador) que: "La banderaAS_SERIES no se puede establecer para matrices multidimensionales".

Pregunta: cómo ordenar el array:

double m[][3];

if(условия)
 {
// много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
 }

void BySort(double &mas[][3])// выделенное лишнее
 {
// Сортируем по размеру от большего к меньшему
  ArraySort(mas, WHOLE_ARRAY, 0, MODE_DESCEND); // вот это не работает в mql5

  ArraySort(mas);
  ArraySetAsSeries(mas,true);
// а при такой записи ругается // это тоже лишнее
 }
AS_SERIES y la clasificación son conceptos completamente diferentes.

1 - cambia la dirección de la indexación de las celdas del array sin cambiar su contenido y 2 - cambia el contenido de las celdas sin cambiar su indexación para que se ordenen de forma ascendente o descendente.

Además, la documentación dice que el array sólo puede ordenarse por la primera dimensión.
 
Alexey Viktorov:
AS_SERIES y la clasificación son conceptos completamente diferentes.

1 - cambia la dirección de la indexación de las celdas del array sin cambiar su contenido, y 2 - sin cambiar la indexación cambia el contenido de las celdas para que se ordenen de forma ascendente o descendente.

Además, la documentación dice que el array sólo puede ordenarse por la primera dimensión.

Aquí se clasifica en orden ascendente

ArraySort(mas);

¿Cómo lo invierto ahora? Tiene que estar en orden descendente, está clasificando lotes.

 
Vitaly Muzichenko:

Aquí se clasifica en orden ascendente

ArraySort(mas);

¿Cómo lo invierto ahora? Lo necesitas en orden descendente, ordena los lotes.

Vaya. Es la primera vez que miro la clasificación en mql5. Estoy usando mql4 de memoria. Si este es el caso, puede invertir el bucle de lectura. Si necesitas buscar un valor concreto, te devolverá el índice del array, independientemente de cómo lo ordenes.

Y la opción más tonta es reescribir toda la matriz en el orden inverso. ¿Merece la pena?
 
Vitaly Muzichenko:

Aquí se clasifica en orden ascendente

ArraySort(mas);

¿Cómo lo invierto ahora? Lo necesitas en orden descendente, ordena los lotes.

¿Y si después de la ordenación se cambia el orden de indexación utilizando ArraySetAsSeries?
 
Vitalie Postolache:
¿Qué pasa si, después de ordenar, cambias el orden de indexación usando ArraySetAsSeries?

Entonces es así:

Razón de la queja: