[SOLVED] Indikatoren werden nicht richtig instanziiert, wenn sie von einem Indikator mit einem anderen Zeitrahmen aufgerufen/erzeugt werden. - Seite 2

 
Alain Verleyen:

Sie wiederholen "fehlende Instanziierung", aber das ist nicht genau. Der Indikator wird in jedem Fall instanziiert.

Das Problem ist, dass die Daten nicht synchron verfügbar sind, Sie müssen damit umgehen. Es ist KEIN MT5-Bug, sondern ein FEATURE.

Ich schlage vor, die Diskussion zu beenden und auf die Antwort von SD zu warten.

Vielleicht habe ich mich nicht richtig ausgedrückt, dass Sie, egal wie viele Schleifen und Wartezeiten, erst nach dem ersten Durchlauf von (*edit) OnCalculate() auf die Indikatordaten (der verschiedenen TF) zugreifen können;

Ich bin durchaus bereit zu akzeptieren, dass ich falsch liegen könnte, weshalb ich ein Kopfgeld von $10 ausgesetzt habe, wenn Sie das Gegenteil beweisen können. Bitte... beweisen Sie mir das Gegenteil. Ich brauche einen Workaround für diesen dummen Bug, sorry, ich meine "Feature".

 
nicholishen:

Vielleicht habe ich nicht richtig ausgedrückt, dass Sie, egal wie viele Schleifen und Wartezeiten, nicht in der Lage sein werden, auf die Indikatordaten (der verschiedenen TF) zuzugreifen, bis nach dem ersten Durchlauf von (*edit) OnCalculate();

Ich bin durchaus bereit zu akzeptieren, dass ich falsch liegen könnte, weshalb ich ein Kopfgeld von $10 ausgesetzt habe, wenn Sie das Gegenteil beweisen können. Bitte... beweisen Sie mir das Gegenteil. Ich brauche einen Workaround für diesen dummen Bug, sorry, ich meine "Feature".

Warum brauchen Sie es beim ersten "Durchlauf"? Wenn die benötigten Daten nicht verfügbar sind, warten Sie, bis sie verfügbar sind, das ist alles.
 
Alain Verleyen:
Warum brauchen Sie ihn beim ersten "Durchlauf"? Wenn die benötigten Daten nicht verfügbar sind, warten Sie, bis sie verfügbar sind, das ist alles.

Weil ich einen Indikator entwickle, der den Zugriff auf Daten desselben Indikators (desselben Symbols) auf einem anderen Zeitrahmen erfordert. Da er erst nach dem zweiten Tick verarbeitet wird, bedeutet dies, dass der Indikator nicht offline funktioniert, sondern erst, wenn der zweite Tick eintrifft.

Warum sollten wir wegen dieses Fehlers Kompromisse eingehen müssen? Warum verteidigen Sie ihn so vehement?

 
nicholishen:

Weil ich einen Indikator entwickle, der den Zugriff auf Daten desselben Indikators (desselben Symbols) auf einem anderen Zeitrahmen erfordert. Da er erst nach dem zweiten Tick verarbeitet wird, bedeutet dies, dass der Indikator nicht offline funktioniert, sondern erst, wenn der zweite Tick eintrifft.

Warum sollten wir wegen dieses Fehlers Kompromisse eingehen müssen? Warum verteidigen Sie ihn so vehement?

???

Ich verteidige nichts, und schon gar nicht "wütend". Bitte bleiben Sie cool.

 
Alain Verleyen:

???

Ich verteidige nichts, und schon gar nicht "wütend". Bitte bleiben Sie cool.

Forum über Handel, automatisierte Handelssysteme und das Testen von Handelsstrategien

[MQL5 BUG] Indikatoren werden nicht richtig instanziiert, wenn sie von einem Indikator mit einem anderen Zeitrahmen aufgerufen/erzeugt werden.

Alain Verleyen, 2017.01.31 12:46

Ok du glaubst mir nicht, das ist dein Recht, aber du liegst falsch

Ich kann Ihnen nur empfehlen, sich an den ServiceDesk zu wenden und die Antwort hier zu veröffentlichen.


OK.

Ich habe diese Aufgabe gepostet, falls jemand daran interessiert ist, es zu versuchen.

