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

 
Vitalie Postolache:
¿Qué pasa si después de clasificar cambias el orden de indexación usando ArraySetAsSeries?
ArraySetAsSeries no se aplica a las matrices multidimensionales.
 
Alexey Viktorov:
ArraySetAsSeries no se aplica a las matrices multidimensionales.

Sí, no se aplica. Y quién sabe lo que se aplica, por favor responda.

 
Vitaly Muzichenko:

Sí, no se aplica. Y quién sabe lo que se aplica, por favor responda.

A veces utilizo la ordenación por burbujas en un array bidimensional. Puede seleccionar la dirección y la dimensión por la que se va a ordenar
 
Artyom Trishkin:
A veces utilizo la ordenación por burbujas en un array bidimensional. Puede elegir la dirección y la dimensión por la que se va a clasificar

Ir a tu casa por el código, o publicarlo, si no te importa)

Añadido: Como consume recursos, también podría invertir el bucle, cosa que no quiero hacer.

 
Vitaly Muzichenko:
Ir a tu casa por el código, o publicarlo si no te importa)
Bueno, toma una cerveza y ven a visitarnos ;)

No recuerdo qué dimensión de la matriz que escribió - tal vez usted no lo necesita, y voy a empujar ...

//+------------------------------------------------------------------+
//| Пузырьковая сортировка двумерного массива                        |
//+------------------------------------------------------------------+
template<typename T>
void ArraySortBubbleTwoDims(T& array[][TWO_DIM], int sort_dimension=0, int sort_direction=0) {
   T     t=0;
   int   k=ArrayRange(array,1);    // Количество колонок
   int   n=ArrayRange(array,0);    // Количество строк
  
   //---
   if(sort_dimension<0) sort_dimension=0;
   if(sort_dimension>k) sort_dimension=k;
   //---
   for(int i=n-1; i>0; i--) {
      for(int j=0; j<i; j++) {
         //--- по возрастанию
         if(sort_direction==0) {
            if(array[j][sort_dimension]>array[j+1][sort_dimension]) {
               for(int e=0; e<k; e++) {
                  t=array[j][e];
                  array[j][e]=array[j+1][e];
                  array[j+1][e]=t;
                  }
               }
            }
         //--- по убыванию
         else {
            if(array[j][sort_dimension]<array[j+1][sort_dimension]) {
               for(int e=0; e<k; e++) {
                  t=array[j][e];
                  array[j][e]=array[j+1][e];
                  array[j+1][e]=t;
                  }
               }
            }
         }
      }
}
//+------------------------------------------------------------------+
Lo saqué del alijo y rápidamente lo cambié por una plantilla. Puede que me haya equivocado con las prisas...
 
Artyom Trishkin:
Bueno, coge una cerveza y ven a visitarnos ;)

Sólo que no recuerdo qué dimensión del array escribiste - tal vez no lo necesites, y lo pondré aquí ...

Es invierno, pero los esquís no van

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 работает

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

Error: "'m' - conversión de parámetros no permitida e.mq5 2076 20"

 
Vitaly Muzichenko:

Es invierno, pero los esquís no van

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 работает

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

Error: "'m' - conversión de parámetros no permitida e.mq5 2076 20"

Está escrito en la ayuda:

Nota

El indicador AS_SERIES no puede establecerse para matrices multidimensionales ni para matrices estáticas (es decir, matrices cuyo tamaño entre corchetes ya está especificado en tiempo de compilación).

¿Y qué te impide ordenarlo con la función que te propongo?

 
Artyom Trishkin:
Está escrito en la ayuda:

Nota

El indicador AS_SERIES no puede establecerse para matrices multidimensionales y matrices estáticas (es decir, matrices cuyo tamaño entre corchetes se especifica en tiempo de compilación).

Pero, ¿qué le impide solucionarlo con la función que le sugiero?

Exactamente el mismo error al pasarlo a la función
 
Vitaly Muzichenko:
Exactamente el mismo error al transferir a una función
¿Cuál?
 
Artyom Trishkin:
¿Cuál?

A su"ArraySortBubbleTwoDims".

De todas formas, he ampliado el bucle y el tema está resuelto. Pero todavía me gustaría ver una solución normal en la forma de una función estándar

Razón de la queja: