CopySeries

Ruft die synchronisierten Zeitreihen ab aus der Struktur MqlRates für den angegebene Zeitrahmen des Symbols und der angegebenen Anzahl.Die Daten werden dem angegebenen Satz von Arrays zugewiesen. Die Elemente werden von der Gegenwart in die Vergangenheit gereiht und das heißt, dass die Startposition 0 gleich der aktuellen Bar ist.

copyseries

Wenn die zu kopierende Datenmenge nicht bekannt ist, wird empfohlen, einen dynamischen Array für die empfangenden Arrays zu verwenden, da, wenn die Datenmenge die Größe des Array übersteigt, dies den Versuch verursachen wird, das Array neu zu organisieren, um alle angeforderten Daten unterzubringen.

Wenn Sie eine vorher festgelegte Datenmenge kopieren müssen, ist es empfehlenswert, einen statisch deklarierten Array zu verwenden, um eine unnötige Neuzuweisung von Speicher zu vermeiden.

Die Eigenschaft des empfangenden Arrays — as_series=true oder as_series=false — wird ignoriert: beim Kopieren wird das älteste Zeitreihenelement an den Anfang des dem Array zugewiesenen physischen Speichers kopiert.

int  CopySeries(
   string           symbol_name,       // Symbolname
   ENUM_TIMEFRAMES  timeframe,         // Zeitrahmen
   int              start_pos,         // Startposition
   int              count,             // Anzahl zu kopieren
   ulong            rates_mask,        // Kombination der Flags, um die angeforderten Zeitreihen zu spezifizieren
   void&            array1[],          // Array zur Aufnahme der Daten der ersten Zeitreihendaten
   void&            array2[]           // Array zur Aufnahme der Daten der zweiten Zeitreihendaten
   ...
   );

Parameter

symbol_name

[in]  Symbolname

timeframe

[in]  Zeitrahmen.

start_pos

[in]  Index des ersten zu kopierenden Elements.

count

[in]  Anzahl der zu kopierenden Elemente.

rates_mask

[in]  Die Kombination der Flags aus der Enumeration ENUM_COPY_RATES.

array1, array2,...

[out]  Arrays der entsprechenden Typen für den Empfang der Zeitreihen aus der Struktur MqlRates. Die Reihenfolge der an die Funktion übergebenen Arrays muss mit der Reihenfolge der Felder in der MqlRates-Struktur übereinstimmen.

Rückgabewert

Die Anzahl der kopierten Elemente oder -1, wenn ein Fehler aufgetreten ist.

Hinweis

Wenn das gesamte Intervall der angeforderten Daten außerhalb der auf dem Server verfügbaren Daten liegt, gibt die Funktion -1 zurück. Wenn die angeforderten Daten über TERMINAL_MAXBARS (die maximale Anzahl von Balken im Chart) hinausgehen, gibt die Funktion ebenfalls -1 zurück.

Wenn Daten von einem Indikator angefordert werden, gibt die Funktion sofort -1 zurück, wenn die angeforderten Zeitreihen noch nicht aufgebaut sind oder erst vom Server heruntergeladen werden müssen. Die Funktion initiiert jedoch das Herunterladen/Konstruieren der Daten selbst.

Wenn Daten von einem Expert Advisor oder einem Skript angefordert werden, wird der Download vom Server initiiert, wenn das Terminal die entsprechenden Daten nicht lokal hat, oder die Konstruktion der notwendigen Zeitreihen beginnt, wenn die Daten aus der lokalen Historie konstruiert werden können, aber noch nicht bereit sind. Die Funktion gibt die Datenmenge zurück, die zum Zeitpunkt der Zeitüberschreitung bereitgestellt werden konnte, der Download der Historie wird jedoch fortgesetzt, und die Funktion gibt bei der nächsten ähnlichen Anfrage weitere Daten zurück.

Unterschiede zwischen CopySeries und CopyRates

Die Funktion CopySeries ermöglicht es, während eines Aufrufs nur die erforderlichen Zeitreihen in verschiedenen angegebenen Arrays zu erhalten, wobei alle Zeitreihendaten synchronisiert werden. Das bedeutet, dass alle Werte in den resultierenden Arrays bei einem bestimmten Index N zum selben Balken auf dem angegebenen Symbol/Zeitrahmen-Paar gehören werden. Daher muss der Programmierer keine Sorge tragen, um alle empfangenen Zeitreihen mit der Öffnungszeit des Balkens zu synchronisieren.

