CopyRates

Gibt die historischen Zeitreihendaten der Struktur MqlRates der angegebenen Symbolperiodenlänge in der angegebenen Menge in eine Matrix oder einen Vektor zurück. Die Elemente werden von der Gegenwart in die Vergangenheit gereiht und das heißt, dass die Startposition 0 gleich der aktuellen Bar ist.

Die Daten werden so kopiert, dass das älteste Element an den Anfang der Matrix oder des Vektors gesetzt wird. Es gibt drei Funktionsmöglichkeiten.

Zugriff über die Anfangsposition und die Anzahl der gewünschten Elemente

bool  matrix::CopyRates(
   string           symbol,       // Symbolname
   ENUM_TIMEFRAMES  period,       // Zeitrahmen
   ulong            rates_mask,   // Flag-Kombination zur Bestimmung der gewünschten Zeitreihe
   ulong            start,        // Index des Anfangsbalkens ab dem kopiert wird
   ulong            count         // wie viele kopieren
   );

Zugriff mit Anfangsdatum und der Anzahl der benötigten Elemente

bool  matrix::CopyRates(
   string           symbol,       // Symbolname
   ENUM_TIMEFRAMES  period,       // Zeitrahmen
   ulong            rates_mask,   // Flag-Kombination zur Bestimmung der gewünschten Zeitreihe
   datetime         from,         // Anfangszeitpunkt
   ulong            count         // wie viele kopieren
   );

Zugriff mit Anfangs- und Endzeitpunkt des gewünschten Zeitraums

bool  matrix::CopyRates(
   string           symbol,       // Symbolname
   ENUM_TIMEFRAMES  period,       // Zeitrahmen
   ulong            rates_mask,   // Flag-Kombination zur Bestimmung der gewünschten Zeitreihe
   datetime         from,         // Anfangszeitpunkt
   datetime         to            // Endzeitpunkt
   );

Vektor-Methoden

Zugriff über die Anfangsposition und die Anzahl der gewünschten Elemente

bool  vector::CopyRates(
   string           symbol,       // Symbolname
   ENUM_TIMEFRAMES  period,       // Zeitrahmen
   ulong            rates_mask,   // Flag-Kombination zur Bestimmung der gewünschten Zeitreihe
   ulong            start,        // Index des Anfangsbalkens ab dem kopiert wird
   ulong            count         // wie viele kopieren
   );

Zugriff mit Anfangsdatum und der Anzahl der benötigten Elemente

bool  vector::CopyRates(
   string           symbol,       // Symbolname
   ENUM_TIMEFRAMES  period,       // Zeitrahmen
   ulong            rates_mask,   // Flag-Kombination zur Bestimmung der gewünschten Zeitreihe
   datetime         from,         // Anfangszeitpunkt
   ulong            count         // wie viele kopieren
   );

Zugriff mit Anfangs- und Endzeitpunkt des gewünschten Zeitraums

bool  vector::CopyRates(
   string           symbol,       // Symbolname
   ENUM_TIMEFRAMES  period,       // Zeitrahmen
   ulong            rates_mask,   // Flag-Kombination zur Bestimmung der gewünschten Zeitreihe
   datetime         from,         // Anfangszeitpunkt
   datetime         to            // Endzeitpunkt
   );

Parameter

symbol

[in]  Symbolname

period

[in]  Zeitrahmen.

rates_mask

[in] Kombination der Flags aus der Enumeration ENUM_COPY_RATES, die den Typ der angeforderten Zeitreihe angeben. Beim Kopieren in einen Vektor kann nur ein Wert aus der Enumeration ENUM_COPY_RATES angegeben werden, andernfalls tritt ein Fehler auf.<Segment 1412>

Rstart

[in]  Index des ersten zu kopierenden Elements.

count

[in]  Anzahl der zu kopierenden Elemente.

from

[in]  Zeit des Balkens des ersten Elements.

ändert auf

[in]  Zeit des Balkens des letzten Elements.

Rückgabewert

