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
Prival:
Selten, aber es gibt Situationen, in denen die Notierungen für ein Instrument für eine lange Zeit einfrieren (ich habe eine solche Situation beim Yen gesehen). Und wenn der Expert Advisor bei diesem Paar hängen bleibt, sind Sie in Schwierigkeiten, wenn Sie nicht den gesamten Code in OnTime() übersetzt haben.
Lizar:
Ein solches Ereignis kann mit TimeCuurent() empfangen werden, aber was man damit weiter macht, wie man es synchronisiert, ist eine Frage.
Was hat TimeCuurent() damit zu tun?
Die Hilfe sagt:
Im OnTick()-Handler gibt diese Funktion die Zeit des eingehenden verarbeiteten Ticks zurück. In anderen Fällen (z.B. Aufruf in OnInit(), OnDeinit(), OnTimer() Handlern usw.) ist dies die Ankunftszeit des letzten Kurses für jedes im "Market Watch"-Fenster verfügbare Symbol, die gleiche Zeit, die im Titel dieses Fensters angezeigt wird.
Die Synopse lautet:
Im OnTick()-Handler gibt diese Funktion die Ankunftszeit des gerade verarbeiteten Ticks zurück. In anderen Fällen (z.B. Aufruf in den Handlern OnInit(), OnDeinit(), OnTimer() usw.) ist dies die Ankunftszeit des letzten Kurses für jedes im "Market Watch"-Fenster verfügbare Symbol, die gleiche Zeit, die in der Kopfzeile dieses Fensters angezeigt wird.
Ja, das ist klar. Nur wenn wir es in OnTime setzen, können wir die Zeit nicht mehr als einmal pro Minute aktualisieren, und wenn wir es in das aktuelle OnTick() setzen, riskieren wir, Ticks für einige der Paare zu verpassen (in mults).
Und was im Verarbeitungsblock zu tun ist, ist klar (für mults) - Wir erhalten einen neuen Wert, vergleichen ihn mit dem bestehenden und ziehen Schlussfolgerungen, ob es einen neuen Tick gab oder nicht.
Aber sagen Sie mir, warum machen Sie das im Expert Advisor?
Die Synopse lautet:
error. Hier ist, was die Hilfe sagt https://www.mql5.com/de/docs/basis/function/events
DasNewTick-Ereignis wird nur für Expert Advisors erzeugt, wenn ein neuer Tick für das Symbol empfangen wird, an dessen Chart der Expert Advisor angehängt ist.
Noch einmal. Wir sprechen von einem Expert Advisor, der an einem Symbol hängt. Er wird ausgelöst durch das Ereignis
void OnTick() {}
Wenn Sie sich innerhalb dieser Funktion befinden und es für mehr als eine Stunde keine Ticks auf diesem Paar gibt, können Sie innerhalb einer Stunde nichts tun. Der einzige Ausweg besteht darin, die Funktion in einen Timer einzubinden, der unabhängig vom Eintreffen von Ticks auf dem Instrument startet.
Aber wenn wir es in OnTime setzen, können wir die Zeit nicht mehr als einmal pro Minute aktualisieren, und wenn wir es in der aktuellen OnTick() setzen, riskieren wir, Ticks auf einige der Paare (in mults) zu verpassen.
Hier ist, was die Hilfe sagt https://www.mql5.com/de/docs/basis/function/events.
Noch einmal. Wir sprechen über einen Expert Advisor, der an einem Symbol hängt. Er wird durch das Ereignis
void OnTick() {}
Wenn Sie sich innerhalb dieser Funktion befinden und mehr als eine Stunde lang keine Ticks auf diesem Paar vorhanden sind, können Sie innerhalb einer Stunde nichts tun. Bisher ist der einzige Ausweg, es im Timer zu tun, es ist unabhängig von der Ankunft der Ticks auf dem Instrument gestartet.
Ja, wenn wir im Rahmen dieser https://www.mql5.com/de/docs/basis/function/events handeln , stimme ich zu, dass die beste Option, wie es jetzt scheint, OnTime ist. Aber es wird uns nur vor der Abhängigkeit von der Ankunft von Ticks bewahren. Und es wird uns nicht vor der Single-Thread-Abhängigkeit bewahren: Während wir ein Signal für ein Instrument verarbeiten, riskieren wir, die Verarbeitung anderer Instrumente zu verpassen oder zu verzögern. Dies gilt insbesondere dann, wenn die "Zeit für die Verarbeitung von Handelsaufträgen zwischen 2 und 7 Sekunden" + Requotes beträgt.
Ich erinnerte mich an TimeCuurent(), weil es interessant war, in der Marktübersicht über Echtzeit-Ticks für alle Paare zu sprechen.
Sehr interessanter Artikel. Danke, dass Sie all dies mit uns teilen.
Dennoch einige Bemerkungen:
Wenn Sie über diese Funktion sprechen, sagen Sie:
If you call this prototype function from one place, then we have what we need. But if we want to use this function, for example, again in another place in the same calculation loop, it will always return false, which means that there is no bar. And this will not always be true. Static variable in this case imposes an artificial limit on the number of prototype function calls.
Sie haben eine statische lokale Variable durch eine globale Variable ersetzt, was dasselbe ist, und Sie haben Ihr Problem nicht gelöst.
Dennoch hat Ihr Artikel das Verdienst , zum Nachdenken anzuregen und interessante Ideen zu bieten .
Guter Artikel, danke für den Austausch! All das war sehr nützlich!
Wie auch immer, ich habe Ihre isNewBar-Funktion genommen und es wirft die folgende Meldung beim Kompilieren:"möglicher Datenverlust aufgrund der Typkonvertierung".
Also habe ich die Var-Typen von datetime auf long geändert:
Jetzt kompiliert sie ohne Probleme und scheint gut zu funktionieren. Ich danke Ihnen!