Im Gegensatz zu CopyRates, das den kompletten Satz von Zeitreihen als MqlRates-Array zurückgibt, erlaubt die CopySeries-Funktion dem Programmierer, nur die benötigten Zeitreihen in separaten Arrays zu erhalten. Dies kann durch die Angabe einer Kombination von Flags geschehen, um den Typ der Zeitreihe auszuwählen. Die Reihenfolge der an die Funktion übergebenen Arrays muss mit der Reihenfolge der Felder in der MqlRates Struktur übereinstimmen:

struct MqlRates
  {
   datetime time;         // Startzeit des Intervalls
   double   open;         // Eröffnungspreis
   double   high;         // Hoch des Balkens
   double   low;          // Tief des Balkens
   double   close;        // Schlusskurs
   long     tick_volume;  // Tick-Volumen
   int      spread;       // Spread
   long     real_volume;  // Handelsplatzvolumen
  }

Wenn Sie also die Zeitreihenwerte von time, close und real_volume für die letzten 100 Balken des aktuellen Symbol/Zeitrahmens benötigen, sollten Sie den folgenden Aufruf verwenden:

datetime time[];
double   close[];
long     volume[];
CopySeries(NULL,0,0,100,COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_VOLUME_REAL,time,close,volume);

Beachte die Reihenfolge der Arrays "time, close, volume" — sie muss mit der Reihenfolge der Felder in der Struktur MqlRates übereinstimmen. Die Reihenfolge der Werte in der rates_mask spielt keine Rolle. Die Maske könnte auch folgendermaßen aussehen:

COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE

Beispiel:

//--- Eingabeparameter
input datetime InpDateFrom=D'2022.01.01 00:00:00';
input datetime InpDateTo  =D'2023.01.01 00:00:00';
input uint     InpCount   =20;
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart(void)
  {
//--- Arrays zum Abrufen von Zeitreihen aus der MqlRates-Preisstruktur
   double   open[];
   double   close[];
   float    closef[];
   datetime time1[], time2[];
//--- Abfrage der Schlusskurse in einem Double-Array
   ResetLastError();
   int res1=CopySeries(NULLPERIOD_CURRENT0InpCount,
                       COPY_RATES_TIME|COPY_RATES_CLOSEtime1close);
   PrintFormat("1. CopySeries  liefert %d values. Fehlercode=%d"res1GetLastError());
   ArrayPrint(close);
  
//--- jetzt auch die Eröffnungspreise abrufen; Float-Array für Schlusskurse verwenden
   ResetLastError();
   int res2=CopySeries(NULLPERIOD_CURRENT0InpCount,
                       COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_OPENtime2openclosef);
   PrintFormat("2. CopySeries  liefert %d values. Fehlernummer=%d"res2GetLastError());
   ArrayPrint(closef);
//--- Vergleich der erhaltenen Daten
   if((res1==res2) && (time1[0]==time2[0]))
     {
      Print("  | Time             |    Open      | Close double | Close float |");
      for(int i=0i<10i++)
        {
         PrintFormat("%d | %s |   %.5f    |   %.5f    |   %.5f   |",
                     iTimeToString(time1[i]), open[i], close[i], closef[i]);
        }
     }
//--- Ergebnis
 1. CopySeries  liefert 20 Werte. Fehlernummer=0
 [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
 [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
 2. CopySeries  liefert 20 Werte. Fehlernummer=0
 [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
 [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
   | Time             |    Open      | Close double | Close float |
 0 | 2023.03.01 17:00 |   1.06660    |   1.06722    |   1.06722   |
 1 | 2023.03.01 18:00 |   1.06722    |   1.06733    |   1.06733   |
 2 | 2023.03.01 19:00 |   1.06734    |   1.06653    |   1.06653   |
 3 | 2023.03.01 20:00 |   1.06654    |   1.06520    |   1.06520   |
 4 | 2023.03.01 21:00 |   1.06520    |   1.06573    |   1.06573   |
 5 | 2023.03.01 22:00 |   1.06572    |   1.06649    |   1.06649   |
 6 | 2023.03.01 23:00 |   1.06649    |   1.06694    |   1.06694   |
 7 | 2023.03.02 00:00 |   1.06683    |   1.06675    |   1.06675   |
 8 | 2023.03.02 01:00 |   1.06675    |   1.06684    |   1.06684   |
 9 | 2023.03.02 02:00 |   1.06687    |   1.06604    |   1.06604   |
//---
  }

Siehe auch

Strukturen und Klassen, CopyRates