[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 556

 
Nur brauche ich als Bedingung nicht(Ask<tmp || Ask>tmp), sondern nur eine triviale (Ask<=tmp), d.h. sobald ein einziger Tick in die andere Richtung auftaucht... und zwar mit einer Schleife)... ich weiß, die Wahrheit ist irgendwo in der Nähe)).
 
maryan.dirtyn >>:
в вашем варианте работает, и ЕТО уже большой прорыв ). только мне нужно условие не (Ask<tmp || Ask>tmp), а просто банально (Ask<=tmp). тоесть как только появиться хоть один тик в другую сторону... и именно с циклом).. я знаю, истина где то рядом))). хотя б на реале работало, бог с ним, с тестером то.

Nun, dasselbe - dieselbe Logik. Vor der Schleife bringen wir die Variable in einen solchen Zustand, in dem die Schleifenbedingung wahr ist. Bei jeder Iteration der Schleife aktualisieren wir die Daten mit RefreshRates() und prüfen, ob das Angebot noch aktuell ist, führen dann eine Aktion durch und unterbrechen die Schleife. Wenn wir wollen, dass der Code, der unterhalb der Schleife liegt, ausgeführt wird, dann brechen wir ihn mit dem Befehl break ab. Wenn wir nicht wollen, dass er ausgeführt wird, unterbrechen wir die Funktion int start() des EA mit dem Befehl return(0)
 

Ich verstehe die Logik der Vorgehensweise... Ich verstehe nicht, warum keiner der Entwürfe funktioniert und einige weitere in den Abgrund der Versuche gefallen sind.

double tmp=Ask; while(Ask<=tmp) tmp=Ask; Print("Заработало");
 double tmp=0;  while(Ask<=tmp || tmp==0) { RefreshRates(); if(Ask>tmp) break;} Print("Заработало");
 
maryan.dirtyn >>:

я логику понимаю, как ето сделать.. я не понимаю почему не работает ни одна конструкция, еще несколько канули в бездну перебора вариантов


Sie müssen die Augen schließen und sich vorstellen, was in jeder Iteration des Zyklus geschieht.

Ihre erste Option:

Das Tempo ist gleich asc. Die Gleichheitsbedingung ist erfüllt, so dass die Schleife eine fast unendliche Anzahl von Iterationen durchläuft. Denn selbst wenn ein neues Zitat eintrifft, ist nicht sicher, dass es den Wahrheitsgehalt des Zyklus durchbrechen wird. Ein paar oder drei fallende Aufstiege hintereinander und wir können warten, bis der Zyklus fast unendlich ist...

 

Als das MQL4-Tutorial herauskam, habe ich es durchgeblättert und bin nicht mehr darauf zurückgekommen - es gefiel mir nicht, dass der Autor dieses Lehrbuchs überall while()-Schleifen einbaute. Es hat bei vielen Menschen, die versucht haben, MQL aus diesem Buch zu lernen, einen Eindruck hinterlassen.

Sagen Sie mir, dass Ihr Expert Advisor eine so schreckliche Aufgabe hat, dass Sie auf diese Schleife nicht verzichten können? Sie sehen also, wie einfach es ist, diese Schleife für eine unendliche Anzahl von Iterationen laufen zu lassen und dabei die Kontrolle zu verlieren. Können Sie in Ihrem Fall nicht auf die for()-Schleife verzichten? Oder durch das Schreiben einer separaten einfachen Funktion...?

 

Die Hauptsache ist, dass es funktioniert... Ich bin es leid, ein fallendes Messer zu kaufen. Ich brauche jede Lösung, auch die eleganteste:

double tmp=Ask; 
                 while(Ask<=tmp) tmp=Ask; 
                                              Print("Заработало");
 
drknn >>:

Честно-говоря, когда вышел учебник по MQL4, я его пролистал и больше к нему не возвращался - мне не понравилось, что автор этого сочинения суёт там цикл while() везде где ни попадя. Это наложило отпечаток на многих, кто пытался освоить MQL по данной книге.

Вот скажите, что у Ваего советника, такая жуткая задача, что нельзя обойтись без этого цикла? Ну ведь сами видите, насколько легко запустить этот цикл в бескоенчное число итераций, просто потеряв контроль. Циклом for() в Вашем случае обойтись нельзя? Ну или написанием каой-то отдельной простенькой функции?...

Ich bin nicht neu in mql. ich beherrsche es jetzt seit zwei Jahren. ja, ich brauche es, während. ich gehe zurück zu dem Tutorial von Zeit zu Zeit, um zu sehen, wenn ich gähnte) ... Sie sehen nicht ein Kaninchen? aber ich tue. es ist nicht so einfach.
 
Tut mir leid, wenn ich störe, aber auf diese Weise wird die Schleife unendlich sein. tmp sollte statisch gemacht werden mit einem Anfangswert, der bewusst höher ist als Ask. Oder =0, wenn wir die vorgeschlagene Konstruktion mit OR verwenden. Andernfalls wird Ask immer = tmp sein.
 
Svinozavr >>:
Извините, что вмешиваюсь, но в таком виде цикл и будет бесконечным. tmp нужно сделать static с присвоением ей началного значения заведомо большего Ask. Или =0, если использовать предложенную конструкцию с ИЛИ. А так Ask всегда будет = tmp.
Das Problem ist einfach... während der Preis nach unten geht, nicht kaufen, bis der Tick auf der anderen Seite ist... und der Code muss in einer Schleife an einer Stelle, während es nach unten geht, nicht berühren alles...
 

Es ist nur nicht klar, warum es hier einen Zyklus gibt. Prüfen Sie bei jedem Preisschritt und handeln Sie entsprechend den Gegebenheiten.