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 :rolleyes: 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 |
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 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 |
Edit: Doc war schneller :cool:
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:
Zitat:
Ein Beispiel: Code:
// Globale Variablen... |
hallo
hallo traderdoc undhallo next user :-)
der HTML-Code:
nt Wert(int Range) // Range ist die Zufallszahl bei deinem Code next user HTML-Code:
/ Globale Variablen... HTML-Code:
{ |
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 |
Hey Doc, auch'n Tee... :D
=== === === === === === === === === === === === 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... |
Zitat:
traderdoc |
'while' - expressions are not allowed on a global scope
hallo next user und traderdoc
danke habe nur noch einen fehler im Compiler Code:
int lastNumber = 0; 'while' - expressions are not allowed on a global scope none ich habe schon alle klammern geprüft ich finde ihn nicht :-) |
Das muss in eine Funktion.
C$D |
Danke
ich dachte mir ist bool CheckNumber() ja die Funktion
lg mante:) |
Die Schleife muss in eine Funktion, wie soll sie sonst aufgerufen werden...
|
Zitat:
Code:
bool CheckNumber(int Range) Zitat:
Zitat:
Und noch ein Fehler (der Compiler kann leider auch nicht ALLES, bräuchte mal ein Update. Folgenden Fehler hat er wohl nicht erkannt): Zitat:
|
vielen dank für eure Hilfe :-)
vor allem danke nexuser irgendwo ist noch was falsch - ich habe zwar keine fehler mehr im Compiler aber print liefert keine zahlen habt ihr eine Ahnung was da falsch ist lg mante Code:
|
Zitat:
Die wird doch im Kopf der Schleife aufgerufen. Und solange die Zufallszahl GLEICH der letzten ist, wird der Block der Schleife ausgeführt! IN der Schleife musst du "Range" daher eine NEUE Zufallszahl zuweisen! Ich glaube, da sind bei dir noch ein paar Verständnis- und Grundlagenprobleme. Wenn du mal den Code posten könntest, wie du die Zufallszahlen erhälst, kann ich dir auch besser helfen. |
hallo nextuser
ich dacht mir
wenn while (!CheckNumber(true)) // wenn anders als vorherige Zahl wird CheckNumber (Range); Print ( "Die Zahl ist" +1); } die zahl an CheckNumber übergeben und ausgegeben :-) damit hast du recht - leider :( |
Zitat:
=== === === === === === === === === === === === Gehen wir nochmal durch: Meine gepostete Funktion war diese: Code:
bool CheckNumber() Code:
bool CheckNumber(int Range) Die beiden unterscheiden sich aber. Meine nutzt eine globale Variable, deine einen Integer als Parameter. Dein folgender Code Code:
while(!CheckNumber(true)) Die Funktionen machen aber das selbe und prüfen nur die Zahlen. Es bringt nichts, bei gleichen Zahlen IMMER, IMMER und IMMER wieder zu prüfen (dein Funktionsaufruf im Block)! Wie gesagt, wenn Zitat:
|
Zitat:
https://cdn02.dm-static.com/images/m...417306_org.png |
hmm
es tut mir echt leid wenn ich das nicht so verstehe - ich hoffe ich nerve euch nicht schon - ich habe echt keine Erfahrung in prog schreiben
ich dachte folgendes - case1 (zufällige Zahl ist eins) wenn der Code öfters hintereinander 1 liefert - soll für weiteren Code nur einmal eins weiter gegeben werden cas1 Range 1 ist zufallszahl1 (1,1,1,1 ist schlecht :-) bool CheckNumber(int Range) // Funktion überprüft mir ob vor der aktuellen Zahl auch eine 1 war - wenn die Zahl vorher ungleich war dann liefert sie true wenn sie gleich war liefert sie false dieses gleich oder ungleich übergebe ich in die while Schleife in der die Zufallszahl entsteht (case1 für eins damit: while(!CheckNumber(true)) und nur wenn die Zahl ungleich ist wird der Code in der while Schleife ausgeführt CheckNumber (Range); Print ( "Die Zahl ist" +1); er gibt mir die neue Zahl 1 aus weil die vorherige Zahl nicht eins war ...... ihr denkt jetzt sicher ich bin komplett bescheuert :D aber ich beschäftige mich erst seit einer Woche mit mql4 :mad: danke auf alle fälle für eure geduld der Code ist erst am anfang - ich hab das gefühl ich scheitere schon an so einer Kleinigkeit - hätte nicht gedacht, dass es so kompliziert ist aus 1,1,1,4,4,4,4,3,5, sowas zu bekommen 1,4,3,5 lg mante Code:
switch(a) |
Das ist schon mal nicht richtig:
Code:
bool CheckNumber(int Range) findet auch nie eine Aktualisierung von lastNumber statt. Und bei den Zeilen while(!CheckNumber(true)) wird dann der Funktion CheckNumber() nicht der Wert der Variablen Range übergeben, sondern immer eine 1 (die für true steht). Nur wenn auch Range 1 wäre, würde das gehen. Aber das ergibt ja keinen Sinn. traderdoc |
hab es jetzt geändert
funktioniert leider noch immer nicht
Code:
/ Zufallszahl a=1,2,3,4,5 |
Das ist mir ein wenig zuviel Probiererei.
Kann auch nicht funktionieren, weil Code:
case 1: in die Funktion CheckNumber() der bool-Wert false zurückgegeben wird, dann läuft das Programm in eine Endlosschleife. traderdoc |
Zitat:
Ich mit meiner Kanne und Doc mit seinem speziellen Tee, wir haben uns etwas Geduld angetrunken... :D === === === === === === === === === === === === Zitat:
=== === === === === === === === === === === === Zitat:
aber kein Ausrufezeichen! Zum besseren Verständnis: Code:
(CheckNumber() == true) => ist GLEICH wie (CheckNumber()) Zitat:
Spaß beiseite, quatsch! Jeder Anfänger wird Fragen haben, die er später belächeln kann. === === === === === === === === === === === === Gehen wir das ganze mal ausführlich durch: (Ich beschreibe es anhand meiner ursprünglichen Funktion) Code:
// Globale Variablen => überall im Code nutzbar Bei einer so simplen Prüfung könnte man aber auch die Funktion weglassen und die Schleife mit Code:
while(randNumber == lastNumber) |
mahhh danke
für all die Infos von euch:confused:
[QUOTE// Ein switch ist überhaupt nicht notwendig! randNumber = // Dein ..., welches die Zufallszahl liefert! ][/QUOTE] der Switch macht aber meine Zufallszahl :D case 1 zufallszahl ist eins case2 zufallszahl ist zwei |
Zitat:
Und DIE erhälst du ja durch was anderes. "case 1" VON WAS?? DAS IST DEINE ZUFALLSZAHL !!! |
hi next user
Die Zufallszahl entsteht wenn der Basiswert einen bestimmten Preis erreicht.
zb 1100 = case 1 - 1200 ist case 2 ....- die Funktion soll einen Wert liefern-da der Preis jedoch die 1100 erreicht und danach wieder bei 1101 oder 1105 danach wieder bei 1099 ist kommt der wert 1,1,1,1,2,2,2 zustande -eigentlich ist mein erster ea ein Projekt bei dem Orders erstellt werden bei preisen die ich vorher festlegen kann :) ich wollte es so programmieren: wenn der preis die 1100 erreicht - mir ein Signal gibt wenn er dort ist -danach pause (keine weiteren Signale durch Schwankungen bei 1100 - nächste Signal erst wieder bei 1200 klingt einfach - dachte ich jedenfalls - aber ich wollte noch nix kompliziertes programieren für den Anfang im switch habe ich die preise festgelegt - dh preis erreicht wert 1 - case 1.... zufällig sind die werte deshalb weil vorher nicht feststeht welchen Wert der Kurs als nächstes erreicht. lg mante lg mante |
Ich bin an Dein ursprüngliches Problem mal ganz anders ran gegangen. Du sagtest ja, die "Zufallszahl" kommt aus dem Chart. Damit es auch öfter gleiche Zahlen gibt, hole ich meine Zufallszahl über den Spread. Mein Testscript läuft auf Eur/Usd im M1, ich habe die Durchläufe aber auf 5 begrenzt, damit die Ausgabe nicht zu lang wird.
Code:
// test script auf Eur/Usd |
danke avt
ich habe es versucht aber es hat nicht geklappt - jetzt versuche ich es mal mit dem Code :p
Code:
int start() |
Alle Zeitangaben in WEZ +2. Es ist jetzt 11:16 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