- Direction d'Indexation dans les Tableaux, Buffers et Séries de Données
- Organisation de l'Accès aux Données
- SeriesInfoInteger
- Bars
- BarsCalculated
- IndicatorCreate
- IndicatorParameters
- IndicatorRelease
- CopyBuffer
- CopyRates
- CopySeries
- CopyTime
- CopyOpen
- CopyHigh
- CopyLow
- CopyClose
- CopyTickVolume
- CopyRealVolume
- CopySpread
- CopyTicks
- CopyTicksRange
- iBars
- iBarShift
- iClose
- iHigh
- iHighest
- iLow
- iLowest
- iOpen
- iTime
- iTickVolume
- iRealVolume
- iVolume
- iSpread
CopyBuffer
Retourne la quantité nécessaire de données du buffer spécifié d'un certain indicateur.
Le compte des éléments de données copiées (buffer de l'indicateur avec l'indice buffer_num) à partir du point de départ est effectué du présent vers le passé, c'est à dire que la position de départ de 0 signifie la barre courante (valeur de l'indicateur pour la barre courante).
Lors de la copie d'une quantité inconnue de données, il est recommandé d'utiliser un tableau dynamique buffer[] comme buffer destination, car la fonction CopyBuffer() essaye d'allouer la taille du tableau destination à la taille des données copiées. Si le buffer d'un indicateur (tableau pré-alloué pour stocker les valeurs de l'indicateur par la fonction SetIndexBufer()) est utilisé comme le tableau destination buffer[], la copie partielle est autorisée. Un exemple est disponible dans l'indicateur personnalisé Awesome_Oscillator.mql5 dans le package standard du terminal.
Si vous devez effectuer une copie partielle des valeurs de l'indicateur dans un autre tableau (autre que le buffer d'un indicateur), vous devriez utiliser un tableau intermédiaire dans lequel le nombre désiré est copié. Après cela, copiez le nombre désiré d'éléments depuis ce tableau intermédiaire dans le tableau destination.
Si vous connaissez la quantité de données à copier, il est préférable d'utiliser un buffer alloué de façon statique, afin d'éviter une allocation mémoire excessive.
Ceci quelque soit la propriété du tableau destination - as_series=true ou as_series=false. Les données seront copiées afin que le plus vieil élément soit situé au départ de la mémoire physique allouée pour le tableau. Il existe 3 variantes d'appel à la fonction.
Appel avec la première position et le nombre d'éléments désirés
int CopyBuffer(
|
Appel avec la date de début et le nombre d'éléments désirés
int CopyBuffer(
|
Appel avec les dates de début et de fin d'un intervalle de temps désiré
int CopyBuffer(
|
Parameters
indicator_handle
[in] Le handle sur l'indicateur, retourné par la fonction correspondante de l'indicateur.
buffer_num
[in] Le numéro du buffer de l'indicateur.
start_pos
[in] La position du premier élément à copier.
count
[in] Quantité de données à copier.
start_time
[in] Heure de la barre correspondant au premier élément.
stop_time
[in] Heure de la barre correspondant au dernier élément.
buffer[]
[out] Tableau d'éléments de type double.
Valeur de Retour
Retourne le nombre de données copiées ou -1 en cas d'erreur.
Note
Lors de la demande de données par un indicateur, si les timeseries demandées ne sont pas encore construites ou si elles doivent être téléchargées du serveur, la fonction retournera immédiatement -1, et le téléchargement ou la construction sera initiée.
Lors de la demande de données par un Expert Advisor ou un script, le téléchargement depuis le serveur sera lancé si le terminal n'a pas encore ces données localement, ou la construction des timeseries demandées sera lancée si les données peuvent être construites à partir de l'historique local mais qu'elles ne sont pas encore prêtes. La fonction retournera la quantité de données qui seront prêtes au moment de l'expiration du délai.
Exemple :
//+------------------------------------------------------------------+
|
L'exemple ci-dessus illustre comment le buffer d'un indicateur est rempli avec les valeurs du buffer d'un autre indicateur depuis l'indicateur sur le même symbole/la même période.
Un exemple détaillé de la demande de données historiques est visible dans la section Méthodes de Liaison d'Objet. Le script disponible dans cette section montre comment obtenir les valeurs de l'indicateur iFractals sur les 1000 dernières barres et comment afficher les 10 fractales haussières et baissières sur le graphique. Une technique identique peut être utilisée pour tous les indicateurs qui ont des données manquantes et qui sont habituellement dessinés avec les styles suivants :
Voir aussi