[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 267
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Danke, dort auf dem Link gibt es eine Software-Lösung für das Problem, und ich weiß nicht, was zu tun ist. Womit hat das zu tun und wie kann ich dieses Problem lösen? Warum funktionierte der EA einen Monat lang einwandfrei, und jetzt tritt eine Störung auf? Wenn der Fehler im Code liegt? Es stellt sich heraus, dass dieser Thread nicht für Neulinge geeignet ist, wenn er mich mit Antworten auf Fragen belastet. Ich bin frustriert.
Ich habe so etwas in meinem EA gleich nach dem Start geschrieben:
Probieren Sie es aus, vielleicht ist etwas davon auch für Sie nützlich.
1. ok. Int start() wurde deklariert. Ich habe immer null zurückgegeben. Ich habe auch die Befehle return(-1) und sogar return(-2) im Code gesehen. Wie wählt man diesen Code richtig aus?
2. Daher stellt sich natürlich die Frage, ob es möglich ist, start() von EA/Indikator/Skript nicht vom Typ int(), sondern von einem beliebigen anderen Typ zu deklarieren und was dann an das Terminal zurückzugeben ist. Mit anderen Worten: Was macht das Terminal mit dem von return() zurückgegebenen Wert?
1. Wie entscheiden Sie, was eine normale Funktion zurückgeben sollte?
2. Sie können jeden Typ haben, genau wie eine normale Funktion. Das Terminal macht nichts mit den zurückgegebenen Werten. Er ignoriert sie.
Besondere Funktionen
1) Wie entscheiden Sie, was eine normale Funktion ist?
2. Sie können jeden Typ haben, genau wie eine normale Funktion. Das Terminal macht nichts mit den zurückgegebenen Werten. Er ignoriert sie.
1. Um zu entscheiden, was eine gewöhnliche Funktion zurückgeben soll, muss ich wissen, warum der Hauptcode einen solchen Wert benötigt. Wenn ich zum Beispiel eine Entscheidung treffen möchte, einen Kaufauftrag zu eröffnen, wenn ein Signal vorliegt, schreibe ich eine Funktion, die die Anzahl der bereits eröffneten Kaufaufträge zurückgibt. Je nachdem, wie viele es sind, trifft der Code eine Entscheidung, die der im Code enthaltenen Logik folgt. Ich weiß nicht, welche Logik in den Rückgabecode eingebettet ist. Heute habe ich mir einen Artikel über die Erstellung einer Semaphore angesehen und bin auf einen Returncode (-2) gestoßen. Überrascht, hier eine Frage zu stellen. Das ist alles. ( https://www.mql5.com/ru/articles/1412 - Artikel hier).
2. Das Terminal ignoriert die zurückgegebenen Werte. Ist das so? Wenn ja, dann stellt sich wiederum die berechtigte Frage, warum der Entwickler bei der Erstellung eines EA/Indikators/Skripts in eine Vorlage genau int einträgt, denn es wäre sinnvoller, dort void einzutragen - dann muss das Terminal nichts ignorieren - wir würden 1 Takt an Prozessorzeit gewinnen? Vielleicht gibt es eine Logik in WHAT, um von int init(), int deinit() und int start() Funktionen zurückzukehren? Ich glaube, Roche hat das schon einmal irgendwo erklärt - er erinnerte sich an eine Beschreibung, wann man Null und wann man (-1) zurückgeben muss. Genau nach dieser Erklärung habe ich gesucht. Schade, dass ich es nicht finden konnte...
P.S.
Der Autor des Artikels verwendet return(-2) für seine eigenen Zwecke. Tatsache ist jedoch, dass die Funktion start() manchmal mit einem Code endet, der einen anderen Wert als Null zurückgibt. Und es ist nicht nur eine Person, die das tut. Genau diese Logik wollen wir verstehen.
Besondere Funktionen
Sieht im Text so aus.
Vordefinierte Funktionen können Parameter haben. Wenn diese Funktionen jedoch vom Client-Terminal aufgerufen werden, werden keine externen Parameter übergeben, sondern die Standardwerte verwendet.
Hier geht es um die Parameter, die in die Funktion eingehen, nicht um die Parameter, die von ihr zurückgegeben werden.
Dies ist ein Auftragszähler. Nun, es könnte zum Beispiel der Fall sein, dass Sie im Code wissen wollen, ob es auf dem Markt Kaufaufträge für ein bestimmtes Währungspaar und mit einer bestimmten magischen Zahl gibt, zum Beispiel. Wenn dies der Fall ist, kann z.B. kein weiterer Kaufauftrag eröffnet werden. Der Auftragszähler wird also benötigt, um eine Entscheidung zu treffen.
Ich habe dies in meinem EA gleich nach dem Start geschrieben:
Probieren Sie es aus, vielleicht finden Sie etwas davon nützlich.
wie diese Zeilen zu verstehen sind:
Volumen der Rückgabeaufträge
if(Käufe>0) return(Käufe);
sonst return(-sells);
} ?
Schreiben Sie ein Drehbuch:
wirf es auf die Karte und beobachte das Protokoll:
2012.07.20 12:04:11 111 NZDUSD,M15: removed
2012.07.20 12:04:11 111 NZDUSD,M15: uninit reason 0
2012.07.20 12:04:11 111 NZDUSD,M15: Попытка ретурна 136
2012.07.20 12:04:11 111 NZDUSD,M15: loaded successfully
(hier ist 111 der Name des Skripts). Wir sehen die Zeile "uninit reason 0" - offenbar hat das Terminal auf die Null gewartet!
Versuchen Sie dasselbe mit (-1) :
Das Ergebnis ist das gleiche:
2012.07.20 12:08:19 111 NZDUSD,M15: entfernt
2012.07.20 12:08:19 111 NZDUSD,M15: uninit Grund 0
2012.07.20 12:08:19 111 NZDUSD,M15:Versuchter Rückläufer -1
2012.07.20 12:08:19 111 NZDUSD,M15: erfolgreich geladen
Dem Terminal scheint es egal zu sein, ob eine Null zurückgegeben wird oder nicht.
P.S.
Im Allgemeinen stieß ich im Internet auf diese Antwort:
return 0 - das Programm hat seine Arbeit ohne Fehler beendet
Return 1 - oder eine höhere Zahl, hat das Programm seine Arbeit mit einem Fehler beendet und gibt den Fehlercode zur weiteren Bearbeitung zurück.
In jedem Betriebssystem gibt ein Programm immer einen Fehlercode zurück.
Das einzige Problem ist, dass unser Return den Code nicht an das Betriebssystem, sondern an das Terminal zurückgibt. Dies lässt die Frage offen.
Schreiben Sie ein Drehbuch:
wirf es auf die Karte und beobachte das Protokoll:
(hier ist 111 der Name des Skripts). Wir sehen die Zeile "uninit reason 0" - offenbar hat das Terminal auf die Null gewartet!
Versuchen Sie dasselbe mit (-1) :
Das Ergebnis ist das gleiche:
Offenbar ist es dem Terminal egal, ob eine Null zurückgegeben wird oder nicht.uninit reason ist der Grundcode für die Beendigung des Expert Advisors
https://docs.mql4.com/ru/constants/uninit