CopyTicks

Obtiene los ticks de la estructura MqlTick en una matriz o vector.El conteo de elementos desde la posición de inicio se realiza del pasado hacia el presente, es decir, el tick con el índice 0 será el más antiguo. Para analizar el tick deberemos comprobar el campo flags, que indica exactamente qué ha cambiado en el tick en cuestión.

bool  matrix::CopyTicks(
   string           symbol,                // nombre del símbolo
   ulong            flags,                 // bandera que determina el tipo de ticks obtenidos
   ulong            from_msc,              // hora desde la que se solicitan los ticks
   ulong            count                  // número de ticks que debemos obtener
   );

Método del vector

bool  vector::CopyTicks(
   string           symbol,                // nombre del símbolo
   ulong            flags,                 // bandera que determina el tipo de ticks obtenidos
   ulong            from_msc,              // hora desde la que se solicitan los ticks
   ulong            count                  // número de ticks que debemos obtener
   );

Parámetros

symbol

[in]  Símbolo.

flags

[in]  Combinación de banderas de la enumeración ENUM_COPY_TICKS que indican la composición de los datos solicitados. Al copiar a un vector, podemos indicar solo un valor de la enumeración ENUM_COPY_TICKS, de lo contrario, ocurrirá un error.

from_msc

[in]  Hora a partir de la cual se solicitan los ticks. Se especifica en milisegundos a partir del 01.01.1970. Si el parámetro es from_msc=0, se ofrecerán los últimos count de los ticks.

count

[in]  Número de ticks solicitados. Si no se especifican los parámetros from_msc y count, se registrarán todos los últimos ticks disponibles, pero no más de 2000.

 

Valor retornado

Retorna true en caso de éxito, o false en caso de error.

Observación

La primera llamada a CopyTicks() inicia la sincronización de la base de datos de ticks almacenada en el disco duro para un símbolo determinado. Si no hay suficientes ticks en la base de datos local, los ticks que falten se cargarán automáticamente desde el servidor comercial. En este caso, los ticks del momento de_msc especificado en CopyTicks() se sincronizarán con el momento actual. Después de eso, todos los ticks entrantes en el símbolo dado irán a la base de ticks y la mantendrán sincronizada hasta la fecha.

Si no se especifican los parámetros from_msc y count, se escribirán en la matriz/vector todos los ticks disponibles, pero no más de 2000.

En los indicadores, el método CopyTicks() retornará el resultado de inmediato: al realizar la llamada desde un indicador, CopyTick() devolverá directamente los ticks disponibles por símbolo, y también activará la sincronización de la base de datos de ticks si no hay datos suficientes. Todos los indicadores de un símbolo trabajan en un hilo común, por lo que el indicador no tendrá derecho a esperar a que finalice la sincronización. Una vez completada la sincronización, la siguiente llamada a CopyTicks() retornará todos los ticks solicitados. La función OnCalculate() de los indicadores se llamará después de cada tick obtenido.

En los expertos y scripts, el método CopyTicks() puede esperar el resultado hasta 45 segundos: a diferencia de los indicadores cada experto y script trabajará en su propio hilo, y por lo tanto podrá esperar la sincronización hasta 45 segundos. Si en este tiempo no se sincronizan los ticks en la cantidad necesaria, CopyTicks() retornará solo los ticks disponibles por timeout, y la sincronización continuará. La función OnTick() en el asesor no es un manejador de ticks, solo notifica al asesor sobre los cambios en el mercado. Los cambios pueden darse por lotes: varios ticks pueden llegar al terminal al mismo tiempo, pero la función OnTick() será llamada una sola vez, para notificar al asesor experto la última situación del mercado.

Velocidad de ejecución: el terminal almacena para cada símbolo los 4096 últimos ticks en la caché para el acceso rápido (para los símbolos con la pila en ejecución, 65536 ticks), las peticiones a estos datos se ejecutarán más rápidamente. Al solicitar los ticks de la sesión comercial actual fuera de la caché, CopyTicks() accederá a los ticks ya almacenados en la memoria del terminal, estas solicitudes tardarán más tiempo en ejecutarse. Las peticiones de los ticks de otros días serán las más lentas, ya que en este caso, los datos se leerán desde el disco.

ENUM_COPY_TICKS

La enumeración ENUM_COPY_TICKS contiene las banderas para especificar el tipo de datos que se transmitirán a la matriz o array. La combinación de banderas permite recuperar varias series de la historia en una sola solicitud.  El orden de las filas en la matriz se corresponderá con el orden de los valores en la enumeración ENUM_COPY_TICKS, es decir, la fila con los datos High siempre estará por encima de la fila con los datos Low en la matriz.

Identificador

Valor

Descripción

COPY_TICKS_INFO

1

 

COPY_TICKS_TRADE

2

 

COPY_TICKS_ALL

3

 

COPY_TICKS_TIME_MS

1<<8

Hora del tick en milisegundos

COPY_TICKS_BID

1<<9

Precio Bid

COPY_TICKS_ASK

1<<10

Precio Ask

COPY_TICKS_LAST

1<<11

Precio Last (precio de la última transacción)

COPY_TICKS_VOLUME

1<<12

Volumen para el precio Last

COPY_TICKS_FLAGS

1<<13

Banderas de ticks

Ubicación de los datos

 

 

COPY_TICKS_VERTICAL

1<<15

Los ticks se copian en la matriz a lo largo del eje vertical.Esto significa que los ticks recibidos en la matriz se ordenan verticalmente, es decir, los más antiguos están en la primera fila y los más recientes en la última fila de la matriz.

 

Por defecto, al copiar en la matriz, los ticks se añaden a lo largo del eje horizontal.

 

La bandera solo es relevante cuando se copia en una matriz.

Para saber exactamente qué datos han cambiado con el tick actual, analizaremos sus banderas:

  • TICK_FLAG_BID — el tick ha cambiado el precio Bid
  • TICK_FLAG_ASK  — el tick ha cambiado el precio Ask
  • TICK_FLAG_LAST — el tick ha cambiado el precio de la última transacción
  • TICK_FLAG_VOLUME — el tick ha cambiado el volumen
  • TICK_FLAG_BUY — el tick ha aparecido como resultado de una transacción de compra
  • TICK_FLAG_SELL — el tick ha aparecido como resultado de una transacción de venta

 

Ver también

Acceso a las series temporales e indicadores, CopyTicks