Logik lernen - Seite 15

 
hrenfx:

Manchmal müssen Sie die Daten in MQL4 sortieren, ohne die Daten selbst zu berühren. Es gibt keine Zeiger in MQL4, es gibt auch keine Strukturen.

Eine alternative Variante besteht darin, ein Array Positionen[][2] zu erstellen, den zu sortierenden Parameter nach dem Nullindex zu kopieren und den ersten Index an die Positionen zu übergeben. Dann sortieren Sie das Array mit der Standardfunktion AgraSort.

Der Vorteil ist, dass AgraSort einen effizienten Sortieralgorithmus verwendet, der zudem in nativem Code arbeitet.

 
Candid:

Alternativ können Sie ein Array Positionen[][2] erstellen, den zu sortierenden Parameter nach dem Nullindex kopieren und den ersten Index an die Positionen übergeben. Dann sortieren Sie das Array mit der Standardfunktion AgraSort.

Könnten Sie mein Skript auf der vorherigen Seite mit Ihrer Methode konvertieren? Ich verstehe die Beschreibung nicht.
 
hrenfx:
Könnten Sie mein Skript auf der vorherigen Seite mit Ihrer Methode konvertieren? Ich verstehe die Beschreibung nicht.

Die von https://www.mql5.com/ru/users/candid vorgeschlagene Methode hat mir gut gefallen . Früher war es ein bisschen komplizierter. Ich werde eine einfachere Variante verwenden. Sie können nach jedem Attribut sortieren. Sehr praktisch.
 
hrenfx:
Könnten Sie mein Skript auf der vorherigen Seite mit Ihrer Methode konvertieren? Ich verstehe die Beschreibung nicht.

Ich werde Ihnen nicht das ganze Skript geben, sondern nur eine Skizze der Funktion, die ausreichen sollte, um die Idee zu verstehen

void SortArrayINT( int& Array[], int& Positions[][]) {
  int i, Size = ArraySize(Array);
    
  ArrayResize(Positions, Size);
  
  for (i = 0; i < Size; i++) {
    Positions[i][0] = Array[i];
    Positions[i][1] = i;
  }
  ArraySort(Positions);
  return;
}


Nun enthält Positions[0][1] den Index des kleinsten Array-Elements, Positions[1][1] enthält den Index des nächstgrößeren Array-Elements und Positions[i][1] enthält den Index des i-ten Elements.

 
Candid:

Ich werde nicht das ganze Skript schreiben, aber ich werde Ihnen eine Skizze der Funktion geben, es sollte ausreichen, um die Idee zu verstehen.

Ich wusste nichts von den Besonderheiten der Arbeit mit mehrdimensionalen Arrays in MQL4. Danke, die Methode funktioniert:

void SortArrayINTCandid( int Array[], int& Positions[][] )
{
  int Size = ArraySize(Array);
    
  ArrayResize(Positions, Size);
  
  for (int i = 0; i < Size; i++)
  {
    Positions[i][0] = Array[i];
    Positions[i][1] = i;
  }

  ArraySort(Positions);

  return;
}

void PrintInfo( string SortName, int Array[] )
{
  int PositionsCandid[][2];
  
  SortArrayINTCandid(Array, PositionsCandid);
  
  Print("Sort by " + SortName);
  Print("SYMBOL   PROFIT   POS   SL");

  for (int i = 0; i < AMOUNT; i++)
    Print(Symbols[PositionsCandid[i][1]] + "   " + Profit[PositionsCandid[i][1]] + "   " +
          Pos[PositionsCandid[i][1]] + "   " + SL[PositionsCandid[i][1]]);
          
  Print("");
          
  return;
}