Descargar MetaTrader 5

CopyRealVolume

La función recibe en el array volume_array datos históricos de los volúmenes comerciales para el par especificado de símbolo-período en cantidad especificada. Cabe mencionar que la cuenta de elementos 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.

CopyRealVolume

Cuando copiamos los datos sin conocer todavía el volumen a copiar, se recomienda usar un array dinámico como array de destino, porque si la cantidad de datos resulta ser menos (o más) de la que cabe en el array, entonces se intenta redistribuirlo de tal manera para que los datos solicitados quepan íntegramente.

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  CopyRealVolume(
   string           symbol_name,      // nombre del símbolo
   ENUM_TIMEFRAMES  timeframe,        // período
   int              start_pos,        // posición de inicio 
   int              count,            // cantidad de datos a copiar
   long             volume_array[]    // array para copiar los volúmenes
   );

Llamada según la fecha de inicio y el número de elementos requeridos

int  CopyRealVolume(
   string           symbol_name,      // nombre del símbolo
   ENUM_TIMEFRAMES  timeframe,        // período
   datetime         start_time,       // fecha y hora de inicio
   int              count,            // cantidad de datos a copiar
   long             volume_array[]    // array para copiar los volúmenes
   );

Llamada según la fecha de inicio y finalización del intervalo de tiempo requerido

int  CopyRealVolume(
   string           symbol_name,      // nombre del símbolo
   ENUM_TIMEFRAMES  timeframe,        // período
   datetime         start_time,       // fecha y hora de inicio
   datetime         stop_time,        // fecha y hora de finalización
   long             volume_array[]    // array para copiar los volúmenes
   );

Parámetros

symbol_name

[in]  Símbolo.

timeframe

[in]  Período.

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.

volume_array[]

[out]  Array del tipo long.

Valor devuelto

Cantidad de elementos copiados del array, o -1 en caso del error.

Nota

Si el intervalo de datos solicitados se encuentra totalmente fuera del rango de datos disponibles del servidor, la función devuelve -1. Si los datos solicitados salen del rango de TERMINAL_MAXBARS (la cantidad máxima de barras en el gráfico), la función tambien devuelve -1.

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, pero el historial seguirá cargándose  y con la siguiente solicitud del mismo tipo la función devolverá más datos.

Cuando se solicitan los datos por la fecha inicial y el número de elementos requeridos, sólo se devuelven los datos cuya fecha es menor (anterior) o igual a la especificada. Este intervalo se establece y se cuenta con la precisión de segundos. Es decir, la fecha de apertura de cualquier barra para la que se devuelve el valor (volumen, spread, valor en el búfer de indicador, precio Open, High, Low, Close o la hora de apertura Time) siempre es igual o menor que la especificada.

Cuando se solicitan los datos de un período de fechas especificado, se devuelven los datos que entran sólo en este intervalo temporal especificado. Este intervalo se establece y se cuenta con la precisión de segundos. Es decir, la hora de apertura de cualquier barra para la que se devuelve el valor (volumen, spread, valor en el búfer de indicador, precio Open, High, Low, Close o la hora de apertura Time) siempre se encuentra en el intervalo especificado.

Por ejemplo, si el día corriente es sabado, al intentar copiar los datos del margen semanal indicando start_time=Último_Martes y stop_time=Último_Viernes, la función devolverá 0 porque la apertura en un período de tiempo semanal siempre cae en domingo, pero ninguna barra semanal no entra en el período especificado.

Si se necesita obtener el valor que corresponde a una barra corriente no finalizada, se puede usar la primera forma de llamada, indicando start_pos=0 y count=1.

Puede encontrar un ejemplo 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:


Actualizado: 2015.12.03