Event-Stream. Wie kann man das Ereignis kontrollieren und in den Leerlauf versetzen? (+ gelöst) - Seite 3
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
Yedelkin:
Ähnlich verhält es sich, wenn bereits ein Ereignis ChartEventin der Warteschlange des mql5-Programms vorhanden ist oder ein solches Ereignis gerade behandelt wird .
Hmm. Das ist wirklich schlimm. Theoretisch bedeutet dies, dass, wenn z. B. ein Indikator und ein Expert Advisor unabhängig voneinander Ereignisse verwenden, es in beiden Fällen zu Auslassungen kommen kann.
Dann macht es keinen Sinn, das Ereignis als zuverlässiges Mittel zur Datenübermittlung zu nutzen.
Schade.
Ihre Frage "Mit welcher ungefähren Häufigkeit sollten benutzerdefinierte Ereignisse gesendet werden, damit sie die Warteschlange nicht überfüllen?
Meine Antwort auf der ersten Seite lautet "mit der Häufigkeit der OnChartEvent-Aufrufe".
Das heißt, ein Ereignis ist ein OnChartEvent. Es sollten nicht mehr als zwei Ereignisse dazwischen liegen.
Das war's mit der Mathematik.
Noch einmal: Lesen Sie die erste Seite. Ich habe gezeigt, wie man die Anhäufung von Benutzerereignissen vermeiden kann, wenn ein Terminalereignis anstelle eines Benutzerereignisses verarbeitet wird. So einfach ist das.
Noch einmal, höflich :) Sie haben Ihr Problem gelöst, ich versuche, meines zu lösen, allerdings mit einem anderen Plan. Beim Lesen der Diskussion habe ich keine Antwort auf meine Fragen gefunden. Sie haben meine Hauptfrage (zur Speichernutzung) noch immer nicht beantwortet (falls Sie das tun wollen).
Lassen Sie mich das erklären. Ich habe nicht die Aufgabe "irgendeine Funktion zu aktualisieren, aber schneller als MQL vorschlägt mit einem Timer". Umso mehr, als es am Ende auf so kluge Weise vorgeschlagen wurde. Die benutzerdefinierten Ereignisse von mehreren Charts mit variabler Frequenz bombardieren einen separaten Chart, der einen Expert Advisor und eine Event-Handler-Funktion enthält. Dementsprechend passt das Ergebnis Ihrer eng gefassten Aufgabe(EventChartCustom innerhalb von OnChartEvent) überhaupt nicht in mein Schema der Arbeit mit benutzerdefinierten Ereignissen.
Yedelkin:
Zur Klarstellung. Ich habe nicht die Aufgabe, irgendeine Funktion schneller zu aktualisieren, als es MQL per Timer vorschlägt". Schon gar nicht auf eine so clevere Art und Weise, wie am Ende vorgeschlagen. Die benutzerdefinierten Ereignisse von mehreren Charts mit variabler Frequenz bombardieren einen separaten Chart, der einen Expert Advisor und eine Event-Handler-Funktion enthält. Dementsprechend passt das Ergebnis Ihrer eng gefassten Aufgabe(EventChartCustom innerhalb von OnChartEvent) überhaupt nicht in mein Schema der Arbeit mit benutzerdefinierten Ereignissen.
Es ist nicht kompliziert, es ist einfach. Wenn Sie es nicht verstehen können, ist das nicht mein Problem. das ist eine
Es ist nicht innerhalb von OnChartEvent, es ist über den ganzen Code verstreut. Sie erfinden Ihre eigenen, engen Einschränkungen für den Betrieb. Das sind zwei.
Wenn sich bereits ein Ereignis ChartEvent in der Warteschlange von mql5-program befindet oder ein solches Ereignis bearbeitet wird, wird ein neues Ereignis dieses Typs nicht in die Warteschlange gestellt.
Dies ist entweder ein Fehler oder ein Dokumentationsfehler oder fehlende Bedingungen.
Alle Ereignisse werden erfolgreich in die Warteschlange aufgenommen und keine Ereignisse werden verworfen. Sonst wäre mein Thema nicht erschienen.
Ich versuche, mein anderes Problem zu lösen
welche Auswirkungen hat Ereignis Warteschlange Überlauf auf RAM-Größe? Wenn sich herausstellt, dass die Ereigniswarteschlange überläuft, wohin gehen dann die Ereignisse, die die Warteschlange überlaufen lassen?
Wenn ein Ereignis verworfen wird, wird es einfach nicht in die Warteschlange aufgenommen. Der Speicher wächst nicht.
Puh! Das ist die Hauptsache, die ich verstehen wollte. Und da TheXpert sagte, dass nur ein paar MB für die Warteschlange selbst verwendet werden, ist es wahrscheinlich, dass das Speicherleck woanders liegt... Bis zum Beweis des Gegenteils sollten wir uns an diese Aussage halten.
Wenn diese Art von Problem auftritt, dann ist die Lage sehr schlecht. Ich denke, die überfüllte Ereigniswarteschlange ist der letzte Ort, an dem man nach Speicherproblemen suchen sollte.
Ja, ich versuche, überall zu suchen, wo ich kann.
Beachten Sie jedoch, dass von den drei disqualifizierten Sachverständigen mindestens zwei mit einem benutzerdefinierten Ereignisstrom gearbeitet haben (der Autor des dritten Sachverständigen antwortet nicht auf die Anfrage). Lizar (das mit benutzerdefinierten Ereignissen arbeitet) hat ebenfalls einen hohen Speicherverbrauch. Und tol64 hat einen extrem niedrigen Speicherverbrauch, weil die Benutzerereignisse seltener als einmal pro Minute verwendet werden, wenn ich es richtig verstanden habe. Es stellt sich also heraus, dass Sie die Effizienz der Implementierung des Konzepts der benutzerdefinierten Ereignisse anzweifeln müssen, bis Sie eine erschöpfende Antwort erhalten.
Beachten Sie jedoch, dass von den drei disqualifizierten EAs mindestens zwei mit einem Strom von benutzerdefinierten Ereignissen arbeiteten (der Autor des dritten antwortet nicht auf die Anfrage). Lizar (das mit benutzerdefinierten Ereignissen arbeitet) hat ebenfalls einen hohen Speicherverbrauch. Und tol64 hat einen extrem niedrigen Speicherverbrauch, weil die Benutzerereignisse seltener als einmal pro Minute verwendet werden, wenn ich es richtig verstanden habe. Es stellt sich also heraus, dass Sie die Effizienz der Implementierung des Konzepts der benutzerdefinierten Ereignisse anzweifeln müssen, bis Sie eine erschöpfende Antwort erhalten.
es ist nicht kompliziert, es ist einfach. Wenn Sie es nicht verstehen können, ist das nicht mein Problem.
So wie ich es verstanden habe, habe ich geschrieben, dass es kompliziert ist. Sonst hätte ich es nicht angerührt.
Es ist nicht innerhalb von OnChartEvent, es ist im gesamten Code. Du machst dir deine eigenen engen Grenzen, wie es funktioniert. Das sind zwei.
Ja, ja, EventChartCustom befindet sich nicht innerhalb von OnChartEvent, sondern quasi außerhalb. Schauen Sie sich nun Ihren eigenen Code an:
Offensichtlich in diesem Code EventChartCustom ist nicht innerhalbOnChartEvent, und ich bin sehr falsch :)
Es ist entweder falsch oder ein Fehler oder ein Dokumentationsfehler oder eine unterschätzte Bedingung.
Alle erfolgreichen Ereignisse bleiben in der Warteschlange, und kein Ereignis wird verworfen. Sonst wäre mein Thema nicht erschienen.
Es gibt noch mindestens eine weitere Version: In Ihrem speziellen Fall läuft die Warteschlange einfach nicht über (aus Gründen der Code-Effizienz), so dass es keinen Grund gibt, Ereignisse zu verwerfen.
Es gibt noch mindestens eine weitere Variante: In Ihrem speziellen Fall läuft die Warteschlange einfach nicht über (aus Gründen der Code-Effizienz), so dass keine Ereignisse verworfen werden.
Hier ist mein spezieller Fall, mit dem ich begonnen habe, um zu zeigen, dass identische Ereignisse nicht verworfen werden
https://www.mql5.com/ru/forum/5091#comment_112780
Dort habe ich geschrieben, warum der Überlauf auftritt.
Ja, ja, EventChartCustom befindet sich nicht innerhalb von OnChartEvent, sondern quasi außerhalb. Schauen Sie sich nun Ihren eigenen Code an:
Gehen Sie der Sache auf den Grund! Ich habe eine Demonstration des Problems und seiner Lösung gezeigt. Dieser EventChart-Aufruf kann an jeder beliebigen Stelle des Codes erfolgen.
Und vergessen wir nicht, dass der Expert Advisor die Ereignisse von den Indikatoren erhielt, die auf vielen Tools und Zeitrahmen liefen, insgesamt etwa 80, wenn ich mich richtig erinnere. Jeder Indikator verbraucht Ressourcen für Indikatorpuffer, und genau da liegt der Hund begraben.
Sprechen Sie von den Japanern? Nun, in meinem Fall ist es einfacher: ein universeller Indikator mit 8 oder 15 Berechnungsindikatorpuffern, der auf 6 Instrumenten in einem Zeitrahmen läuft. D.h. es gibt nur 6 Indikatoren. Theoretisch kann ein solches System 2 GB in einer Woche verbrauchen?
Lesen Sie den Artikel Reducing Memory Consumption of Auxiliary Indicators, er könnte nützlich sein.
Danke, da habe ich schon alles optimiert :) Soweit ich mich erinnere, auch mit Blick auf diesen Artikel. Ich werde auf die nächste Stufe der Erleuchtung warten müssen :)
Ist es möglich, den Expert Advisor und den Indikator separat zu bestimmen, wenn sie über benutzerdefinierte Ereignisse zusammenarbeiten?