https://www.mql5.com/en/job/57516

 
nicholishen:

Das bedeutet, dass die Daten, wenn sie einem Skript oder EA sofort zur Verfügung stehen, auch für den Indikator verfügbar sind (es handelt sich also nicht um ein Problem der Datenverfügbarkeit). Der Indikator wird einfach nicht vor dem zweiten Durchlauf von OnCalculate() (auch bekannt als der erste Tick) instanziiert.

Sie verstehen das Wort "Verfügbarkeit" zu wörtlich. Während einige Daten im Speicher des Terminals vorhanden sein können, kann das Terminal selbst eine Synchronisierungslogik enthalten, die Aktualisierungen für beliebige Zeitrahmen blockiert, während die zugrunde liegenden Daten für einen (wahrscheinlich anderen) Zeitrahmen geprüft werden. Oder sie können Datenanfragen von einem Indikator blockieren, bis dieser seine eigene Erstellung abgeschlossen hat (bitte denken Sie daran, dass Indikatoren durch so genannte Handles verwaltet werden, während Experten und Skripte dies nicht tun), und das erscheint mir logisch. Dies sind nur Vermutungen, die ich aus der Sicht der MQ-Entwickler angestellt habe. Sie können sie direkt über den Service Desk fragen.

Ihre Aufgabe ist aufgrund des Punktes 3 nicht zu bewältigen:

3. Muss bei der Initialisierung auf den Puffer zugreifen

Dies widerspricht der Terminalarchitektur und der Dokumentation:

Sie können nicht direkt nach der Erstellung auf die Indikatordaten zugreifen, da die Berechnung der Indikatorwerte einige Zeit in Anspruch nimmt.

Bitte lesen Sie auch die Funktion CopyBuffer:

Hinweis

Bei der Abfrage von Daten aus dem Indikator, wenn die angeforderten Zeitreihen noch nicht erstellt sind oder vom Server heruntergeladen werden müssen, gibt die Funktion sofort -1 zurück, aber der Prozess des Herunterladens/Erstellens wird eingeleitet.

Wenn Daten von einem Expert Advisor oder Skript angefordert werden, wird dasHerunterladen vom Server eingeleitet, wenn das Terminal diese Daten nicht lokal hat, oder der Aufbau einer erforderlichen Zeitreihe wird gestartet, wenn Daten aus der lokalen Historie aufgebaut werden können, aber noch nicht bereit sind. Die Funktion gibt die Menge der Daten zurück, die zum Zeitpunkt des Ablaufs der Zeitüberschreitung zur Verfügung stehen werden.

Experten und Skripte werden also bis zu einer vordefinierten Zeitüberschreitung synchron verarbeitet, Indikatoren jedoch asynchron.

Documentation on MQL5: Technical Indicators
Documentation on MQL5: Technical Indicators
  • www.mql5.com
Technical Indicators - Reference on algorithmic/automated trading language for MetaTrader 5
 
Was Ihre spezielle Aufgabe betrifft, so kann sie leicht auf andere Weise gelöst werden. Sie sind nicht der erste, der einen Indikator auf Indikator baut und möchte, dass er offline funktioniert. Verwenden Sie einen Timer.
 
Stanislav Korotky:
Was Ihre spezielle Aufgabe betrifft, so kann sie leicht auf andere Weise gelöst werden. Sie sind nicht der erste, der einen Indikator auf Indikator baut und möchte, dass er offline funktioniert. Verwenden Sie einen Timer.
Ausprobiert. Hat nicht geklappt.
 
nicholishen:
Ich habe es versucht. Hat nicht geklappt.
Stellen Sie eine spezifischere Frage mit einem Beispielcode. Es könnte fehlerhaft sein. Der Ansatz funktioniert für mich.
 
Stanislav Korotky:
Stellen Sie eine spezifischere Frage mit einem Beispielcode. Er könnte fehlerhaft sein. Der Ansatz funktioniert bei mir.
Ich verstehe nicht, wie ich noch spezifischer sein kann, als ich es bereits getan habe...

Keine Menge von Zeitgebern oder Schleifen kann die Tatsache überwinden, dass der Indikator nicht instanziiert wird, bis Oncalculate mindestens einmal zurückkehrt. Auch die Rekursion funktioniert nicht.