|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
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 aber ich beschäftige mich erst seit einer Woche mit mql4 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) { case 1: Range = 1; while(!CheckNumber(true)) { CheckNumber (Range); Print ( "Die Zahl ist" +1); } break; case 2: Range = 2; while(!CheckNumber(true)) { CheckNumber(Range); Print (" Die Zahl ist 2"); // Zahl 15 wird an neu erstellte Funktion wert übergeben } break; case 3: Range = 3; while(!CheckNumber(true)) { CheckNumber(Range); Print (" Die Zahl ist 3"); } break; case 4: Range = 4; while(!CheckNumber(true)) { CheckNumber(Range); Print (" Die Zahl ist 4"); } break; case 5: Range = 5; while(!CheckNumber(true)) { CheckNumber(Range); Print (" Die Zahl ist 5"); } break; default: break; } } // Globale Variablen... int lastNumber = 0; bool CheckNumber(int Range) { if(Range != lastNumber) return true; else return false; lastNumber = Range;] |
|
|||
Das ist schon mal nicht richtig:
Code:
bool CheckNumber(int Range) { if(Range != lastNumber) return true; else return false; lastNumber = 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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
hab es jetzt geändert
funktioniert leider noch immer nicht
Code:
/ Zufallszahl a=1,2,3,4,5 switch(a) { case 1: randNumber= 1; while(!CheckNumber()) { Print (randNumber); } lastNumber = randNumber; break; case 2: randNumber = 2; while(!CheckNumber()) { Print (randNumber); } lastNumber = randNumber; break; case 3: randNumber = 3; while(!CheckNumber()) { Print (randNumber); } lastNumber = randNumber; break; case 3: randNumber = 4; while(!CheckNumber()) { Print (randNumber); } lastNumber = randNumber; break; case 3: randNumber = 5; while(!CheckNumber()) { Print (randNumber); } lastNumber = randNumber; break; default: break; 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! } |
|
|||
Das ist mir ein wenig zuviel Probiererei.
Kann auch nicht funktionieren, weil Code:
case 1: randNumber= 1; while(!CheckNumber()) { Print (randNumber); } lastNumber = randNumber; break; in die Funktion CheckNumber() der bool-Wert false zurückgegeben wird, dann läuft das Programm in eine Endlosschleife. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
Ich mit meiner Kanne und Doc mit seinem speziellen Tee, wir haben uns etwas Geduld angetrunken... === === === === === === === === === === === === Zitat:
=== === === === === === === === === === === === Zitat:
aber kein Ausrufezeichen! Zum besseren Verständnis: Code:
(CheckNumber() == true) => ist GLEICH wie (CheckNumber()) (CheckNumber() == false) => ist GLEICH wie (!CheckNumber()) War das ne Frage, oder outest du dich grad? 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 // Also außerhalb jeglicher Funktion erstellen int randNumber = 0, lastNumber = 0; // Die Funktion zum überprüfen, natürlich auch außerhalb // jeglicher Funktion erstellen bool CheckNumber() { if(randNumber != lastNumber) return true; // Zahlen sind unterschiedlich else return false; // Zahlen sind identisch } // Den folgenden Code dann dort, wo du die Zufallszahlen // erhälst. Ein switch ist überhaupt nicht notwendig! randNumber = // Dein ..., welches die Zufallszahl liefert! while(!CheckNumber()) // Also, solange false (Zahlen gleich) geliefert wird... { // Die geprüfte Zahl ist mit der letzten identisch, daher // muss randNumber jetzt eine neue Zufallszahl erhalten, // welche im nächsten Schleifendurchlauf durch den // Schleifenkopf geprüft wird. Das geht so lange weiter, // bis die Zahlen ungleich sind. Dann wird die Schleife abgebrochen! randNumber = // Neue Zufallszahl... } // Nach der Schleife hat randNumber jetzt eine Zahl // ungleich lastNumber. Diese kannst du nun für was // auch immer weiter verarbeiten... 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
[QUOTE// Ein switch ist überhaupt nicht notwendig! randNumber = // Dein ..., welches die Zufallszahl liefert! ][/QUOTE] der Switch macht aber meine Zufallszahl 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 #property strict void OnStart() { int Zahleingabe; for(int i=0; i<5; i++) // Durchläufe { int Zufallszahl=FunktionHoleZahl(); Print("habe Zahl gekriegt: ",Zufallszahl); if( FunktionHoleZahl()!=Zahleingabe ) // unterscheidet sich ->benutzen { FunktionMachWasMitZahl(Zufallszahl); Zahleingabe=Zufallszahl; // merken, das ist Zahleingabe (gewesen) Print("die hier ist erst mal nicht mehr zu gebrauchen: ",Zahleingabe); } else ; // ist gleich -> also mach nix Sleep(375); // für Tests abends } } // Funktion, die eine Zahl findet/holt int FunktionHoleZahl() { int Zahl=(int)MarketInfo(NULL,MODE_SPREAD); return(Zahl); } // Funktion, die eine Zahl weiterverarbeitet void FunktionMachWasMitZahl(int Zahleingabe) { // Code, der die Zahleingabe benutzt Print("FunktionMachWasMitZahl ",Zahleingabe,"! Ok,verbrauchen wir sie ",Zahleingabe); } |
|
|||
danke avt
ich habe es versucht aber es hat nicht geklappt - jetzt versuche ich es mal mit dem Code
Code:
int start() { static bool first = true; static int pre_OrdersTotal = 0; int _OrdersTotal = OrdersTotal(); // Wenn der Experte zum ersten Mal gestartet wird, ist die Zahl der Orders beim vorherigen Tick nicht bekannt. // Deswegen ihn einfach speichern, den ersten Start anmerken und beenden. if ( first ) { pre_OrdersTotal = _OrdersTotal; first = false; return(0); } // Die Zahl der Positionen beim vorherigen Tick mit der laufenden Zahl vergleichen // Wenn sich die Zahl verändert hat, die Meldung anzeigen if ( _OrdersTotal > pre_OrdersTotal ) Alert( "Die Zahl der Positionen ist gestiegen! früher - ", pre_OrdersTotal, ", jetzt - ", _OrdersTotal ); if ( _OrdersTotal < pre_OrdersTotal ) Alert( "Die Zahl der Positionen ist gesunken! früher - ", pre_OrdersTotal, ", jetzt - ", _OrdersTotal ); // Die Zahl der Positionen speichern pre_OrdersTotal = _OrdersTotal; return(0); }] |
Lesezeichen |
Stichworte |
chart, chart wert, chart werte, mql4, programmierung, programmierung metatrader, programmierung mql4 |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|