Fehler, Irrtümer, Fragen - Seite 1547

[Gelöscht]  
Комбинатор:
Wie kann man das Terminal dazu bringen, Daten, die auf diese Weise berechnet wurden, sofort neu zu zeichnen?

Es bezieht Daten aus Puffern, die nicht in OnCalculate enthalten sind

OnCalculate hat eine minimale Ziehzeit von 1 Minute

Tick-Indikatoren zeichnen jeden Tick

[Gelöscht]  
comp:
Das scheint nicht der Fall zu sein.

ChartRedraw erledigt jedoch 100 % der Arbeit in vier Schritten.

Und in fünf Fällen war es auch in Ordnung.

ChartRedraw wird also auf beiden Plattformen funktionieren.

[Gelöscht]  

Wenn CHARTEVENT_CHART_CHANGE eintrifft, führe ich eine Berechnung durch, die manchmal eine Sekunde/Abendstunde lang dauert. Wenn während der Berechnung z.B. ein Diagramm verschoben wird, dann wird nach der Berechnung CHARTEVENT_CHART_CHANGE erneut aus der Warteschlange aufgerufen.

Ist es möglich, während der Berechnung zu wissen, dass sich etwas in der Ereigniswarteschlange befindet? Könnte es dann nicht eine Berechnung durchführen, die nicht mehr relevant ist, diese unterbrechen und eine neue Berechnung starten?

Wenn z.B. auch ein sehr umfangreicher Berechnungsteil eine Prüfung für IsStopped() hat, dann würde das Schließen des Expert Advisors sofort erfolgen, ohne auf die Berechnung zu warten.

Hier wäre etwas Ähnliches, aber nicht mit dem Ereignis des Schließens, sondern mit ChartEvent.

 
comp:

Wenn CHARTEVENT_CHART_CHANGE eintrifft, führe ich eine Berechnung durch, die manchmal eine Sekunde/Abendstunde lang dauert. Wenn während der Berechnung z.B. ein Diagramm verschoben wird, dann wird nach der Berechnung CHARTEVENT_CHART_CHANGE erneut aus der Warteschlange aufgerufen.

Ist es möglich, während der Berechnung zu wissen, dass sich etwas in der Ereigniswarteschlange befindet? Könnte es dann nicht eine Berechnung durchführen, die nicht mehr relevant ist, diese unterbrechen und eine neue Berechnung starten?

Wenn z.B. auch ein sehr umfangreicher Berechnungsteil eine Prüfung für IsStopped() hat, dann würde das Schließen des Expert Advisors sofort erfolgen, ohne auf die Berechnung zu warten.

Hier wäre etwas Ähnliches, aber nicht mit dem Ereignis des Schließens, sondern mit ChartEvent.


einen zweiten Verarbeitungsfaden einrichten (z. B. in Form eines ms-Timers)

und genau dort die Berechnung durchzuführen, sofern das Zählerflag==XXX gesetzt ist, das bei CHARTEVENT_CHART_CHANGE erhöht wird.

Man holt also schnell die gesamte ChartEvent-Warteschlange, setzt ein Flag und parallel dazu prüft der Timer dieses Flag und berechnet es.

---

Überprüfen Sie zur gleichen Zeit den Wert des Flaggenzählers. Es ist möglich, die Berechnung zu stoppen, wenn der aktuelle Zählerstand höher ist als der Wert, bei dem die Berechnung gestartet wurde. Es ist also wie IsNewChanged

[Gelöscht]  
o_O:

Sie können also sehr schnell die gesamte ChartEvent-Warteschlange durchgehen, ein Flag setzen, und parallel dazu zieht der Timer dieses Flag und berechnet es.

Sagen Sie, dass ChartEvent und Timer-Ereignisse parallel laufen?
[Gelöscht]  

Service Desk hat folgende Erklärung abgegeben

SetIndexBuffer делается однократно на вызове OnInit

Verwendet jemand SetIndexBuffer nicht in OnInit und/oder wiederholt? In MT4 verwende ich sie ständig. Im MT5 können Sie das leider nicht tun.

 
comp:
Sagen Sie, dass ChartEvent und Timer-Ereignisse parallel laufen?

auch wenn sie nacheinander ausgeführt werden - Sie sind nicht daran gehindert, zumindest dies zu verwenden.

nehmen Sie sofort das gesamte ChartEvent weg und geben nur einen Auftrag ein.

---

über die Parallelität von Timer- und Chart-Ereignissen ist eine relevante Frage.

Fragen Sie den Servicemitarbeiter.

 
o_O:

auch wenn sie nacheinander ausgeführt werden - Sie sind nicht daran gehindert, zumindest dies zu verwenden.

nehmen Sie sofort das gesamte ChartEvent weg und geben nur einen Auftrag ein.

---

über die Parallelität von Timer- und Chart-Ereignissen ist eine relevante Frage.

Fragen Sie beim Service Desk nach.

Niemand liest die Dokumentation...

Das Client-Terminal sendet die erzeugten Ereignisse an die entsprechenden offenen Karten. Außerdem können Ereignisse von Diagrammen (Diagrammereignisse) oder mql5-Programmen (benutzerdefinierte Ereignisse) erzeugt werden. Die Erzeugung von Ereignissen zum Erstellen und Löschen von grafischen Objekten in einem Diagramm kann durch die Einstellung der Eigenschaften CHART_EVENT_OBJECT_CREATE und CHART_EVENT_OBJECT_DELETE eines Diagramms aktiviert oder deaktiviert werden. Jedes mql5-Programm und jedes Diagramm hat seine eigene Warteschlange für Ereignisse, in der alle neuen Ereignisse gespeichert werden.

Das Programm empfängt nur Ereignisse von dem Diagramm, auf dem es läuft. Alle Ereignisse werden nacheinander in der Reihenfolge ihres Eingangs bearbeitet. Befindet sich bereits ein Ereignis NewTick in der Warteschlange oder ist dieses Ereignis im Verarbeitungsstatus, wird ein neues Ereignis NewTick nicht in die Warteschlange des mql5-Programms gestellt. Wenn die Warteschlange des mql5-Programms bereits ein ChartEvent-Ereignis enthält oder ein solches Ereignis gerade verarbeitet wird, wird ein neues Ereignis dieses Typs nicht in die Warteschlange aufgenommen. Timer-Ereignisse werden nach demselben Schema behandelt: Wenn sich ein Timer-Ereignis in der Warteschlange befindet oder das Timer-Ereignis bereits behandelt wird, wird kein neues Timer-Ereignis in die Warteschlange gestellt.

[Gelöscht]  
Slawa:

Niemand liest die Dokumentation...

Dann gibt es keine ereignisbedingten Berechnungsunterbrechungen.
 
Slawa:

Keiner liest die Dokumentation...

Es ist schon lange her