Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Variablen nach Größe sortieren (http://www.expert-advisor.com/forum/showthread.php?t=4117)

Ca$hDigger 01.03.15 15:16

Variablen nach Größe sortieren
 
Guten Tag,

ich möchte eine größere Anzahl an einzelnen Variablen nach Größe des jeweiligen Wertes in ein Array sortieren sowie den Namen der jeweiligen Variable als String Array ablegen. Es geht um das Anzeigen einer sortierten Liste auf dem Chart mit Name der Variable sowie des dazugehörigen Wertes.

Variablenreihe der Quelle zB:
var1 = 10;
var2 = 5;
var3 = -13;
var4 = 55;
usw

Die Chartzeichnung würde ich fix definieren also
1. Reihe WertArray[0] und NameArray[0]
2. Reihe WertArray[1] und NameArray[1]
3. Reihe WertArray[2] und NameArray[2]
4. Reihe WertArray[3] und NameArray[3]
usw

Große bis kleine Werte sollen inlusiv Variablenbezeichnung, von der Variablenreihe der Quell-Variablen in die ZielArrays, als Wert und Name von oben nach unten einsortiert werden.

Ergebniss sollte so aussehen:
WertArray[0] = 55 und NameArray[0] = var4
WertArray[1] = 10 und NameArray[1] = var2
WertArray[2] = 5 und NameArray[2] = var1
WertArray[3] = -13 und NameArray[3] = var3

So ist erstmal die Grundidee, ich weiss jetzt nur nicht wie ich die ganze Sache sortiere, also wie die QuellVariablen der Größe nach in Wert- und String- Arrays sortiert werden???

lg C$D

ps: ich arbeite mit MetaEditor v509

traderdoc 01.03.15 16:14

Sortieren kann man Arrays über die Funktion

ArraySort()

entweder auf- oder absteigend.
Vorher mit ArrayCopy() das alte Array sichern und nach dem Sortieren, die Elemente des sortierten Arrays bzgl. des Index im alten Array suchen und in NameArray[i] abspeichern.

traderdoc

Ca$hDigger 01.03.15 17:29

Prima das Sortieren klappt schonmal aber das Definieren vom QuelleArray mit den vorhandenen Variabeln macht Probleme und die Variablennamen rauszuziehen liegt über meinem KnowHow. Hier mal der aktuelle Stand:

Code:

// Test-Quellvariablen
double Var1 = 10;
double var2 = 5;
double var3 = -13;
double var4 = 55;
...

//Testausführung für Printausgabe
int init()
{

double Quelle[4] = {var1,var2,var3,var4);
/*
FEHLERMELDUNG ! -> comma or semicolon expected ???
Wenn ich die Zahlen direkt reinschreibe ist keine Fehlermeldung aber
die Zahlen müssen doch von den Variablen Var1 bis Var4 kommen!
*/

ArraySort(Quelle, WHOLE_ARRAY,0,MODE_DESCENT);
// Funktioniert :)

// Variablennamen rausziehen... ???


Print("Wert= ", Quelle[0]);
Print("Wert= ", Quelle[1]);
Print("Wert= ", Quelle[2]);
Print("Wert= ", Quelle[3]);

Print("Name= ", Name[0]);
Print("Name= ", Name[1]);
Print("Name= ", Name[2]);
Print("Name= ", Name[3]);
}


traderdoc 01.03.15 18:49

Code:

double var1 = 10;
double var2 = 5;
double var3 = -13;
double var4 = 55;
double Quelle[];
double QuelleSort[];
string Name[];

int init() {
  ArrayResize(Quelle, 4);
  ArrayResize(QuelleSort, 4);
  ArrayResize(Name, 4);
  Quelle[0] = var1;
  Quelle[1] = var2;
  Quelle[2] = var3;
  Quelle[3] = var4;
 
  ArrayCopy(QuelleSort, Quelle, 0, 0, WHOLE_ARRAY);
  ArraySort(QuelleSort, WHOLE_ARRAY,0,MODE_DESCEND);
 
  Alert(Quelle[0], " ", Quelle[1], " ", Quelle[2], " ", Quelle[3]);
  Alert(QuelleSort[0], " ", QuelleSort[1], " ", QuelleSort[2], " ", QuelleSort[3]);
 
  for (int i = 0; i <= 3; i++) {
      for (int j = 0; j <= 3; j++) {
        if (QuelleSort[i] != Quelle[j]) continue;
            else Name[i] = IntegerToString(j);
      }
  }
 
  Alert(Name[0], " ", Name[1], " ", Name[2], " ", Name[3]);
 
  return(0);
}

Viel Erfolg!

traderdoc

Ca$hDigger 01.03.15 19:28

Prima bis zum IntegerToString alles klasse nur wäre noch eine Fehlermeldung:
IntegerToString - function is not defined

traderdoc 01.03.15 19:42

Build 509 ist aber ganz schön antiquiert.
Aktuell sollte die bei mindestens 765 liegen. Dann käme der Fehler auch nicht.

Gut, dann nimm

else Name[i] = j;

oder

else Name[i] = DoubleToStr(j, 0);

traderdoc

Ca$hDigger 01.03.15 20:00

Herzlichen dank für die Hilfe doc! Fast perfekt jetzt kommt als Name 3 0 1 2 das stimmt mit der Reihenfolger überein aber es ist noch nicht der eigentliche Name der Variable. Wenn die Ursprungsvariablen var1 var2 var3 var4 heißen wäre es klasse wenn auch diese Bezeichnung entsprechen im Name-Array abgelegt wird also statt 3 0 1 2 die variablenbeschriftung var4 var1 var2 var3

lg C$D

traderdoc 01.03.15 20:12

Code:

double var1 = 10;
double var2 = 5;
double var3 = -13;
double var4 = 55;
double Quelle[];
double QuelleSort[];
string NameVar[];
string Name[];

int init() {
  ArrayResize(Quelle, 4);
  ArrayResize(QuelleSort, 4);
  ArrayResize(NameVar, 4);
  ArrayResize(Name, 4);
  Quelle[0] = var1;
  Quelle[1] = var2;
  Quelle[2] = var3;
  Quelle[3] = var4;
  NameVar[0] = "var1";
  NameVar[1] = "var2";
  NameVar[2] = "var3";
  NameVar[3] = "var4";
 
  ArrayCopy(QuelleSort, Quelle, 0, 0, WHOLE_ARRAY);
  ArraySort(QuelleSort, WHOLE_ARRAY,0,MODE_DESCEND);
 
  Alert(Quelle[0], " ", Quelle[1], " ", Quelle[2], " ", Quelle[3]);
  Alert(QuelleSort[0], " ", QuelleSort[1], " ", QuelleSort[2], " ", QuelleSort[3]);
 
  for (int i = 0; i <= 3; i++) {
      for (int j = 0; j <= 3; j++) {
        if (QuelleSort[i] != Quelle[j]) continue;
            else Name[i] = NameVar[j];
      }
  }
 
  Alert(Name[0], " ", Name[1], " ", Name[2], " ", Name[3]);
 
  return(0);
}

Viel Erfolg!

traderdoc

Ca$hDigger 01.03.15 20:15

Perfekt ! Danke doc !


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:33 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum