Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1188
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
Nach Ihrer Antwort zu urteilen, verstehen Sie nicht wirklich, wie das Programm funktioniert. Es scheint also eine dumme Frage zu sein. Genau wie der vorherige Kommentator meint, dass es aufhört. Aus meiner Erfahrung mit der Programmierung in anderen Sprachen denke ich, dass es seinen Rumpf in einer Schleife ausführt, und wenn ein Ereignis eintritt, taucht es in dieses ein. Wenn das Programm seinen Körper in einer Schleife ausführt, erklärt das, warum das Programm so geschrieben ist.
Wenn ein "New Tick"-Ereignis eintritt, wird das Programm im OnTick()-Handler gestartet, bis zum Ende ausgeführt und gestoppt. Mit der Ankunft einer neuen Zecke beginnt alles wieder von vorne. Wenn während der Programmausführung ein neuer Tick eingetreten ist und das Programm die Verarbeitung des vorherigen Ticks noch nicht abgeschlossen hat (es läuft noch), dann wird dieser Tick übersprungen.
Programme in MQL werden nicht in Schleifen ausgeführt. Sie haben drei Einstiegspunkte - OnInit(), OnDeinit() und OnTick().
Beim Start wird OnInit() ausgeführt, dann, wenn ein Tick empfangen wird - OnTick(), wenn die Operation beendet ist - OnDeinit().
Es gibt auch andere Handler. Aber es ist besser, die Hilfe zu öffnen, als jemanden zu bitten, es hier zu duplizieren.
Hallo. Bei der Arbeit an meinem Indikator habe ich einen Fehler beim Neustart des Terminals gefunden. Auf der Grundlage dieses Fehlers habe ich einen kleinen Quellcode erstellt, um ihn zu testen:
Wenn dieses Beispiel auf ein Diagramm geworfen wird (oder es ist der erste Terminalstart nach dem Systemstart), funktioniert alles einwandfrei. Im Protokoll steht Folgendes:
2020.06.24 21:05:50.773 Loader::Loader symbol: EURUSD timeframe: PERIOD_H1
2020.06.24 21:05:50.773 Lader::Laderiegel: 140433
2020.06.24 21:05:50.773 Loader::Loader Fehler: 0
2020.06.24 21:05:50.773 Loader::Loader Bars (2): 140433
Aber wenn ich das Terminal mit diesem Indikator neu starte, erhalte ich einen Fehler:
2020.06.24 21:07:34.963 Loader::Loader Symbol: EURUSD Zeitrahmen: PERIOD_H1
2020.06.24 21:07:34.963 Loader::Loader Bars: 0
2020.06.24 21:07:34.963 Loader::Loader Fehler: 4401
2020.06.24 21:07:34.964 Loader::Loader Bars (2): 140433
Symbol und Zeitrahmen initialisiert ok
2020.06.24 21:07:34.963 Loader::Loader Symbol: EURUSD Zeitrahmen: PERIOD_H1
Aber iBars(Symbol, Zeitrahmen) gibt 0 aus irgendeinem Grund
2020.06.24 21:07:34.963 Loader::Loader Bars: 0
In diesem Fall erscheint der Fehler 4401.
Aber iBars(Symbol(), Period()) funktioniert gut.
2020.06.24 21:07:34.964 Loader::Loader Bars (2): 140433
Mindestens symbol = Symbol() und timeframe = Period() laut Logmeldungen (auch während der Verzögerung, wenn das Terminal neu startet). Wie kann iBars(Symbol, Timeframe), mit absolut korrektem Symbol und Timeframe, Null ergeben, während iBars(Symbol(), Period()) gut funktioniert, wenn die Parameter in den Funktionen laut Protokoll gleich sind?
Wie eröffne ich ein MT4-Demokonto bei MetaQuotes Demo? Früher funktionierte es ohne Probleme, jetzt steht auf der letzten Seite des Dialogs: Registrierung, Bitte etwas warten, und in diesem Zustand bleibt er unendlich lange inaktiv, Felder mit Login und Passwort bleiben leer. Keine Meldungen im Protokoll. Ich habe sowohl "Demo" als auch "Real" und verschiedene Arten von Konten ausprobiert.
UPD Ich habe eine Broker-Demo ausprobiert - das Gleiche.
Wenn ein "New Tick"-Ereignis eintritt, wird das Programm im OnTick()-Handler gestartet, bis zum Ende ausgeführt und gestoppt. Mit der Ankunft einer neuen Zecke beginnt alles wieder von vorne. Wenn während der Programmausführung ein neuer Tick eingetreten ist und das Programm die Verarbeitung des vorherigen Ticks noch nicht abgeschlossen hat (es läuft noch), dann wird dieser Tick übersprungen.
Programme in MQL werden nicht in Schleifen ausgeführt. Sie haben drei Einstiegspunkte - OnInit(), OnDeinit() und OnTick().
Beim Start wird OnInit() ausgeführt, dann, wenn ein Tick empfangen wird - OnTick(), wenn die Operation beendet ist - OnDeinit().
Es gibt auch andere Handler. Aber es ist besser, die Hilfe zu öffnen, als jemanden zu bitten, es hier zu duplizieren.
Ich danke Ihnen. Ja, das verstehe ich, aber die Funktion ist im Hauptteil des Programms geschrieben. Vielleicht habe ich nicht bemerkt, dass es irgendwo genannt wurde.
Wie können wir sehen, wovon Sie sprechen? Geben Sie uns ein Beispiel.
Wie können wir sehen, wovon Sie sprechen? Geben Sie uns ein Beispiel.
Ich danke Ihnen. Ja, ich verstehe es, aber die Funktion ist im Hauptteil des Programms geschrieben. Vielleicht habe ich irgendwo einen Aufruf dazu verpasst.
In mql4 werden Funktionen in beliebiger Reihenfolge geschrieben, oben und unten spielt keine Rolle, es kann früher oder später funktionieren. So etwas gibt es in C++ nicht, wo alle Funktionen nur in der Reihenfolge des Schreibens funktionieren können, und wenn man sie aufrufen will, muss sie vor dem Ort des Aufrufs definiert werden, sonst stürzt das Programm ab. Der Mann hat mir gezeigt, wie man Funktionen in unterschiedlicher Reihenfolge schreibt, aber ich weiß nicht mehr, wie man das in C++ macht.
Grüße. Bitte helfen Sie mir weiter. Ich habe folgende Frage. Verstehe ich das richtig? Das Programm wird vom Anfang bis zum Ende ausgeführt, hält aber an, wenn ein Ereignis eintritt, z. B. ein Tick, die Ontick-Funktion beginnt mit der Ausführung, beendet dann ihre Ausführung und das Programm wird wieder von Anfang an ausgeführt? Diese Frage bezieht sich auf Folgendes: Wo schreibe ich zum Beispiel die Größe des Handelsloses, im Programmkörper oder in der Ontick-Funktion?
Ich schaue mir den offiziellen Bot an, der ein Beispiel im Terminal ist, dort wird viel Berechnung im Programmkörper durchgeführt, und ich verstehe nicht, warum das so ist.
Mein Los wird wie folgt berechnet
es steht am Anfang des Expert Advisors... und ich habe es ganz ans Ende des Codes gesetzt
Wenn die OnTick-Funktion die Variable Lots aufruft, wird sie von EA gefunden und neu berechnet.
@Artyom Trishkin
Sind Sie ein Moderator in diesem Thema?