Rückgabe von true bei Erfolg, sonst false im Falle eines Fehlers.

Hinweis

Wenn das Intervall der angeforderten Daten komplett außerhalb der auf dem Server verfügbaren Daten liegt, dann liefert die Funktion false. Wenn die Daten außerhalb von TERMINAL_MAXBARS (maximale Anzahl von Balken im Chart) angefordert werden, gibt die Funktion ebenfalls falsezurück.

Wenn Daten von einem EA oder einem Skript angefordert werden, wird ein 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 Menge zurück, die bis zum Ablauf der Zeitüberschreitung zur Verfügung stehen wird, der Download der Historie wird jedoch fortgesetzt, und die Funktion gibt bei der nächsten ähnlichen Anforderung weitere Daten zurück.

Bei der Abfrage von Daten nach dem Startdatum und der Anzahl der erforderlichen Elemente werden nur Daten zurückgegeben, deren Datum kleiner (vor) oder gleich dem angegebenen Datum ist. Das Intervall wird auf eine Sekunde genau festgelegt und berücksichtigt. Mit anderen Worten: Das Eröffnungsdatum eines jeden Balkens, für den der Wert zurückgegeben wird (Volumen, Spread, Open, High, Low, Close oder Time), ist immer gleich oder kleiner als das angegebene Datum.

Wenn Daten in einem bestimmten Datumsbereich angefordert werden, werden nur Daten zurückgegeben, die in das angeforderte Intervall fallen. Das Intervall wird auf eine Sekunde genau festgelegt und berücksichtigt. Mit anderen Worten, die Eröffnungszeit eines jeden Balkens, für den der Wert zurückgegeben wird (Volumen, Spread, Indikatorpufferwert, Open, High, Low, Close oder Time), liegt immer im angeforderten Intervall.

Wenn zum Beispiel der aktuelle Wochentag Samstag ist, gibt die Funktion 0 zurück, wenn versucht wird, die Daten des wöchentlichen Zeitrahmens zu kopieren und start_time=Last_Tuesday und stop_time=Last_Friday einstellt wurde, weil die Eröffnungszeit auf dem wöchentlichen Zeitrahmen immer auf den Sonntag fällt, aber kein einziger Balken einer Woche in den angegebenen Bereich fällt.

Wenn Sie einen Wert für den aktuellen, noch unvollständigen Balken benötigen, können Sie die erste Aufrufform mit der Angabe von start_pos=0 und count=1 verwenden.

ENUM_COPY_RATES

Die Enumeration ENUM_COPY_RATES enthält die Flags zur Angabe des Datentyps, der an die Matrix oder das Array übergeben werden soll. Die Flag-Kombination ermöglicht es, mehrere Zeitreihen aus der Historie in einer Anfrage zu erhalten.  Die Reihenfolge der Zeilen in der Matrix entspricht der Reihenfolge der Werte in der Enumeration ENUM_COPY_RATES. Mit anderen Worten: Die Zeile mit den hohen Daten wird in der Matrix immer höher stehen als die Zeile mit den niedrigen Daten.

ID

Wert

Beschreibung

COPY_RATES_OPEN

1

Zeitreihe der Eröffnungspreise

COPY_RATES_HIGH

2

Zeitreihe der Hochs

COPY_RATES_LOW

4

Zeitreihe der Tiefs

COPY_RATES_CLOSE

8

Zeitreihe der Schlusskurse

COPY_RATES_TIME

16

Zeitreihe (Bar open time)

 

Die Ermittlung der Zeit eines Vektors vom Typ float und der Matrix (vectord und matrixf) führt zu Verlusten von ~100 Sekunden, da bei float die Genauigkeit stark eingeschränkt ist und ganze Zahlen größer als 1<<24 in float nicht genau dargestellt werden können.

COPY_RATES_VOLUME_TICK

32

Tick Volumina

COPY_RATES_VOLUME_REAL

64

Handelsvolumina

COPY_RATES_SPREAD

128

Spreads

Kombination

 

 

COPY_RATES_OHLC

15

