CopyRates

Récupère la série historique de la structure MqlRates pour le symbole et la période spécifiés, avec le nombre spécifié d'éléments dans une matrice ou un vecteur. Les éléments sont décomptés du présent au passé, ce qui signifie que la position de départ égale à 0 signifie la barre actuelle.

Les données sont copiées de manière à ce que l'élément le plus ancien soit placé au début de la matrice/du vecteur. La fonction existe sous 3 formes.

Accès par la position initiale et le nombre d'éléments requis

bool  matrix::CopyRates(
   string           symbol,       // nom du symbole
   ENUM_TIMEFRAMES  period,       // période
   ulong            rates_mask,   // combinaison de flags pour spécifier les séries demandées
   ulong            start,        // indice de la barre initiale d'où la copie commence
   ulong            count         // nombre d'éléments à copier
   );

Accès par la date de début et le nombre d'éléments requis

bool  matrix::CopyRates(
   string           symbol,       // nom du symbole
   ENUM_TIMEFRAMES  period,       // période
   ulong            rates_mask,   // combinaison de flags pour spécifier les séries demandées
   datetime         from,         / date de début 
   ulong            count         // nombre d'éléments à copier
   );

Accès par les dates de début et de fin de l'intervalle de temps désiré

bool  matrix::CopyRates(
   string           symbol,       // nom du symbole
   ENUM_TIMEFRAMES  period,       // période
   ulong            rates_mask,   // combinaison de flags pour spécifier les séries demandées
   datetime         from,         / date de début 
   datetime         to            // date de fin
   );

Méthodes vectorielles

Accès par la position initiale et le nombre d'éléments requis

bool  vector::CopyRates(
   string           symbol,       // nom du symbole
   ENUM_TIMEFRAMES  period,       // période
   ulong            rates_mask,   // combinaison de flags pour spécifier les séries demandées
   ulong            start,        // indice de la barre initiale d'où la copie commence
   ulong            count         // nombre d'éléments à copier
   );

Accès par la date de début et le nombre d'éléments requis

bool  vector::CopyRates(
   string           symbol,       // nom du symbole
   ENUM_TIMEFRAMES  period,       // période
   ulong            rates_mask,   // combinaison de flags pour spécifier les séries demandées
   datetime         from,         / date de début 
   ulong            count         // nombre d'éléments à copier
   );

Accès par les dates de début et de fin de l'intervalle de temps désiré

bool  vector::CopyRates(
   string           symbol,       // nom du symbole
   ENUM_TIMEFRAMES  period,       // période
   ulong            rates_mask,   // combinaison de flags pour spécifier les séries demandées
   datetime         from,         / date de début 
   datetime         to            // date de fin
   );

Paramètres

symbol

[in]  Symbole.

period

[in]  Période.

rates_mask

[in]  La combinaison d'indicateurs d'énumération ENUM_COPY_RATES spécifiant le type de série demandée. Lors de la copie vers un vecteur, une seule valeur de l'énumération ENUM_COPY_RATES peut être spécifiée, sinon une erreur se produit.

start

[in]  Indice du premier élément à copier.

count

[in]  Nombre d'éléments à copier.

from

[in]  Barre du temps correspondant au premier élément.

to

[in]  Barre du temps correspondant au dernier élément.

Valeur de Retour

Renvoie true en cas de succès, sinon false en cas d'erreur.

Note

Si l'intervalle des données demandées est complètement en dehors des données disponibles sur le serveur, alors la fonction renvoie false. Si les données en dehors de TERMINAL_MAXBARS (nombre maximum de barres sur le graphique) sont demandées, la fonction renvoie également false.

Lors de la demande de données à partir d'un EA ou d'un script, le téléchargement depuis le serveur est lancé si le terminal ne dispose pas des données appropriées localement, ou la construction des séries temporelles nécessaires commence si les données peuvent être construites à partir de l'historique local mais qu'elles ne sont pas encore prêtes. La fonction renvoie la quantité qui sera prête à l'expiration du délai d'attente. Mais le téléchargement de l'historique se poursuit et la fonction renverra plus de données au prochain appel.

Lors de la demande de données par la date de début et par le nombre d'éléments requis, seules les données dont la date est inférieure (avant) ou égale à celle spécifiée sont renvoyées. L'intervalle est défini et considéré jusqu'à une seconde. En d'autres termes, la date d'ouverture de toute barre pour laquelle la valeur est renvoyée (volume, écart, ouverture, haut, bas, clôture ou heure) est toujours égale ou inférieure à celle spécifiée.

