Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 732

 
Vitalie Postolache:
Cosa succede se dopo l'ordinamento cambiate l'ordine di indicizzazione usando ArraySetAsSeries?
ArraySetAsSeries non si applica agli array multidimensionali.
 
Alexey Viktorov:
ArraySetAsSeries non si applica agli array multidimensionali.

Sì, non si applica. E chi sa cosa vale, risponda per favore.

 
Vitaly Muzichenko:

Sì, non si applica. E chi sa cosa vale, risponda per favore.

A volte uso l'ordinamento a bolle su un array bidimensionale. Potete selezionare la direzione e la dimensione per cui ordinare
 
Artyom Trishkin:
A volte uso l'ordinamento a bolle su un array bidimensionale. Potete scegliere la direzione e la dimensione per cui ordinare

Venire a casa tua per il codice, o postarlo, se non ti dispiace)

Aggiunto: quanto consuma risorse, potrebbe anche invertire il ciclo, cosa che non voglio fare.

 
Vitaly Muzichenko:
Vieni a casa tua per il codice, o pubblicalo se non ti dispiace)
Beh, prendi una birra e vieni a trovarci ;)

Solo che non ricordo quale dimensione dell'array hai scritto - forse non ne hai bisogno, e mi spingo ...

//+------------------------------------------------------------------+
//| Пузырьковая сортировка двумерного массива                        |
//+------------------------------------------------------------------+
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;
                  }
               }
            }
         }
      }
}
//+------------------------------------------------------------------+
L'ho tirato fuori dalla scorta e sono passato rapidamente a un modello. Forse ho fatto un errore nella fretta...
 
Artyom Trishkin:
Beh, prendi una birra e vieni a trovarci ;)

Solo che non ricordo quale dimensione dell'array hai scritto - forse non ne hai bisogno, e lo metterò qui ...

È inverno, ma gli sci non vanno

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

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

Errore: "'m' - conversione dei parametri non consentita e.mq5 2076 20"

 
Vitaly Muzichenko:

È inverno, ma gli sci non vanno

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

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

Errore: "'m' - conversione dei parametri non consentita e.mq5 2076 20"

È scritto nell'aiuto:

Nota

Il flag AS_SERIES non può essere impostato per gli array multidimensionali e per gli array statici (cioè, array la cui dimensione tra parentesi quadre è già specificata al momento della compilazione).

E cosa vi impedisce di ordinarlo con la funzione che suggerisco?

 
Artyom Trishkin:
È scritto nell'aiuto:

Nota

Il flag AS_SERIES non può essere impostato per gli array multidimensionali e gli array statici (cioè gli array la cui dimensione tra parentesi quadre è specificata in fase di compilazione).

Ma cosa vi impedisce di risolverlo con la funzione che vi suggerisco?

Esattamente lo stesso errore quando lo si passa nella funzione
 
Vitaly Muzichenko:
Esattamente lo stesso errore quando si trasferisce a una funzione
Quale?
 
Artyom Trishkin:
Quale?

Al vostro"ArraySortBubbleTwoDims".

Comunque, ho ampliato il ciclo e il problema è risolto. Ma mi piacerebbe ancora vedere una soluzione normale sotto forma di una funzione standard