Zeitreihen von Open, High, Low, Close

COPY_RATES_OHLCT

31

Zeitreihen von Open, High, Low, Close, Time

Anordnung der Daten

 

 

COPY_RATES_VERTICAL

32768

Die Reihen werden entlang der vertikalen Achse in die Matrix kopiert. Die erhaltenen Reihenwerte werden in der Matrix vertikal angeordnet, d. h. die ältesten Daten stehen in der ersten Zeile, während die jüngsten Daten in der letzten Matrixzeile stehen.

 

Beim standardmäßigen Kopieren werden die Datenreihen in eine Matrix entlang der horizontalen Achse eingefügt.

 

Dies Flag ist nur beim Kopieren in eine Matrix anwendbar.

Beispiel:

//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- Abruf der Kurse in die Matrix
  matrix matrix_rates;
  if(matrix_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_OHLCT110))
    Print("matrix rates: \n"matrix_rates);
  else
    Print("matrix_rates.CopyRates failed. Fehlernummer "GetLastError());
//--- check
  MqlRates mql_rates[];
  if(CopyRates(Symbol(), PERIOD_CURRENT110mql_rates)>0)
   {
    Print("mql_rates array:");
    ArrayPrint(mql_rates);
   }
  else
    Print("CopyRates(Symbol(), PERIOD_CURRENT,1, 10, mql_rates). Fehlernummer "GetLastError());
//--- Abruf der Kurse in den Vektor = ungültiger Aufruf
  vector vector_rates;
  if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_OHLC115))
    Print("vector_rates COPY_RATES_OHLC: \n"vector_rates);
  else
    Print("vector_rates.CopyRates COPY_RATES_OHLC failed. Fehlernummer "GetLastError());
//--- Abruf der Schlusskurse in den Vektor
  if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_CLOSE115))
    Print("vector_rates COPY_RATES_CLOSE: \n"vector_rates);
  else
    Print("vector_rates.CopyRates failed. Fehlernummer "GetLastError());
 };
/*
   matrix rates:
   [[0.99686,0.99638,0.99588,0.99441,0.99464,0.99594,0.99698,0.99758,0.99581,0.9952800000000001]
    [0.99708,0.99643,0.99591,0.9955000000000001,0.99652,0.99795,0.99865,0.99764,0.99604,0.9957]
    [0.9961100000000001,0.99491,0.99426,0.99441,0.99448,0.99494,0.9964499999999999,0.99472,0.9936,0.9922]
    [0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
    [1662436800,1662440400,1662444000,1662447600,1662451200,1662454800,1662458400,1662462000,1662465600,1662469200]]
   mql_rates array:
                    [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
   [02022.09.06 04:00:00 0.99686 0.99708 0.99611 0.99641          4463        0             0
   [12022.09.06 05:00:00 0.99638 0.99643 0.99491 0.99588          4519        0             0
   [22022.09.06 06:00:00 0.99588 0.99591 0.99426 0.99441          3060        0             0
   [32022.09.06 07:00:00 0.99441 0.99550 0.99441 0.99464          3867        0             0
   [42022.09.06 08:00:00 0.99464 0.99652 0.99448 0.99594          5280        0             0
   [52022.09.06 09:00:00 0.99594 0.99795 0.99494 0.99697          7227        0             0
   [62022.09.06 10:00:00 0.99698 0.99865 0.99645 0.99758         10130        0             0
   [72022.09.06 11:00:00 0.99758 0.99764 0.99472 0.99581          7012        0             0
   [82022.09.06 12:00:00 0.99581 0.99604 0.99360 0.99528          6166        0             0
   [92022.09.06 13:00:00 0.99528 0.99570 0.99220 0.99259          6950        0             0
   vector_rates.CopyRates COPY_RATES_OHLC failedError 4003
   vector_rates COPY_RATES_CLOSE:
   [0.9931,0.99293,0.99417,0.99504,0.9968399999999999,0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
*/

Siehe auch

Zugang zu Zeitreihen und Daten der Indikatoren, CopyRates