- 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
CopyTicks
La función recibe en la matriz ticks_array los ticks en formato MqlTick, además, la indexación se tiene lugar del pasado al presente, es decir, el tick con el índice 0 es el más antiguo en la matriz. Para analizar un tick es necesario comprobar el campo flags, que nos informa sobre lo que se ha cambiado precisamente en este tick.
int CopyTicks(
|
Parámetros
symbol_name
[in] Símbolo.
ticks_array
[out] Matriz del tipo MqlTick para recibir los ticks.
flags
[in] bandera que define el tipo de los ticks solicitados. COPY_TICKS_INFO ticks llamados por los cambios de Bid y/o Ask, COPY_TICKS_TRADE ticks con los cambios de Last y Volume, COPY_TICKS_ALL todos los ticks. Al realizarse cualquier tipo de solicitud, en los campos restantes de la estructura MqlTick se acaban de escribir los valores del tick anterior.
from
[in] Fecha a partir de la cual se solicitan los ticks. Se indica en milisegundos desde el 01.01.1970. Si el parámetro from=0, entonces se dan los últimos count ticks.
count
[in] Número de ticks solicitados. Si los parámetros from y count no se indican, entonces en la matriz ticks_array[] se grabarán todos los últimos ticks disponibles, pero no más de 2000.
Valor devuelto
Número de ticks copiados, o bien -1 en caso de error.
Observación
La función CopyTicks() permite solicitar y analizar todos los ticks entrantes. La primera llamada de CopyTicks() inicia la sincronización de la base de ticks que se guarda en el disco duro de este símbolo. Si los ticks en la base local son insuficientes, entonces los ticks que faltan se cargarán de forma automática desde el servidor comercial. En este caso, los ticks serán sincronizados desde la fecha from, indicada en CopyTicks(), hasta el momento actual. Después de ello, todos los ticks entrantes de dicho símbolo llegarán a la base de ticks y la mantendrán en su actual estado sincronizado.
Si los parámetros from y count no han sido indicados, entonces en la matriz ticks_array[] se grabarán todos los ticks disponibles, pero no más de 2000. El parámetro flags permite definir el tipo de los ticks necesarios.
COPY_TICKS_INFO se dan los ticks en los que hay cambios del precio Bid y/o Ask. Pero además, también se rellenarán los datos del resto de los campos, por ejemplo, si solo ha cambiado el precio Bid, en los campos ask y volume se grabarán los últimos valores conocidos. Para saber exactamente qué ha sido lo que ha cambiado, es necesario analizar el campo flags, que tendrá el valor TICK_FLAG_BID y/o TICK_FLAG_ASK. Si el tick tiene valores cero de los precios Bid y Ask, y las banderas muestran que los precios han cambiado (flags=TICK_FLAG_BID|TICK_FLAG_ASK), entonces esto nos indica que se ha vaciado la profundidad de mercado. En otras palabras, en este momento no hay solicitudes de compra o venta.
COPY_TICKS_TRADE se dan los ticks en los que hay cambios del último precio de la operación y del volumen. Pero además, también se rellenarán los datos del resto de los campos, es decir, en los campos Bid y Ask se grabarán los últimos resultados conocidos. Para saber exactamente qué ha sido lo que ha cambiado, es necesario analizar el campo flags, que tendrá el valor TICK_FLAG_LAST y TICK_FLAG_VOLUME.
COPY_TICKS_ALL se dan todos los ticks en los que hay aunque sea un cambio. Además, los campos no modificados también se rellenan con los últimos valores conocidos.
La llamada de CopyTicks() con la bandera COPY_TICKS_ALL proporciona de golpe todos los ticks del diapasón solicitado, al tiempo que la llamada en otros modos exige de cierto tiempo para el pre-procesado y la selección de los ticks, y por eso no da una ventaja sustancial en cuanto a velocidad de ejecución.
Al solicitar los ticks (no importa si se trata de COPY_TICKS_INFO o de COPY_TICKS_TRADE), en cada tick se contiene información de precio completa en el momento del tick (bid, ask, last y volume). Esto se ha hecho para que sea más cómodo analizar las circunstancias comerciales en el momento de cada tick, y que no resulte necesario solicitar cada vez la historia profunda de ticks y buscar en ella los valores de otros campos.
En los indicadores, la función CopyTicks() retorna el resultado de inmediato: Al llamar CopyTick() desde el indicador se retornarán de inmediato los ticks disponibles del símbolo, y se iniciará la sincronización de la base de ticks, si los datos han sido insuficientes. Todos los indicadores en un símbolo funcionan en un flujo común, por eso el indicador no tiene derecho a esperar la finalización de la sincronización. Después de finalizar la sincronización, con la siguiente llamada, CopyTicks() retornará todos los ticks solicitados. La función OnCalculate() en los indicadores se llama después de que llegue cada tick.
En los expertos y scripts, la función CopyTicks() puede esperar el resultado hasta 45 segundos: A diferencia del indicador, cada experto y script funciona en su propio flujo, y por eso puede esperar la finalización de la sincronización hasta 45 segundos. Si durante este tiempo los ticks aún no se han sincronizando en el número necesario, entonces CopyTicks() retornará por timeout solo los ticks disponibles, y la sincronización continuará. La función OnTick() en los expertos no se constituye como procesador de cada tick, sino que notifica al experto sobre los cambios en el mercado. Los cambios pueden darse en paquetes: al terminal pueden llegar varios ticks al mismo tiempo, pero la función OnTick() será llamada solo una vez para notificar al experto sobre el último estado del mercado.
Velocidad de entrega: el terminal guarda de cada símbolo los 4096 últimos ticks en el caché para el acceso rápido (para los símbolos con la profundidad de mercado iniciada, serán 65536 ticks), las solicitudes de estos datos son las que más rápidamente se ejecutan. Al solicitar los ticks de la sesión comercial actual más allá de los límites del caché, CopyTicks() recurre ya a los ticks que se guardan en la memoria del terminal, estas solicitudes necesitan más tiempo para ejecutarse. Las más lentas son las solicitudes de los ticks de otros días, ya que, en este caso, los datos se leen ya desde el disco.
Ejemplo:
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
|
Véase también
SymbolInfoTick, Estructura para obtener los precios actuales, OnTick()