Lors de la demande de données dans une plage de dates donnée, seules les données comprises dans l'intervalle demandé sont renvoyées. L'intervalle est défini et considéré jusqu'à une seconde. En d'autres termes, l'heure d'ouverture de toute barre pour laquelle la valeur est renvoyée (volume, spread, valeur du buffer de l'indicateur, ouverture, haut, bas, clôture ou temps) est toujours située dans l'intervalle demandé.

Par exemple, si le jour actuel de la semaine est le samedi, la fonction renvoie 0 lorsqu'elle tente de copier des données sur la période hebdomadaire en définissant start_time=Last_Tuesday et stop_time=Last_Friday car l'heure d'ouverture sur la période hebdomadaire tombe toujours le dimanche, mais pas une seule barre hebdomadaire ne se situe dans la plage spécifiée.

Si vous avez besoin d'obtenir la valeur correspondant à la barre incomplète actuelle, vous pouvez utiliser le premier formulaire d'appel indiquant start_pos=0 et count=1.

ENUM_COPY_RATES

L'énumération ENUM_COPY_RATES contient les indicateurs permettant de spécifier le type de données à transmettre à la matrice ou au tableau. Le paramètre de combinaison de flags permet d'obtenir plusieurs séries de l'historique en une seule requête. L'ordre des lignes dans la matrice correspondra à l'ordre des valeurs dans l'énumération ENUM_COPY_RATES. En d'autres termes, la ligne avec des données Plus Haut sera toujours plus élevée dans la matrice que la ligne avec les données Plus Bas.

ID

Valeur

Description

COPY_RATES_OPEN

1

Série des prix d'ouverture

COPY_RATES_HIGH

2

Série des prix Plus Haut

COPY_RATES_LOW

4

Série des prix Plus Bas

COPY_RATES_CLOSE

8

Série des prix de clôture

COPY_RATES_TIME

16

Séries des dates et heures (heure d'ouverture des barres)

 

Récupérer les dates et heures dans un vecteur ou une matrice d'éléments de type float (vectord et matrixf) entraîne des pertes d'environ 100 secondes puisque la précision du type float est limitée et les nombres entiers supérieurs à 1<<24 ne peuvent pas être représentés avec précision en float.

COPY_RATES_VOLUME_TICK

32

Volumes des Ticks

COPY_RATES_VOLUME_REAL

64

Volumes des Trades

COPY_RATES_SPREAD

128

Spreads

Combinaison

 

 

COPY_RATES_OHLC

15

Séries OHLC (Ouverture, Plus Haut, Plus Bas et Clôture)

COPY_RATES_OHLCT

31

Séries OHLC (Ouverture, Plus Haut, Plus Bas et Clôture) + Temps

Organisation des données

 

 

COPY_RATES_VERTICAL

32768

Les séries sont copiées dans la matrice le long de l'axe vertical. Les valeurs des séries reçues seront disposées verticalement dans la matrice, c'est-à-dire que les données les plus anciennes seront dans la première ligne, et les données les plus récentes seront dans la dernière ligne de la matrice.

 

Avec la copie par défaut, les séries sont ajoutées dans une matrice le long de l'axe horizontal.

 

L'indicateur n'est applicable que lors de la copie vers une matrice.

Exemple :

//+------------------------------------------------------------------+
//| Fonction de démarrage du programme                               |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- obtient les cotations dans la matrice
  matrix matrix_rates;
  if(matrix_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_OHLCT110))
    Print("matrix rates: \n"matrix_rates);
  else
    Print("Echec de matrix_rates.CopyRates. Erreur "GetLastError());
//--- vérification
  MqlRates mql_rates[];
  if(CopyRates(Symbol(), PERIOD_CURRENT110mql_rates)>0)
   {
    Print("Tableau mql_rates :");
    ArrayPrint(mql_rates);
   }
  else
    Print("CopyRates(Symbol(), PERIOD_CURRENT,1, 10, mql_rates). Erreur "GetLastError());
//--- obtient les cotations dans le vecteur = appel invalide
  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. Erreur "GetLastError());
//--- obtient les prix de clôture dans le vecteur
  if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_CLOSE115))
    Print("vector_rates COPY_RATES_CLOSE: \n"vector_rates);
  else
    Print("Echec de vector_rates.CopyRates. Erreur "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 failedErreur 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]
*/

Voir aussi

Accéder aux Timeseries et aux Indicateurs, CopyRates