Vielen Dank für diesen Artikel.
Ein kleines bisschen über den Fehler:
Все программы, работающие по данным стакана, по форме будут являться советниками, ведь обработчик события BookEvent есть только в советниках. Правда, можно сделать связку "советник-индикатор", где истинный индикатор сможет принимать данные от советника и обрабатывать состояние стакана.
Dies ist nicht wahr, der Indikator kann OnBookEvent auch behandeln.
angevoyageur:
Ein wenig über den Fehler:
Dies ist nicht wahr, der Indikator kann auch OnBookEvent behandeln.
Alain, danke für die Nachricht. Ja, das ist richtig, ich habe mich geirrt. Es funktioniert auch in Indikatoren... Ich habe mich bei der Erstellung eines Indikators auf die Liste der Handler verlassen, unter denen es kein OnBookEvent() gibt.
Und das Wichtigste ist, dass die Dokumentation sagt:
Alain, danke für die Nachricht. Ja, das ist richtig, ich habe mich geirrt. Es funktioniert auch in Indikatoren... Ich habe mich bei der Erstellung eines Indikators auf die Liste der Handler verlassen, unter denen es kein OnBookEvent() gibt.
Und das Wichtigste ist, dass es in der Dokumentation steht:
Richtig, die Dokumentation muss korrigiert werden. Schreiben Sie ServiceDesk über dieses Thema?
Nur zur Information, es gibt einen kleinen Fehler in diesem Artikel:
All programs working with Depth of Market data will have a form of an Expert Advisor, as only Expert Advisors feature the event handler of BookEvent. There is a possibility, however, to write an "Expert-Indicator" pair , where the indicator can receive data from the EA and process the Depth of Market state.
Es ist nicht wahr, dass Indikatoren auch BookEvent verarbeiten können. Dieser Fehler beruht auf einem Fehler in der Dokumentation und sollte bald korrigiert werden. Der Autor des Artikels und ServiceDesk wurden kontaktiert.
Guten Tag, vielen Dank für den Artikel, sehr nützlich!
so eine Frage, sagen wir, ich verarbeite das BookEvent-Ereignis, und mein Handler löscht, platziert Aufträge, die wiederum dieses Ereignis..... dann in dem Moment, wenn die Frist für die Platzierung (Löschen von Aufträgen) und ein neues BookEvent-Ereignis wieder gebildet wird, wird meine sehr anfängliche Prozedur unterbrochen werden? weil ich bemerkt habe, dass die Code-Ausführung nicht das Ende erreicht.... nicht alles wird ausgeführt ... Ich hoffe, ich habe die Idee klar gemacht ))
Guten Tag, vielen Dank für den Artikel, sehr nützlich!
so eine Frage, sagen wir, ich verarbeite das BookEvent-Ereignis, und mein Handler löscht, platziert Aufträge, die wiederum dieses Ereignis..... dann in dem Moment, wenn die Frist für die Platzierung (Löschen von Aufträgen) und ein neues BookEvent-Ereignis wieder gebildet wird, wird meine sehr anfängliche Prozedur unterbrochen? weil ich festgestellt habe, dass die Code-Ausführung nicht das Ende erreicht.... nicht alles wird ausgeführt ... Ich hoffe, ich habe mich klar ausgedrückt ))
Vielen Dank für Ihre Meinung!
Nein, während ein Ereignis verarbeitet wird, wird die Programmsteuerung nicht automatisch an einen anderen Handler übergeben, wenn ein neues Ereignis erzeugt wird... Sie können dies mit der Print()-Funktion überprüfen (und es ist besser, eine Pause Sleep() hinzuzufügen).
Es gibt ein solches Konzept als "Ereignis-Warteschlange".
In der Dokumentation heißt es dazu:
Das Programm empfängt Ereignisse nur von dem Graphen, auf dem es läuft. Alle Ereignisse werden nacheinander in der Reihenfolge ihres Eingangs abgearbeitet. Befindet sich bereits ein NewTick-Ereignis in der Warteschlange oder ist dieses Ereignis in Bearbeitung, wird das neue NewTick-Ereignis nicht in die Warteschlange des mql5-Programms gestellt. Wenn sich bereits ein ChartEvent-Ereignis in der Warteschlange des mql5-Programms befindet oder dieses Ereignis gerade verarbeitet wird, wird ein neues Ereignis dieses Typs nicht in die Warteschlange aufgenommen. Timer-Ereignisse werden nach demselben Schema verarbeitet - wenn sich ein Timer-Ereignis in der Warteschlange befindet oder bereits verarbeitet wird, wird ein neues Timer-Ereignis nicht in die Warteschlange gestellt.
Ereigniswarteschlangen haben eine begrenzte, aber ausreichende Größe, so dass ein Überlauf der Warteschlange bei einem korrekt geschriebenen Programm unwahrscheinlich ist. Wenn die Warteschlange überläuft, werden neue Ereignisse verworfen, ohne in die Warteschlange aufgenommen zu werden.
Ereigniswarteschlangen haben eine begrenzte, aber ausreichende Größe, so dass ein Überlaufen der Warteschlange bei einem korrekt geschriebenen Programm unwahrscheinlich ist. Wenn die Warteschlange überläuft, werden neue Ereignisse verworfen, ohne in die Warteschlange aufgenommen zu werden.
meine Befürchtungen sind also doch nicht unbegründet )) Ich habe einen Spreader für usd\rub-Futures geschrieben, um die besten Preise die ganze Zeit im Stapel zu behalten.... dann wird es auf jeden Fall zu einem Überlauf der Warteschlange kommen, da die Wette sehr oft pro Sekunde aktualisiert wird, und das ohne die Tatsache, dass ich dort auch etwas hinstelle, löschen... und bei mir wird es definitiv nicht in time..... sein und das ist nur Demo... und auf dem realen Markt gibt es eine verrückte Wette))
danke, dass du meine Gedanken in die richtige Richtung lenkst )
Guten Tag! Sehr informativer Artikel. Ich habe die folgende Frage.
Ich habe die Aufgabe, Geschäfte, die auf einem Instrument ausgeführt wurden, nach der Art der Aufträge zu filtern, mit denen sie ausgeführt wurden (Market/Limited).
Wie kann ich OnBookEvent-Ereignisse und OnTick-Ereignisse verknüpfen, um diese Aufgabe zu lösen, d. h. wie kann ich feststellen, welche Ordertypen an dem Geschäft beteiligt waren? Soweit ich verstanden habe, kann diese Aufgabe nicht nur mit OnBookEvent gelöst werden.
Rubick:
...Wie kann man OnBookEvent-Ereignisse und OnTick-Ereignisse verknüpfen, um dieses Problem zu lösen, d.h. wie kann man feststellen, welche Arten von Aufträgen an der Transaktion beteiligt waren? Soweit ich verstehe, kann eine solche Aufgabe nicht nur mit OnBookEvent gelöst werden.

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel MQL5-Kochbuch: Verarbeitung des Ereignisses BookEvent :
Dieser Artikel widmet sich BookEvent - einem Markttiefeereignis - und den Prinzipien seiner Verarbeitung. An dieser Stelle soll uns ein MQL-Programm, das Markttiefezustände verarbeitet, als Beispiel dienen. Das Programm basiert auf einem objektorientierten Ansatz. Die Verarbeitungsresultate werden auf dem Bildschirm in Form eines Panels und in Form von Levels der Markttiefe dargestellt.
Basierend auf der Dokumentation wird dieses Ereignis immer dann generiert, wenn sich der Markttiefestatus ändert. Lassen Sie uns also an dieser Stelle bitte festhalten, dass es sich bei BookEvent um ein Markttiefeereignis handelt.
Unter Markttiefe verstehen wir ein Array an Aufträgen, die sich in Richtung (Verkaufen und Kaufen), Preis und Volumen unterscheiden. Markttiefepreise kommen denen des Marktes sehr nahe und können daher als die besten Preise angesehen werden.
Die Markttiefe in MetaTrader 5
Nebenbei gesagt: In MetaTrader 5 gibt es ein „Auftragsbuch“, das den Titel „Markttiefe“ trägt (Abb. 1). Mehr Informationen zur Markttiefe finden Sie im Benutzerhandbuch des Kundenterminals.
Autor: Dennis Kirichenko