- Dirección de indexación en los arrays y series temporales
- Organización de acceso a los datos
- 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
Recibe en el array búfer los datos del búfer especificado del indicador indicado en cantidad especificada.
La cuenta de elementos a copiar (búfer de indicadores con el índice buffer_num) desde la posición de inicio se realiza del presente al pasado, es decir, la posición de inicio igual a 0 significa la barra corriente (valor del indicador para la barra corriente).
Cuando copiamos los datos sin conocer todavía el volumen a copiar, se recomienda usar un array dinámico como array de destino buffer[], puesto que la función CopyBuffer() trata de ajustar el tamaño del array-receptor en función del espacio que ocupan los datos que se copian. Si un búfer de indicador (array preasignado por la función SetIndexBufer() para almacenar los valores del indicador) se usa como el array-receptor buffer[], entonces se admite el copiado parcial. Podemos ver su ejemplo en el indicador personalizado Awesome_Oscillator.mq5 que entra en el pack estándar del terminal.
Si tenemos que copiar parcialmente los valores del indicador a otro array (que no sea un búfer de indicador), para eso hay que usar un array intermedio donde se copia la cantidad necesaria, y luego de este array-intermediario copiar la cantidad necesaria elemento por elemento a lugares correspondientes del array de destino.
Si sabemos la cantidad de datos que tenemos que copiar, con el fin de evitar la asignación excesiva de memoria es mejor hacerlo a un buffer asignado estáticamente.
La propiedad del array de destino no importa, sea as_series=true o sea as_series=false. Los datos van a ser copiados de tal manera que el elemento más antiguo estará al principio de la memoria física que ha sido destinada para el array. Existen 3 variantes de la función.
Llamada según la posición de inicio y el número de elementos requeridos
int CopyBuffer(
|
Llamada según la fecha de inicio y el número de elementos requeridos
int CopyBuffer(
|
Llamada según la fecha de inicio y finalización del intervalo de tiempo requerido
int CopyBuffer(
|
Parámetros
indicator_handle
[in] Manejador del indicador recibido por la función de indicador correspondiente.
buffer_num
[in] Número del búfer de indicadores.
start_pos
[in] Posición del primer elemento a copiar.
count
[in] Cantidad de elementos a copiar.
start_time
[in] Hora de la barra correspondiente al primer elemento.
stop_time
[in] Hora de la barra correspondiente al último elemento.
buffer[]
[out] Array del tipo double.
Valor devuelto
Cantidad de elementos copiados del array, o -1 en caso del error.
Nota
Al solicitar los datos del indicador, si las series temporales solicitadas todavía no están construidas o hay que bajarlas del servidor, la función devolverá inmediatamente -1. Aunque en este caso, se iniciará el proceso de descarga/construcción.
Cuando se solicitan los datos a un Asesor Experto o un script, se iniciará la descarga desde el servidor si el terminal no dispone de estos datos a nivel local, o se empezará la construcción de la serie temporal necesaria si se puede construir los datos usando el historial local y ellos todavía no están listos. La función devolverá aquella cantidad de datos que estarán listos para el momento de vencimiento de timeout.
Ejemplo:
//+------------------------------------------------------------------+
|
En el ejemplo de arriba se nos muestra que el búfer de indicadores se rellena con valores de otro búfer de indicadores perteneciente a indicador del mismo símbolo/período.
Puede encontrar un ejemplo más detallado de la solicitud de datos históricos en la sección Modos de enlace de objetos. En el script de aquella sección se muestra cómo se puede obtener los valores del indicador iFractals sobre las últimas 1000 barras, y cómo luego se puede visualizar en el gráfico los diez últimos fractales arriba y los diez último fractales abajo. Esta técnica puede ser utilizada para todos los indicadores que tienen omisiones de valores y suelen realizarse utilizando los siguientes estilos de construcción:
Véase también