|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
wie kann ich sowas lösen?
der Chart liefert Werte von 1 bis 5 aber leider manchmal den gleichen Wert hintereinander
1,1,1,1,4,5,4,4,4,4,4,1,1,1 wie kann ich aus dieser Reihe folgende Reihe bekommen 1,4,5,4,1.... bin am verzweifeln ich hoffe ihr könnt mir helfen lg mante |
|
|||
Vorschlag
Ohne näheres zu kennen, würde ich es etwa wie unten ausgeben. Die Zufallszahl in x1 speichern und nur wenn die aktuelle Zufallszahl x ungleich x1 ist, erfolgt ein Print. Es werden nun endlos Zufallszahlen generiert, ohne dass zweimal die gleiche Zahl hintereinander ausgegeben wird.
int x=0,x1=0; // Zufallszahl x = aktuelle, x1 = vorhergehende int c=0; // Dummy while (c <= 1) // Endlosschleife endet nie { x = Zufallszahl; if (x != x1) // != bedeutet ungleich { Print x; // nur ungleiche Zufallszahl wird ausgegeben x1=x; // aktuelle Zufallszahl wird an x1 übergeben } } gruss freiri |
|
|||
Für Code ist es jetzt zu spät, aber vom prinzipiellen Ansatz her würde das so funktionieren.
Wenn die Endreihe feststeht, die Du erhalten willst, dann wird die Rohheihe als String betrachtet, und dann wird die Rohreihe von links nach rechts nach den einzelnen Ziffern der Endreihe durch sucht, d.h. in der Rohreihe sollen ja nicht nur die Ziffern der Endreihe enthalten sein, sondern auch in der entsprechenden, prinzipiellen Reihenfolge, auch wenn durch Doppler in die Länge gezogen. D.h. es wird zuerst nach der 1 von links in der Rohreihe gesucht. Ist die anwesend werden die nachfolgenden identifizierten 1 ignoriert. D.h. ab der Stelle, wo die erste 1 gefunden wurde wird ab da nach der 4 gesucht. Wurde die gefunden wird sofort nach der 5 gesucht. Usw. usf. Über die Hilfe F1 wirst Du viele String-Funktionen finden, mit denen man das relativ einfach umsetzen kann. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
fehler
hallo freri hallo traderdoc
danke für eure Hilfe - ich habe es nun so gemacht der Compiler liefert keine Fehler aber der MT4 friert im Strategietester ein:-) int Wert(int Range) // Range ist die Zufallszahl { int x = 0, x1 = 0; // Zufallszahl x = aktuelle, x1 = vorhergehende int c=0; // Dummy while (c <= 1) // Endlosschleife endet nie { x = Range; if (x != x1) // != bedeutet ungleich { Print ( x); // nur ungleiche Zufallszahl wird ausgegeben x1=x; // aktuelle Zufallszahl wird an x1 übergeben } } Print ("Range sich geändert auf" + Range ); } findet ihr da einen fehler |
|
|||
Ja klar! Aber erst einmal a bisserl Struktur in den Code.
Das sollte man mal als Bedingung stellen, vor der Veröffentlichung von Code. Code:
int Wert(int Range) // Range ist die Zufallszahl { int x = 0, x1 = 0; // Zufallszahl x = aktuelle, x1 = vorhergehende int c = 0; // Dummy while (c <= 1) // Endlosschleife endet nie { x = Range; if (x != x1) // != bedeutet ungleich { Print(x); // nur ungleiche Zufallszahl wird ausgegeben x1 = x; // aktuelle Zufallszahl wird an x1 übergeben } } Print("Range sich geändert auf" + Range); } 1. Da c mit 0 initialisiert wurde und in der Schleife nicht geändert wird bleibt es bei 0 und das ist nach Gauss nun mal immer <= 1! 2. Ein break für einen Ausstieg aus der Schleife existiert nicht 3. Ein return(..) existiert innerhalb der Schleife auch nicht, übrigens auch außerhalb der Schleife nicht, muss aber! wegen int Wert(). Also klarer Fall von Endlosschleife. Eines der drei o.g. Punkte muss aber greifen. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Edit: Doc war schneller
Wenn ich mir den Beitrag von Doc grad so ansehe Zitat:
Ich habe es so verstanden, das es keine "Endreihe" gibt, du lediglich keine Zahl 2 mal hintereinander haben willst. Zitat:
du keinen Riegel davor setzt.
Ein Beispiel: Code:
// Globale Variablen... int randNumber = 0; int lastNumber = 0; // Test... bool CheckNumber() { if(randNumber != lastNumber) return true; else return false; } // Solange Test nicht ok, Schleife... while(!CheckNumber()) { randNumber = // Neue Zufallszahl... } lastNumber = randNumber; |
|
|||
hallo
hallo traderdoc undhallo next user :-)
der HTML-Code:
nt Wert(int Range) // Range ist die Zufallszahl { int x = 0, x1 = 0; // Zufallszahl x = aktuelle, x1 = vorhergehende int c = 0; // Dummy while (c <= 1) // Endlosschleife endet nie { x = Range; if (x != x1) // != bedeutet ungleich { Print(x); // nur ungleiche Zufallszahl wird ausgegeben x1 = x; // aktuelle Zufallszahl wird an x1 übergeben } } Print("Range sich geändert auf" + Range); } bei deinem Code next user HTML-Code:
/ Globale Variablen... int randNumber = 0; int lastNumber = 0; // Test... bool CheckNumber() { if(randNumber != lastNumber) return true; else return false; } // Solange Test nicht ok, Schleife... while(!CheckNumber()) { randNumber = // Neue Zufallszahl... } lastNumber = randNumber; HTML-Code:
{ randNumber = // Neue Zufallszahl... } |
|
|||
Ja klar, das ist ja auch derselbe Code, den Du vorher gepostet hattest,
nur habe ich den mal aufgeräumt, das schrieb ich aber auch. Und anhand des aufgeräumten Code habe ich Dir erklärt, warum das eine Endlosschleife ist und wie man die so programmiert, dass es eben keine wird. Also demnächst, evtl. a bisserl genauer lesen. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Hey Doc, auch'n Tee...
=== === === === === === === === === === === === Zitat:
"randNumber" wird eine neue Zufallszahl zugewiesen. Wie du die Zahlen ermittels, hast du ja nicht gesagt. Du sagtest nur "Der Chart liefert mir Zufallszahlen von 1-5 / 1-10". Vielleicht so bischen verständlicher: Code:
// Globale Variablen... int randNumber = 0; int lastNumber = 0; // Test... bool CheckNumber() { if(randNumber != lastNumber) return true; // Zufallszahl ist anders -> Gib true zurück! else return false; // Zufallszahl ist gleich -> Gib false zurück! } // Solange Test nicht ok, Schleife... while(!CheckNumber()) { // Solange CheckNumber() false liefert, also neue // Zufallszahl == letzte ist, wird mit folgender Zeile // eine neue Zufallszahl "randNumber" zugewiesen. // (wie auch immer du die Zahlen erhälst!) randNumber = // Neue Zufallszahl... } // Die while-Schleife wurde wegen ungleicher, neuer Zufallszahl // abgebrochen. Hier jetzt die gültige Zufallszahl verarbeiten, // was auch immer du damit machst. // Dann noch der letzten die aktuelle Zufallszahl zuweisen und // es kann weiter gehen... lastNumber = randNumber; |
|
|||
Willst Du mich damit aggressiv machen?
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Stichworte |
chart, chart wert, chart werte, mql4, programmierung, programmierung metatrader, programmierung mql4 |
|
|