Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 282

 

amavladi:


Ich möchte die Mechanik von Schleifen verstehen, damit ich einen komplexen EA schreiben kann. Der Operator "return" wirft mich zu einem neuen "Start" zurück Ich brauche sie nicht immer.

Trotzdem vielen Dank für die Antwort.

Bitte sehr. Der Punkt ist, dass Sie, wenn Sie die "Mechanik" mit Hilfe von "Dritten" verstehen wollen, das Problem für eben diese "Dritten" formulieren müssen, d. h. Sie müssen beschreiben, was Sie von dem Algorithmus erwarten, nicht was Sie bekommen haben.

"Die Schleife schleift" ist kein Problem, denn wenn sich in der Schleife nichts außer dem continue-Operator befindet, muss sie so lange schleifen, bis die Schleifenbedingung falsch wird.

D.h., Sie sollten keine dummen Fragen stellen wie: "Was funktioniert nicht in nicht funktionierendem Code". Schließlich weiß selbst ein betrunkener Igel, dass nicht funktionierender Code nicht funktioniert, weil er nicht funktioniert. Aber niemand ohne telepathische Kräfte, außer dem Autor des Codes, kann verstehen, was im funktionierenden Code hätte funktionieren sollen.

 
amavladi:

HILFE!

Ich bin auf der Suche nach guten Leuten auf dieser Seite, bitte weisen Sie mich auf meine Fehler hin. Ich habe gerade angefangen, MQL4 zu lernenund habe einen einfachen Expert Advisor geschrieben, der eine Order öffnet und sie dann mit einem kleinenTakeprofit schließt.Ich habe versucht, es in Strategy Tester zu überprüfen und fand heraus, dass meine for- und while-Anweisungen Schleife wird geschleift, wenn wie folgt geschrieben:

//--------------------------------------------------------------------

   while (Ask<=Level)

   { RefreshRates();

     continue;

   }         

Nun, hier scheint alles ganz einfach zu sein.

Der Strategietester erzeugt einen Tick, ruft start() auf und wartet, bis diese Funktion beendet ist, um den nächsten Tick zu erzeugen.

Wenn Sie also wollen, dass Ihr Roboter nicht im Prüfgerät hängt, sollten Sie von einer solchen Konstruktion Abstand nehmen. In Ihrem Fall ändert sich der Ask-Kurs erst, wenn er von start() beendet wird.

Wenn der Rückgabebefehl eingeht, wird die Funktion "Start" beendet, und der Prüfer weiß, dass der nächste Tick erzeugt werden soll.

Außerdem wird Ihr Code nicht im Strategietester, sondern im realen Modus so funktionieren, wie Sie es erwarten, da RefreshRates den Ask-Preis aktualisiert.

Ihr Code funktioniert gut, aber für den Strategietester führt er zu einer Endlosschleife.

Die Verwendung von Return wird hier helfen. Wenn Sie mehr Erfahrung sammeln, werden Sie solche Konstruktionen loswerden. Ich wünsche Ihnen viel Glück.

 
Reshetov:


Das heißt, Sie sollten keine dummen Fragen stellen wie "was funktioniert nicht im nicht funktionierenden Code". Schließlich weiß selbst ein betrunkener Igel, dass nicht funktionierender Code nicht funktioniert, weil er nicht funktioniert. Aber niemand ohne telepathische Kräfte, außer dem Autor des Codes, kann verstehen, was im funktionierenden Code hätte funktionieren sollen.

Der Code funktioniert, es gibt nur immer Feinheiten, die Neulinge nicht kennen...
 
Reshetov:

Bitte sehr. Der Punkt ist, dass Sie, wenn Sie die "Mechanik" mit Hilfe von "Dritten" verstehen wollen, das Problem für dieselben "Dritten" formulieren müssen, d. h. Sie müssen beschreiben, was Sie von dem Algorithmus erhalten möchten, nicht was Sie erhalten haben.

"Die Schleife schleift" ist kein Problem, denn wenn sich in der Schleife nichts anderes als der continue-Operator befindet, muss sie so lange schleifen, bis die Schleifenbedingung falsch wird.

D.h., Sie sollten keine dummen Fragen stellen wie: "Was funktioniert nicht in nicht funktionierendem Code". Schließlich weiß selbst ein betrunkener Igel, dass nicht funktionierender Code nicht funktioniert, weil er nicht funktioniert. Aber niemand ohne telepathische Kräfte, außer dem Autor des Codes, kann verstehen, was im funktionierenden Code hätte funktionieren sollen.

Ich mag es nicht, wenn die Leute Anfänger mit Dreck bewerfen. Schreiben Sie einfach in einer menschlichen Art und Weise wie - die Frage ist schlecht/ungenau/falsch formuliert, oder - ein Fehler hier oder da. Erinnern Sie sich an sich selbst, als Sie anfingen zu lernen, wie man etwas tut, auch mehr als einmal wahrscheinlich eine dumme Frage gestellt. Und bringt die Metapher des betrunkenen Igels eine positive Lösung für das Problem? Es ist nur angenehm, sich im Glanz der eigenen Größe vor einem Neuling kühl zu fühlen.
 
paladin800:
Ich mag es nicht, wenn Neulinge mit einer Menge Schmutz beworfen werden.

