Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 27

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2017.02.07 13:41

SymbolInfoTick in Indikatoren funktioniert ganz anders als in EAs.

In einem Indikator wird immer der Tick zurückgegeben, der den OnCalculate-Aufruf ausgelöst hat. Und diese Initiator-Ticks im Indikator sollten nicht übersprungen werden - das ist die Ideologie der Entwickler. Das Problem liegt in der Bildung der Warteschlange für diese Zecken.

Im Expert Advisor gibt SymbolInfoTick in OnTick nicht den Tick zurück, der den Aufruf von OnTick ausgelöst hat, sondern stellt eine vollständige Anfrage nach dem aktuellen Status.

 
fxsaber:

Mit anderen Worten:

Der Indikator zeigt den ersten Tick aus dem gesamten Paket an, wenn ein Tick-Batch eintrifft, während der EA den letzten Tick anzeigt.

Verstehe ich das richtig?

 
Artyom Trishkin:

Mit anderen Worten:

Der Indikator zeigt den ersten Tick aus dem gesamten Paket an, wenn ein Paket von Ticks ankommt, während der EA den letzten Tick anzeigt.

Habe ich es richtig verstanden?

Ja. OnCalculate wird nicht bei jedem Tick des Pakets in der Warteschlangenreihenfolge aufgerufen.
 
fxsaber:
Ja. OnCalculate wird nicht bei jedem Tick des Pakets in der Reihenfolge der Warteschlange aufgerufen.

Bei jeder Zecke? Weil Sie NICHT geschrieben haben...

Es stellt sich heraus, dass beim Eintreffen eines Pakets von Ticks der Indikator in der Reihenfolge der Ticks im eingehenden Paket startet?

Ich frage mich, wenn das Paket bei der Eröffnung eines neuen Balkens empfangen wurde, wie viele Male während dieses Pakets von Ticks wird der Indikator die vollständige Neuberechnung durchführen?

 
Artyom Trishkin:

Bei jeder Zecke? Weil Sie NICHT geschrieben haben...

Wahrscheinlich hat er nicht viel geschrieben.

Es stellt sich heraus, dass bei der Ankunft eines Pakets von Zecken, der Indikator in der Reihenfolge der Zecken in dem eingehenden Paket gestartet wird?

Ich frage mich, wenn das Paket bei der Eröffnung eines neuen Bar gekommen ist - wie oft während dieses Pakets von Ticks wird der Indikator eine vollständige Neuberechnung machen?

Das Ereignis Berechnen wird bei JEDEM Tick erzeugt. Daher gibt es eine Tick-Warteschlange für Indikatoren. Erreicht sie einen bestimmten Wert, wird im Protokoll eine Warnung angezeigt, dass der Indikator zu langsam ist.

Die Balken selbst sind von Natur aus Indikatoren und werden durch Calculate-Ereignisse gebildet. Wenn die TF M1 also 10:15:00.020 ist und ein 50 ms-Paket kommt, dann hat der erste Tick darin immer noch die Zeit 10:14:59.970. Und alle Indikatoren werden zuerst bei diesem Calculate-Ereignis aufgerufen - zuerst der Zeitreihenindikator und dann die benutzerdefinierten Indikatoren mit diesen Zeitreihen. D.h. in diesem Layout ist der 10:15-Takt noch nicht als Null-Takt ausgebildet. Und der Null-Balken ist 10:14.


Wenn das Paket dann beginnt, sich über Calculate Events abzuwickeln, wird auch der 10:15-Balken erscheinen. Ich glaube, ich habe es ausführlich dargelegt.

 
fxsaber:

Es gibt wahrscheinlich vieles, was ich noch nicht geschrieben habe.

Das Ereignis Berechnen wird bei JEDEM Tick erzeugt. Daher gibt es eine Tick-Warteschlange für die Indikatoren. Erreicht sie einen bestimmten Wert, erscheint im Protokoll eine Warnung, dass der Indikator zu langsam ist.

Die Balken selbst sind von Natur aus Indikatoren und werden durch Calculate-Ereignisse gebildet. Wenn also TF M1 10:15:00.020 ist und ein 50-ms-Paket kommt, dann hat der erste Tick darin noch die Zeit 10:14:59.970. Und alle Indikatoren werden zuerst bei diesem Calculate-Ereignis aufgerufen - zuerst der Zeitreihenindikator und dann die benutzerdefinierten Indikatoren mit diesen Zeitreihen. D.h. in diesem Layout ist der 10:15-Takt noch nicht als Null-Takt ausgebildet. Und der Null-Balken ist 10:14.


Wenn das Paket dann beginnt, sich über Calculate Events abzuwickeln, wird auch der 10:15-Balken erscheinen. Ich glaube, ich habe es ausführlich dargelegt.

Ich danke Ihnen.
 

Folglich ist es ganz normal, dass der EA einen Tick von einem Balken erhält, der sich noch nicht gebildet hat. Dies ist jedoch ein so subtiler Punkt, dass es sehr mühsam wäre, ihn absichtlich zu reproduzieren. Im Allgemeinen ist sie eher theoretisch als praktisch.


Wenn wir wegen der Geschwindigkeit paranoid sind, ist die Verwendung von Blinkern (und natürlich Balken) keine Option. Alles ist in der EA.

 

fxsaber:

Wenn das Paket dann beginnt, sich über Calculate Events abzuwickeln, wird auch der 10:15-Balken erscheinen. Ich glaube, ich habe es ausführlich dargelegt.

Interessante Informationen.
Gibt es eine Möglichkeit, festzustellen, dass ein Päckchen angekommen ist, die ersten Ticks zu ignorieren und nur den letzten Tick zur Verarbeitung zu nehmen?
 
Vasiliy Pushkaryov:
Gibt es eine Möglichkeit zu erkennen, dass ein Paket eingegangen ist, die ersten Ticks zu ignorieren und nur den letzten Tick zur Verarbeitung zu nehmen?
In OnCalculate über CopyTicks.
 
fxsaber:
In OnCalculate über CopyTicks.
Vielen Dank, ich werde es berücksichtigen.
Grund der Beschwerde: