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(
|
Método del vector
bool vector::CopyTicks(
|
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.
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 |
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