Weiß jemand, wie man einen Multicurrency-Indikator entwickelt? - Seite 2

 

Wenn Sie ACR zum ersten Mal aufrufen, erhalten Sie die Fehlermeldung 4066. Das war's. Bei einem erneuten Aufruf erhalten Sie eine gültige Zählung, aber keine Daten in den Arrays. Der Zugriff auf die Arrays führt nicht zu einer Bereichsüberschreitung.

 
WHRoeder:

Wenn Sie ACR zum ersten Mal aufrufen, erhalten Sie die Fehlermeldung 4066. Das war's dann. Rufen Sie es erneut auf, erhalten Sie eine gültige Zählung, aber keine Daten in den Arrays. Der Zugriff auf die Arrays führt nicht zu einer Bereichsüberschreitung.

Ich muss Ihnen widersprechen, denn ich sehe nicht, was Sie gerade beschrieben haben. Das kann jedoch daran liegen, dass bei meiner Real-Live-Nutzung in der Regel alle Daten verfügbar sind, während ich in meiner Demo-/Testumgebung ".hst" und ".fxt" aus externen Daten generiert habe.

Ich werde versuchen, die Bedingungen für einen "Neustart" ohne lokale Daten wiederherzustellen, um zu sehen, ob ich das von Ihnen beschriebene Problem wiederholen kann.

 

Ich habe die "Clean Slate"-Bedingungen neu erstellt und ein kleines Skript kodiert, um dies in einer Endlosschleife ohne Sleep-Funktion zu testen. Ich habe das Skript zweimal mit einem "EURUSD"-Diagramm laufen lassen, aber den Code Daten von der "NZDCAD" anfordern lassen, die vorher nie geladen wurde.

Die Ergebnisse des ersten Durchlaufs sind wie folgt.

  • Während der ersten 73607 Iterationen (die ca. 516ms dauerten), gab "ArrayCopyRates" immer eine Anzahl von -1 zurück und generierte einen Fehler 4073 (Error 4073 - No history data). Die Arraygröße war während dieser Iterationen immer 0.

  • Bei der 73608. Iteration schließlich wurde ein Wert von 512 zurückgegeben, die Array-Größe wurde ebenfalls auf 512 gesetzt und die Zeit für das 0te Element hatte eine gültige Zeit (und nicht 0), und es wurden keine Fehler erzeugt.
Ich habe dann einen zweiten Durchlauf des Skripts durchgeführt, da die Daten bereits geladen waren, und dies waren die Ergebnisse:
  • Während der ersten und einzigen Iteration gab "ArrayCopyRates" eine Anzahl von 2048 zurück, erzeugte aber einen Fehler 4066, obwohl die Rückgabeanzahl gültig war (Fehler 4066 - Requested history data is in updating state). Die Array-Größe war ebenfalls 2048 und die Zeit für das 0. Element war gültig (und nicht 0).

  • Ich
habe eine ZIP-Datei mit dem Testskript und den daraus resultierenden Protokolldateien angehängt.

Ich überlasse es Ihnen, Ihre eigenen Schlüsse zu ziehen!

PS! Meine Schlussfolgerung ist, alle Tests zu kombinieren, bevor man fortfährt. (d.h. den Rückgabewert von "ArrayCopyRates" testen, die Fehlercodes überprüfen, die Array-Größe des MqlRates-Arrays testen und (zur Sicherheit, wie WHRoeder vorschlägt) auch die Gültigkeit des Datums der Array-Elemente testen.

EDIT: Hätte ich nur den "pair[0].time == 0"-Test verwendet, hätte er während der ersten Iterationen des ersten Durchlaufs, als noch keine Daten verfügbar waren, einen Array-Index-Fehler ausgelöst (und die Ausführung zum Stillstand gebracht). Daher bleibe ich bei meiner Aussage, dass man den Rückgabecode und die Array-Größe überprüfen muss, stimme aber zu, dass der Zeittest eine weitere Überprüfungsebene bieten kann, sobald die anderen Bedingungen erfüllt sind.

Dateien:
testacr.zip  217 kb
 
Seltsam, dass es seit Beginn dieses Threads keinen einzigen Kommentar des ursprünglichen Posters gegeben hat. Verfolgt er das Thema überhaupt?
 
FMIC:
  • Während der ersten 73607 Iterationen (die ca. 516ms dauerten), gab "ArrayCopyRates" immer einen Zählerstand von -1 zurück und generierte einen Fehler 4073 (Error 4073 - No history data). Die Arraygröße war während dieser Iterationen immer 0.
  • Bei der 73608. Iteration schließlich wurde ein Zählerstand von 512 zurückgegeben, die Array-Größe wurde ebenfalls auf 512 gesetzt und die Zeit für das 0te Element hatte eine gültige Zeit (und nicht 0) und es wurden keine Fehler erzeugt.
Dies ist genau das gegenteilige Verhalten der 600er-Version vor dem Build.
Das hatte ich ursprünglich erwartet, aber ich wurde eines Besseren belehrt.
Jetzt haben sie es endlich richtig gemacht, und ich werde dies für die Zukunft festhalten.
 
FMIC:


EDIT: Hätte ich nur den Test "pair[0].time == 0" verwendet, hätte er während der ersten Iterationen des ersten Durchlaufs, als noch keine Daten verfügbar waren, einen Array-Index-Fehler angezeigt (und die Ausführung zum Stillstand gebracht). Daher bleibe ich bei meiner Aussage, dass man den Rückgabecode und die Array-Größe überprüfen muss, stimme aber zu, dass der Zeittest eine weitere Überprüfungsebene bieten kann, sobald die anderen Bedingungen erfüllt sind.


Das ist alles sehr nützlich, danke für die Recherche und die Ergebnisse.

 
FMIC:
Seltsam, dass es seit Beginn dieses Threads keinen einzigen Kommentar des ursprünglichen Posters gegeben hat. Verfolgt er das Thema überhaupt?

Warum sollte er/sie diesem Beitrag folgen, die nachfolgenden Beiträge gehen weit über das Verständnisniveau der meisten Leute in diesem Forum hinaus.

Wie wäre es, wenn Sie versuchen würden, die Frage einfach und präzise zu beantworten?

Um nun die ursprüngliche Frage zu beantworten, nur für den Fall, dass es eine kleine Chance gibt, dass der ursprüngliche Poster noch da ist: Google ist dein Freund.

 
4x_Gypsy:

Wie wäre es, wenn Sie versuchen würden, die Frage einfach und präzise zu beantworten?

Wir haben die Frage beantwortet, die im Wesentlichen lautete: "Ich möchte ZWISCHEN 1 und 10 verschiedenen Währungen und 5 Balken für jede Währung wählen."

Da er weder einen Beispielcode noch weitere Details angegeben hat, war es nicht möglich, eine einfache und präzise Antwort zu geben. Alles, was wir tun konnten, war, allgemeine Antworten zu geben und auf die Probleme aufmerksam zu machen, die sich ihm stellen würden. Wir antworteten, dass er"ArrayCopyRates()" oder die"iFunctions()" verwenden sollte und dass er die inhärente Verzögerung und die Fehler, die er offensichtlich bekommen würde, im Auge behalten müsste. Wir haben dann die Informationen ergänzt, indem wir die Fallstricke und Probleme erörtert haben, wie z. B. das Fehlen der sleep-Funktion in Indicators und das unterschiedliche Verhalten von Pre-600 und Post-Builds.

Wenn Sie sagen, dass das alles zu hoch für ihn ist, hätte er nur etwas in der Art posten müssen wie: "Entschuldigung, ich verstehe das nicht! Können Sie es für mich vereinfachen!". Da es aber nie einen solchen Beitrag (oder einen anderen) gab, ging die Diskussion in dem Glauben weiter, dass er und andere ihr folgen konnten.

Wie Sie geschrieben haben, könnte er jetzt Google benutzen und viele Multi-Time-Frame-Indikatoren finden, aber wenn er immer noch nicht weiß, WIE sie funktionieren, wird er nicht sehr weit kommen, wenn er seinen Indikator nach seinen Wünschen gestalten will.

EDIT: PS! NB! Nachdem ich noch einmal darüber nachgedacht habe, hat WHRoeder tatsächlich einen Skelettcode als Lösung für das Problem bereitgestellt. Einfacher und präziser geht es nicht, wenn man bedenkt, wie wenig Details die ursprüngliche Frage enthielt.

 
FMIC:

Wir haben die Frage beantwortet, die im Wesentlichen lautete: "Ich möchte ZWISCHEN 1 und 10 verschiedenen Währungen und 5 Balken für jede Währung wählen."

Da er weder einen Beispielcode noch weitere Details angab, war es nicht möglich, eine einfache und präzise Antwort zu geben. Alles, was wir tun konnten, war, allgemeine Antworten zu geben und auf die Probleme aufmerksam zu machen, die sich ihm stellen würden. Wir antworteten, dass er"ArrayCopyRates()" oder die"iFunctions()" verwenden sollte und dass er die inhärente Verzögerung und die Fehler, die er offensichtlich bekommen würde, im Auge behalten müsste. Wir haben dann die Informationen ergänzt, indem wir die Fallstricke und Probleme erörtert haben, wie z.B. das Fehlen der sleep-Funktion in Indicators und das unterschiedliche Verhalten zwischen pre-600 und post builds.

Wenn Sie sagen, das sei ihm alles zu hoch, hätte er nur etwas in der Art posten müssen wie: "Tut mir leid, ich verstehe das nicht! Kannst du es für mich vereinfachen!". Da es aber nie einen solchen Beitrag gab (und auch keinen anderen), ging die Diskussion in dem Glauben weiter, dass er und andere ihr folgen könnten.

Nun, wie Sie geschrieben haben, könnte er Google benutzen und viele Multi-Time-Frame-Indikatoren da draußen finden, aber wenn er immer noch nicht weiß, WIE es funktioniert, wird er nicht sehr weit kommen, wenn er seinen Indikator so funktionieren lassen will, wie er will.

EDIT: PS! ACHTUNG! Nachdem ich noch einmal darüber nachgedacht habe, hat WHRoeder tatsächlich einen Skelettcode als Lösung für das Problem bereitgestellt. Einfacher und präziser geht es nicht, wenn man bedenkt, wie wenig Details die ursprüngliche Frage enthielt.

Die Frage lautete: "Weiß jemand, wie man einen Mehrwährungsindikator entwickelt?".

Die offensichtliche Antwort lautete: "Ja, wir (FMIC und WHRoeder) wissen es, schauen Sie sich die Diskussion an", ohne zu fragen oder auf Details zu warten, was der Fragesteller eigentlich braucht.

Was er/sie mit diesem Indikator tun wollte, war: "Ich möchte zwischen 1 und 10 verschiedenen Währungen und 5 Balken für jede Währung wählen."

Ja, es wurden Beispiele genannt. Aber sie waren eher als Wettbewerb zwischen Ihnen beiden gedacht. Interessante Debatte? Ja. Ich habe etwas gelernt, was ich noch nicht wusste. Wurde das Beispiel so dargestellt, dass es ein Neuling verstehen kann? Nicht so sehr. Die Leute kommen in dieses Forum, weil es an Unterstützung und Tutorials von MetaTrader mangelt. Die meisten Leute, die hier posten, haben ein minimales Verständnis von dem, was sie tun wollen, und wenn die Diskussion zu weit über ihr Verständnis hinausgeht, schweifen sie ab. Das ist eine absolute Schande.

Ein großer Hinweis war "Aber ich weiß nicht, wie man das macht".

Das Ausbleiben jeglicher Reaktion seitens des Auftraggebers ist ein Hinweis darauf, dass etwas nicht stimmt. Meine "Vermutung" ist, dass der Betreiber aufgrund des fehlenden Verständnisses frustriert war und den Thread aufgegeben hat. Es gab eine Zeit, vor Jahren, als ich das Gleiche tat. Ich habe auf anderen Websites/Foren mehr gelernt als in diesem Forum, weil sich niemand die Zeit nahm zu erkennen, wie neu ich war, und ständig Beispiele gepostet und Diskussionen geführt hat, die mein damaliges Verständnis völlig überstiegen.

Aber all das spielt keine Rolle mehr, da der Betreiber verschwunden ist.

Auch das ist eine Schande, wer weiß, vielleicht ist oder wird diese Person der nächste Guru, den dieses und andere Foren so dringend brauchen.

 
4x_Gypsy:

Großer Hinweis war "Aber ich weiß nicht, wie man das macht.".

Das Ausbleiben jeglicher Reaktion seitens des Auftraggebers ist ein Hinweis darauf, dass etwas nicht stimmt. Meine "Vermutung" ist, dass der Betreiber aufgrund des mangelnden Verständnisses frustriert war und den Thread aufgegeben hat. Es gab eine Zeit, vor Jahren, als ich das Gleiche tat. Ich habe auf anderen Websites/Foren mehr gelernt als in diesem Forum, weil sich niemand die Zeit nahm zu erkennen, wie neu ich war, und ständig Beispiele gepostet und Diskussionen geführt hat, die mein damaliges Verständnis völlig überstiegen.

Aus deiner Sicht magst du Recht haben, andererseits habe ich viele viele Fragen gesehen, die einfach beantwortet wurden, wenn man einen kurzen Blick in die Dokumentationen riskiert und ich fühle mich wirklich wie ein Narr, wenn ich immer wieder solche Fragen beantworte.

Außerdem gibt es hier google und eine Suchoption. Wenn ich nicht weiß, wie man etwas macht, wäre das mein nächster Schritt, das Problem selbst zu lösen.

Nun zum Thema dieses Threads: "...wie man ein Mehrwährungssystem entwickelt". Das hört sich für mich an wie "bring mir das Programmieren kostenlos bei", was ziemlich nahe an "kannst du das für mich programmieren" liegt. All dies ist nicht ganz ernst gemeint.

Da es so viel kostenlosen Code gibt, wäre meine Antwort auf diese Frage gewesen: "Benutze Google oder die Suche hier, um freien Code zu finden und ändere ihn!"

Wenn die Leute sich davon angegriffen fühlen, ist das ihr Problem.