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

 
nicholishen:

...

Ich möchte mich vor allem bei Ihnen für all Ihre Hilfe bedanken... wenn Sie nicht so herablassend wären, wüsste ich nicht, woher ich die Motivation zum Weitermachen genommen hätte! /s

Ich habe hier Dutzende von Leuten wie Sie gesehen. Sie wissen alles besser als andere, sie hören nicht zu, sie schieben ihre eigenen Fehler auf andere (einen anderen Benutzer, einen Moderator, einen Broker, eine Plattform, Metaquotes, das Betriebssystem, oder was auch immer...).

Es scheint, dass Sie hier nichts lernen. Dies ist KEIN Fehler, sondern die Art und Weise, wie die Entwickler ihre Plattform konzipiert haben. Ich verstehe, warum Sie sagen, es sei ein Fehler, ich habe MT5 und seine Funktionsweise vor Jahren entdeckt. Wenn Sie dies im Kopf hatten und es akzeptieren, werden Sie viel früher sehen, was das Problem war: Ihr Ansatz und Ihr Verständnis.

Aber nicht, immer noch sind Sie weiterhin zu sagen, es ist ein "Bug" oder ein "großer Fehler", das ist einfach lächerlich. Die MT5-Architektur, die asynchrones Funktionsverhalten verwendet, macht diese Plattform viel schneller als MT4, natürlich ist es nicht immer einfach, damit umzugehen. Der Hauptfehler von Metaquotes ist hier die unvollständige, unverständliche oder fehlende Dokumentation.

Wenn man etwas nicht versteht, sollte man auf andere hören (Stanislav und mich zum Beispiel) und schon gar nicht Leute beleidigen, die versuchen, einem zu helfen.

 
Alain Verleyen:

Ich habe Dutzende von Menschen wie Sie hier gesehen. Sie wissen alles besser als andere, sie hören nicht zu, sie schieben ihre eigenen Fehler auf andere (einen anderen Benutzer, einen Moderator, einen Broker, eine Plattform, Metaquotes, das Betriebssystem, oder was auch immer...).

Es scheint, dass Sie hier nichts lernen. Dies ist KEIN Fehler, sondern die Art und Weise, wie die Entwickler ihre Plattform konzipiert haben. Ich verstehe, warum Sie sagen, es sei ein Fehler, ich habe MT5 und seine Funktionsweise vor Jahren entdeckt. Wenn Sie dies im Kopf hatten und es akzeptieren, werden Sie viel früher sehen, was das Problem war: Ihr Ansatz und Ihr Verständnis.

Aber nicht, immer noch sind Sie weiterhin zu sagen, es ist ein "Bug" oder ein "großer Fehler", das ist einfach lächerlich. Die MT5-Architektur, die asynchrones Funktionsverhalten verwendet, macht diese Plattform viel schneller als MT4, natürlich ist es nicht immer einfach, damit umzugehen. Der Hauptfehler von Metaquotes ist hier die unvollständige, unverständliche oder fehlende Dokumentation.

Wenn man etwas nicht versteht, sollte man auf andere hören (Stanislav und mich zum Beispiel) und schon gar nicht Leute beleidigen, die versuchen, einem zu helfen.

Alle Indikatoren auf einem einzigen Thread laufen zu lassen, ohne eine Methode, die nächste Iteration rekursiv aufzurufen, außer dem Setzen eines Timers, ist ein Fehler. Sie wollen über Geschwindigkeit reden? Anstatt die Verarbeitung zurück in die Warteschlange zu stellen, habe ich gerade eine zusätzliche Millisekunde für einen Workaround ausgegeben. Wahrscheinlich ist das nicht das Ende der Welt, aber trotzdem ist eine Umgehung erforderlich. Ich bin denjenigen sehr dankbar, die mir geholfen haben, die Umgehung zu verstehen und zu begründen, warum sie angesichts der Beschränkungen der Plattform notwendig war. Ich versuche jedoch immer noch zu verstehen, was Sie außer Herablassung zu dieser Diskussion beigetragen haben.
 
nicholishen:
Alle Indikatoren auf einem einzigen Thread laufen zu lassen, ohne eine andere Methode als das Setzen eines Timers, um die nächste Iteration rekursiv aufzurufen, ist ein Fehler. Sie wollen über Geschwindigkeit sprechen? Anstatt die Verarbeitung zurück in die Warteschlange zu stellen, habe ich gerade eine zusätzliche Millisekunde für einen Workaround ausgegeben. Wahrscheinlich ist das nicht das Ende der Welt, aber trotzdem ist eine Umgehung erforderlich. Ich bin denjenigen sehr dankbar, die mir geholfen haben, die Umgehung zu verstehen und zu verstehen, warum sie angesichts der Beschränkungen der Plattform notwendig war. Ich versuche jedoch immer noch zu verstehen, was Sie außer Herablassung zu dieser Diskussion beigetragen haben.

Ich finde Sie sehr agressiv. Von Anfang an habe ich nur versucht, Ihnen zu erklären, was passiert, aus meiner jahrelangen Erfahrung mit MT5. Ich bin nicht herablassend, ich bin erfahren und experimentiert, und ich verdiene Respekt (wie jeder). Das ist nur aus Beitrag #14 Ich sehe, dass Sie es ohne einen neuen Tick arbeiten wollen, aber im selben Beitrag fühlte ich mich von Ihrem Wort "wütend" angegriffen, so dass ich aufgegeben habe.

Wie auch immer, das Thema ist geschlossen, danke, dass Sie mich dazu gebracht haben, etwas Neues zu lernen.

 

Ich habe mir lange den Kopf darüber zerbrochen.

Für alle anderen, die auf dieses Problem stoßen, scheint es eine einfache Lösung zu geben.

Fügen Sie eine Variable auf Modulebene (RunOnce) hinzu, um festzustellen, wann wir OnCalculate zum ersten Mal ausführen. Bei diesem ersten Durchlauf geben Sie Null zurück und setzen die Variable auf true, um weitere Unterbrechungen zu verhindern.


bool RunOnce = false;

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]) {
               
   if (rates_total == prev_calculated) return (rates_total);
   if (!RunOnce) {
      RunOnce = true;
      return (0);
   }
  
REST OF YOUR CODE HERE.


Das hat bei mir sehr gut funktioniert, ich hoffe, es hilft auch Ihnen.

[SOLVED]Indicators are not properly instantiated when called/created from an Indicator of different working time-frame.
[SOLVED]Indicators are not properly instantiated when called/created from an Indicator of different working time-frame.
  • 2017.01.30
  • www.mql5.com
UPDATE: See the workaround below CopyBuffer() throws an error of 4806 (Indicator data not accessible) when calling an indicator with a different Ti...
 
Danke für die Lösung