Ein Schwein findet überall Schmutz © Volkssprichwort

Wo haben Sie den Schmutz gefunden? Wenn Sie es gefunden haben, fragen Sie einen Moderator.

paladin800:
Bringt die Metapher des betrunkenen Igels etwas Positives zu dem Problem?

Fordern Sie die Verwaltung auf, ein Verbot von Metaphern und Igeln in die Regeln aufzunehmen.

 
Reshetov:

Ein Schwein findet überall Schmutz © Volkssprichwort

Wo haben Sie den Schmutz gefunden? Wenn Sie sie finden, wenden Sie sich an einen Moderator.

Fordern Sie die Verwaltung auf, ein Verbot von Metaphern und Igeln in die Regeln aufzunehmen.

Und warum Moderatoren und Admins... Es ist eine Frage der Erziehung, der Berufsethik, des Taktes, der Toleranz, der Menschlichkeit... ...können die Administratoren nicht helfen.

Und wenn Sie das Problem nicht ganz verstehen, sollten Sie besser keine Ratschläge geben... Manchmal ist es besser, zu kauen... Obwohl es Ihr gutes Recht ist, auf Kosten anderer zu prahlen...

 
elugovoy:

Es ist alles eine Frage der Erziehung, der Berufsethik, des Taktgefühls, der Toleranz und letztlich der Menschlichkeit...

Mm-hmm. Der Kindergarten und das Institut der Edelfrauen in einem.

Warum überspringen wir also nicht die persönlichen Dinge und beantworten weiterhin die Fragen der Neulinge? Andernfalls kommt es zu einer Art Fluderastie seitens der Befürworter humanitärer Ansätze bei einem rein technischen Thema.

 
Ich möchte mich bei Evgeniy Lugovoy (er hat große telepathische Fähigkeiten) bedanken. Sie haben meine Frage nach den Problemen des Real- und Testerzyklus hundertprozentig beantwortet. Am selben Abend habe ich den Artikel "Testing and Optimizing Expert Advisors " unter dem Link http://articles gelesen.Am selben Abend stieß ich auf den Artikel "Testen und Optimieren des EA" über den Link . mql4.com/de/824 (dieser ist für Neulinge wie mich gedacht) und stellte fest, dass der Tester eine echte Kursbewegung diskret erzeugt und erst bei der nächsten Iteration des EA neue Kurse liefert, also schrieb ich den Code zum Testen um, indem ich eine Reihe von IF-Anweisungen verwendete, wo vorher Operatorschleifen waren. Anfängern wie mir empfehle ich, sich mit den "Common Functions" von MQL4 (Link http://docs.mql4.com/ru/common) im Detail vertraut zu machen. Ich war überrascht, den Unterschied in der Funktionsweise ein und derselben Funktion im realen Terminal und im Strategietester festzustellen, z.B. verzögert Sleep() im Tester nicht so wie es sollte und funktioniert nur im realen Terminal.Und schließlich, für die rücksichtslosen (wie mich) Liebhaber von bedingten Endlosschleifen int start() { double Level=1300; while (Ask<=Level) Die letzten beiden Zeilen des Codes, trotz seiner Unschuld, nach dem Ausführen auf einem Terminal in einem Echtgeld-Fenster, solange der Preis 1300 erreicht, wird eine riesige Menge an CPU-Zeit (auf meinem 2x4 Kern 25%) nehmen.Mein Freund schlug vor, dass, wenn Sie nicht aufgeben können, die Schleife, müssen Sie einfügen Sleep ( int 100), das heißt, geben Sie ein Intervall von 100 bis 200 Millisekunden, um den Prozessor zu entlasten.int start() { double Level=1300; while (Ask<=Level) { Sleep( int 100) continue; }
P.S. Für "Dritt"-Liebhaber der Ausdrücke: Drunken Hedgehog, Screwball, Fluderasty und so weiter. (obwohl wir uns in einem rein technischen Thema befinden), erlaube ich mir, einen kleinen Hinweis auf Fjodor Michailowitsch Dostojewski zu geben, der in seinem Roman "Der Idiot" über Fürst Myschkin etwas sehr Merkwürdiges sagt: "Die Schönheit wird die Welt retten! Und dich, Eugene, bitte ich, Moldawien zu grüßen, auch wenn ich in einem anderen Land lebe, aber ich bin in Kischinew geboren.
 
amavladi:

Es gibt keine Telepathie )))) Ich glaube, jeder hat schon einmal die gleichen Fehler gemacht, wenn er einen Preis für, sagen wir, ein Schleppnetz "erwischen" wollte... darunter auch ich vor etwa 6 Jahren.

Übrigens ist das Thema für Neulinge und nicht "rein technisch".

Ich werde Sie grüßen.

Viel Glück!

 
elugovoy:

Es gibt keine Telepathie )))) Ich glaube, jeder hat schon einmal die gleichen Fehler gemacht, wenn er einen Preis für, sagen wir, ein Schleppnetz "erwischen" wollte... darunter auch ich vor etwa 6 Jahren.

Übrigens ist das Thema für Neulinge und nicht "rein technisch".

Ich werde Sie grüßen.

Viel Glück!

Über Telepathie und "rein technisch" - ich bin für HerrnReshetov: ))).

Ich wünsche Ihnen auch viel Glück.

Grund der Beschwerde: