CopyRates - bin ich meschugge?

 

Zu CopyRates steht das in der Referenz:

Abzählen der Elemente von der Startposition wird von der Gegenwart zur Vergangenheit durchgeführt, d. h. Startposition, 0, bedeutet die laufende Bar.

Englisch: The elements ordering of the copied data is from present to the past, i.e., starting position of 0 means the current bar.

Lt. Deepl steht das auch im Russischen so da.

      if ( CopyRates(_Symbol,PERIOD_D1,TimeCurrent(),5,D1) <3) return;

Aber tatsächlich ist 0 die älteste Bar (1.2.22) im kopierten Array und die mit dem höchsten Index die aktuellste:


Könnte sein,  dass das noch aus den MQL4-Zeiten stammt

Dokumentation zu MQL5: Zugang zu Zeitreihen und Indikatoren / CopyRates
Dokumentation zu MQL5: Zugang zu Zeitreihen und Indikatoren / CopyRates
  • www.mql5.com
CopyRates - Zugang zu Zeitreihen und Indikatoren - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 

(automatische Übersetzung aus dem Englischen)

Es scheint, dass Sie Recht haben.

Die Dokumentation gilt, wenn Sie das Array wie im Beispielcode gezeigt als „Serie“ festlegen.

Wenn Sie jedoch ein „Nono-Series“-Array verwenden, beginnen die neuesten Daten wie angegeben an Position 0.

Ich habe das Forum durchsucht, aber keine anderen Beiträge von Benutzern gefunden, die sich mit diesem Thema befassen. Das ist verwirrend.

 

Ich habe im englischen Forum einen Thread gefunden, der verwandt zu sein scheint ... https://www.mql5.com/en/forum/35494

CopyRates problem
CopyRates problem
  • 2014.08.18
  • www.mql5.com
When i do a copy rates with start index=0, count=2, then rates[1] seems to be the latest bar as i tested by a small script...
 
Fernando Carreiro #:

(automatische Übersetzung aus dem Englischen)

Es scheint, dass Sie Recht haben.

Die Dokumentation gilt, wenn Sie das Array wie im Beispielcode gezeigt als „Serie“ festlegen.

Wenn Sie jedoch ein „Nono-Series“-Array verwenden, beginnen die neuesten Daten wie angegeben an Position 0.

Ich habe das Forum durchsucht, aber keine anderen Beiträge von Benutzern gefunden, die sich mit diesem Thema befassen. Das ist verwirrend.

Ich verwende kein ArraySetAsSeries, um die Zugriffsrichtung umzudrehen.
 

War das nicht schon immer so? Egal welche Zählrichtung der Buffer hat, Copybuffer und Ähnliche behandeln die Felder so, als wäre series==true...  sprich 0 ist in Copyxxx immer die aktuelle. Ist der Buffer jedoch series==false, bleibt die Aufrufrichtung umgekehrt.

"Es ist egal, welche Eigenschaft das Empfangsfeld hat  - as_series=true oder as_series=false, Daten werden so kopiert, dass das aelteste Element am Anfang des physischen Speichers sein wird, der für das Feld verteilt wurde. Es gibt 3 Varianten der Funktion."


 

Das war in MQL4 so: 0 war die aktuelle Bar, 1 die vorherige ...

In MQL5 hat sich das umgekehrt, weswegen ich immer wieder verwirrt bin und die Zeiten überprüfe...

Im Aufruf von oben:

  if ( CopyRates(_Symbol,PERIOD_D1,TimeCurrent(),5,D1) <3) return;

wird nix verändert! Und es zeigt sich 0 ist jetzt den ältesten Wert enthält und nicht den der ältesten Bar!! Vielleicht wird er als erste kopiert wird, aber was wie in welcher Reihenfolge vom System kopiert wird, interessiert mich doch überhaupt nicht!!

 
Carl Schreiber #:

Das war in MQL4 so: 0 war die aktuelle Bar, 1 die vorherige ...

In MQL5 hat sich das umgekehrt, weswegen ich immer wieder verwirrt bin und die Zeiten überprüfe...

Im Aufruf von oben:

wird nix verändert! Und es zeigt sich 0 ist jetzt den ältesten Wert enthält und nicht den der ältesten Bar!! Vielleicht wird er als erste kopiert wird, aber was wie in welcher Reihenfolge vom System kopiert wird, interessiert mich doch überhaupt nicht!!

Hast Recht, es wird auch nichts verändert. Nur die Zählrichtung von Copyxxx ist immer series=true. Darum brauchst ja bei Indikatoren oft limit UND to_copy...
 
Carl Schreiber # :

Das war in MQL4 so: 0 war die aktuelle Bar, 1 die vorherige ...

In MQL5 hat sich das umgekehrt, weswegen ich immer wieder verwirrt bin und die Zeiten überprüfe...

Im Aufruf von oben:

wird nix verändert! Und es zeigt sich 0 ist jetzt den ältesten Wert enthält und nicht den der ältesten Bar!! Vielleicht wird er als erste kopiert wird, aber was wie in welcher Reihenfolge vom System kopiert wird, interessiert mich doch überhaupt nicht!!

Wirklich ? Wenn es in die eine oder andere Richtung kopiert, interessiert Sie das nicht? Wenn es in die andere Richtung kopieren würde, hätten Sie andere Daten.
 
Alain Verleyen #:
Wirklich ? Wenn es in die eine oder andere Richtung kopiert, interessiert Sie das nicht? Wenn es in die andere Richtung kopieren würde, hätten Sie andere Daten.
Wenn die Beschreibung von MQ beschreibt, wie CopyRates die Daten aus den Basis-Daten kopiert, ist das doch nicht das, was für den Nutzer entscheidend ist. Vor allem ist blöd, wenn dann da steht, dass der aktuellste Wert bei Indexwert 0 ist.
 
Carl Schreiber # :
Wenn die Beschreibung von MQ beschreibt, wie CopyRates die Daten aus den Basis-Daten kopiert, ist das doch nicht das, was für den Nutzer entscheidend ist. Vor allem ist blöd, wenn dann da steht, dass der aktuellste Wert bei Indexwert 0 ist.

Sie vermischen die Quelle und das Ziel. In der Dokumentation geht es um die Datenquelle, die immer von der Gegenwart in die Vergangenheit kopiert wird, und um die Verwendung des Index „als Serie“. Natürlich ist es für den Benutzer wichtig.

Das Ziel (Ihr Array), es liegt an Ihnen, über die Indizierung zu entscheiden. Standardmäßig wird ein Array nicht als Serie indiziert, sodass Index 0 die ältesten Daten sind.

 

Ja aber du musst unterscheiden vom kopierbeginn und dann der zählweise, das steht eh wirklich so in der doku, wenn du das richtig haben willst musst du arraysetasseries dazunehmen


wobei doku,

copyrates gabs ja in mql4 noch nicht und da steht trotzdem OnStart, wird sich vermutlich um ein script handeln in der doku 😂😂