MQL5-Fehler bei der Arbeit mit iClose/iOpen-Zeitreihenzugriff usw. - Seite 7

 
Renat Fatkhullin:

1) Messen Sie die Ausführungszeit pro OnTick/OnCalculate-Berechnung in Mikrosekunden und zeigen Sie sie im Protokoll an.

Auf diese Weise können Sie sehen, wie lange Sie für die Berechnung eines Ticks benötigen. Schätzen Sie dann, wie viele Ticks Sie bei dieser Geschwindigkeit pro Sekunde zählen können. Wahrscheinlich wird es nicht mehr als ein Dutzend Ticks sein, und es gibt bewusst mehr Ticks pro Sekunde.


2) Messen Sie die Zeit für jedes OnCalculate an den Indikatoren, die mit den Charts/Zeitrahmen verbunden sind, aus denen Sie Daten extrahieren.

Wahrscheinlich gibt es dort eine ähnliche Situation. Aufgrund der langsamen Berechnungen wartet das Terminal, bis das berechnete Symbol:Zeitfenster freigeschaltet ist. Es sind die langsamen Indikatoren, insbesondere bei einem tiefen Verlauf, die dazu führen, dass die Charts anderer Händler eingefroren werden.


Bei der Entwicklung von Indikatoren müssen Sie Leistungsfragen und wirtschaftliche Neuberechnungen in den Vordergrund stellen. Andernfalls werden Sie alles um sich herum töten.

Renat, das ist wirklich sehr traurig. Wartet tiki jetzt darauf, dass ich meine Probleme löse? Bisher ging ich davon aus, dass Tics selbst erzeugt werden und ich entweder Zeit habe oder nicht. Jetzt stellt sich heraus, dass ich das System aussetzen kann.

 
Алексей Тарабанов:

Renate, es war sehr traurig. Warten die Tics jetzt darauf, dass ich meine Probleme in den Griff bekomme? Bisher ging ich davon aus, dass sich die Tics von selbst einstellen, und ich entweder Zeit habe oder nicht. Jetzt stellt sich heraus, dass ich das System aufhängen kann.

Der Indikator läuft bei jedem Tick, ohne Aussetzer. Sie müssen die OnCalculate-Dauer und die Häufigkeit der eintreffenden Ticks laufend überwachen. Andernfalls kommt es zu einem Stau.

Am einfachsten ist es, den Indikator auf ein benutzerdefiniertes Symbol anzuwenden und es mit einer bestimmten Häufigkeit zu ticken. Je höher die Frequenz, desto mehr werden Sie gebremst. Es ist alles logisch.

 

In welchen Fällen kann der Indikator seinen Wert nicht zeichnen? Die Puffer sind mit gültigen Werten gefüllt, aber das Diagramm des Indikators ist leer.... Wenigstens ist es nicht andersherum. 1940 bauen

1944 dasselbe. Es muss so sein.

 
fxsaber:

Der Indikator wird bei jedem Tick ausgeführt, ohne dass er übersprungen wird. Sie müssen die Dauer von OnCalculate und die Ankunftsrate von Ticks ständig überwachen. Andernfalls kommt es zu einem Stau.

Am einfachsten ist es, den Indikator auf einem benutzerdefinierten Symbol laufen zu lassen und es mit einer bestimmten Häufigkeit zu ticken. Je höher die Frequenz, desto mehr werden Sie gebremst. Das macht alles Sinn.

Ja, genau so ist es.

 
Алексей Тарабанов:

Renate, es war sehr traurig. Warten die Tics jetzt darauf, dass ich meine Probleme in den Griff bekomme? Bisher ging ich davon aus, dass sich die Tics von selbst einstellen, und ich entweder Zeit habe oder nicht. Jetzt stellt sich heraus, dass ich das System aufhängen kann.

Die Zecken haben immer gewartet. Wir garantieren, dass OnCalculate bei jedem Tick aufgerufen wird.

Während bei der vierten Version die grafische Benutzeroberfläche einfriert, handelt es sich bei der fünften Version nur um eine Verzögerung bei der Verarbeitung eines bestimmten Zeichens durch einen einzelnen Thread. Und in fünf Jahren war es immer so. Es ist nur so, dass Sie es erst jetzt gesehen haben.

 
Renat Fatkhullin:

Die eingefrorene Aktualisierung des unsichtbaren Zeitfensters von Aliens nach der Wiederherstellung der Verbindung wurde gelöst und behoben. Der Grund dafür war ein falscher Cache-Status nach dem erneuten Verbinden.

Beta-Version 1946 verfügbar über Hilfe -> Desktop-Updates prüfen -> Neueste Beta-Version.

Aktualisiert, lassen Sie es uns testen.

Die Frage ist, ob das aktuelle Problem war auch im Zusammenhang mit Fällen des Ladens von anderen Tools (unsichtbare Zeitrahmen), ich meine Multicurrency-Indikatoren und EAs oder diese sind nicht miteinander verbundenen Probleme?

 
Slava:

Die Zecken haben immer gewartet. Wir garantieren, dass OnCalculate bei jedem Tick aufgerufen wird.

Wenn in der vierten, würde es GUI einfrieren, aber in der fünften, ist es nur eine Verzögerung von einem separaten Thread Verarbeitung eines bestimmten Zeichens. Und in der fünften Klasse war es immer so. Es ist nur so, dass Sie es erst jetzt gesehen haben.

Das Terminalprotokoll wird eine Meldung über diese Situation enthalten, etwa "Indikator ist zu langsam" ?

?

 
Igor Makanu:

Zeigt das Terminalprotokoll eine Meldung über diese Situation an, z. B. "Indikator ist zu langsam"?

?

Im Expertenprotokoll
 
Slava:
Im Expertenprotokoll

Danke, das ist etwas, aber ich verstehe, dass es nicht programmatisch bestimmt werden kann, dass der Indikator Ticks berechnet, die nicht relevant sind und der Indikator hängt das Terminal Thread?

 
Igor Makanu:

Danke, das ist etwas, aber ich verstehe, dass Sie nicht programmatisch bestimmen können, dass der Indikator Ticks berechnet, die nicht relevant sind und der Indikator den Terminal-Thread aussetzt?

Es kann versucht werden, dies zu ermitteln.

Wenn es sich um Minuten handelt, können Sie die Zeit des letzten Balkens mit TimeCurrent() vergleichen. Wenn es nicht M1 ist, können Sie iTime(_Symbol,PERIOD_M1,0) abfragen und mit TimeCurrent() vergleichen.

Sie können den Geldkurs oder den letzten Kurs (je nach Symbol) mit dem Schlusskurs des letzten Balkens vergleichen. Sie können SymbolInfoTick direkt nach dem aktuellen Symbol fragen. Zusätzlich zu Bid und Last gibt es auch die Tick-Zeit

Grund der Beschwerde: