Tick Data Exporter
- Utilidades
- Kenneth Weleh
- Versión: 1.20
- Activaciones: 10
La función principal de este script, Tick Data Exporter, es extraer eficientemente datos históricos de tick.
Los datos de tick representan el nivel más granular de datos de mercado, capturando cada cambio de precio.
El script descarga estos datos de un broker y los formatea en archivos CSV para un análisis cuantitativo externo.
Cinco cosas que los datos de tick muestran y que las barras ocultan permanentemente:
- Microestructura del diferencial: Las barras proporcionan un número de diferencial por periodo (normalmente el diferencial al cierre de la barra). Los ticks muestran el diferencial literalmente tick a tick. La ampliación segundos antes de las noticias de gran impacto es invisible en las barras; en los ticks es una valla publicitaria. Lo mismo ocurre con el "parpadeo del diferencial" que algunos brokers hacen al inicio de la sesión: se amplía durante 200 ms y vuelve a reducirse. Los datos de las barras lo ocultan.
- La frecuencia de cotización como indicador de volatilidad: Cuando un mercado está "pensando", los ticks llegan lentamente, quizá de 1 a 2 por segundo. Cuando es reactivo, se producen entre 30 y 50 por segundo. La densidad de ticks en sí misma, independiente del movimiento de los precios, es una señal real. Algunos operadores profesionales se fijan más en la frecuencia de las cotizaciones que en el precio. Una ráfaga repentina de ticks sin grandes cambios en el precio puede preceder a un movimiento direccional en decenas de segundos.
- Asimetría oferta/demanda: En las exportaciones de ticks se observan patrones de banderas como una actualización de sólo OFERTA seguida milisegundos después por una actualización de sólo COMPRA. Este patrón revela qué lado del mercado está liderando. El liderazgo sostenido de la oferta frente al liderazgo de la demanda a menudo precede a los movimientos direccionales durante varios segundos. Los datos de las barras no tienen este concepto: las barras sólo muestran el precio resultante, no el orden en que se movieron las ofertas y las demandas.
- Calidad de toque real: Cuando se pregunta "¿tocó el precio este nivel?" utilizando datos de barras, se comprueba el máximo o el mínimo de la barra. Los datos de ticks no sólo indican si el precio ha tocado este nivel, sino cuántas veces, durante cuánto tiempo y con qué diferencial. Tres lecturas de textura de toque completamente diferentes para el mismo nivel.
- Mapeo de inversión de sub-barra: Una barra que se abre en el mínimo y se cierra en el máximo (una barra alcista fuerte) no le dice nada sobre el *recorrido*. ¿Subió el precio hasta el máximo en los primeros 30 segundos y luego se movió lateralmente? ¿Subió de forma constante? ¿Subió, retrocedió un 90% y luego rompió al alza? Estos tres patrones producen barras casi idénticas y un comportamiento muy diferente en la siguiente barra. Los datos de tick reconstruyen la trayectoria.
Cuándo NO utilizar datos de tick:
Los datos de ticks tienen costes que los datos de barras no tienen: tamaño del archivo, tiempo de obtención y complejidad analítica. La herramienta no es adecuada para todas las cuestiones. Utilice datos de barras cuando:
- Estudie tendencias de varios días o semanas. Los datos de barras de la TF correcta son suficientes.
- Sólo le interesan los valores de apertura, máximo, mínimo y cierre. Las barras los proporcionan directamente; los ticks requerirían agregación.
- Usted está correlacionando múltiples símbolos. El formato ancho del exportador OHLC es mucho mejor para esto. Las marcas de tiempo de los ticks no se alinean entre símbolos.
- Está trabajando en Excel sin mucha paciencia.
Ajustes:
=== Rango ===
- Fecha de inicio: Primer momento para obtener los ticks, en tiempo del servidor (broker). Incluido.
- Fecha final: Último momento para el que se obtienen los ticks, en tiempo del servidor (broker). Por convención, excluye el último segundo. Debe ser posterior a Start datetime. Especifique siempre un intervalo de fechas.
=== Archivo
- Auto-nombrar archivo desde Símbolo + fechas?: Si es verdadero, los nombres de los archivos de salida se derivan del símbolo, fecha(s) y granularidad de la división (por ejemplo, EURUSD_TICKS_2026-05-04_13h.csv). Cuando es falso, utiliza Nombre de archivo (utilizado cuando Auto-nombre OFF y Dividir OFF), con sufijos de fecha/hora añadidos para las exportaciones en modo dividido para evitar colisiones.
- Nombre de archivo (utilizado cuando Auto-name OFF y Split OFF): Nombre de archivo manual (utilizado sólo cuando Auto-nombrar archivo desde Símbolo + fechas? es falso). Para las exportaciones divididas, la fecha relevante o el sufijo date_HHh se inserta antes de la extensión .csv automáticamente.
- Dividir la salida en un archivo por: hora / 4h / día / semana / apagado: Cómo dividir la exportación en archivos separados. Off = un único fichero para todo el rango. 1H/4H = un fichero por hora o ventana de 4 horas (bueno para análisis de ventanas de noticias). 1D = un fichero por día (por defecto, equilibrado). 1W = un archivo por semana (exportaciones de largo alcance). Los límites se alinean con las unidades de reloj naturales.
- Colocación del bloque de metadatos: APAGADO, ARRIBA o ABAJO. Arriba es el valor por defecto; elija ABAJO si planea utilizar la función de Excel de congelar la fila superior en los datos.
- Escriba 'sep=;' en la primera línea para que Excel detecte automáticamente el delimitador: Cuando es verdadero, escribe 'sep=;' como la primera línea del archivo. Excel lee esta sugerencia y utiliza automáticamente el punto y coma como delimitador para ese archivo, independientemente de la configuración regional del sistema operativo. Recomendado en configuraciones regionales europeas (danés, alemán, francés) donde el delimitador por defecto de Excel es la coma.
=== Hora ===
- Zona horaria para las marcas de tiempo: Zona horaria para las columnas Fecha y Hora. Servidor = zona horaria del agente. UTC = GMT/sin desfase (mejor para el análisis de datos entre sistemas). PC local = zona horaria de su máquina.
- ¿Incluir milisegundos en la columna de hora (HH:MM:SS.fff)?: Si es verdadero, la columna Hora muestra HH:MM:SS.fff con precisión de milisegundos. Importante para datos de ticks de alta frecuencia en los que son comunes múltiples ticks por segundo. Añade algunos caracteres por fila, pero no aumenta significativamente el tamaño del archivo. Recomendado ON para análisis serios.
=== Filtro de ticks
- Qué tipos de ticks exportar: Que tipos de tick exportar. ALL = todo lo que envió el broker. BIDASK = sólo los ticks que actualizan la oferta o la demanda (omite los ticks de volumen puro; reduce ligeramente el tamaño del fichero). TRADES = sólo los ticks que marcan operaciones reales (TICK_FLAG_LAST). Trades-only es raro que esté vacío para divisas al por menor, pero está poblado para índices, acciones e instrumentos liquidados centralmente.
=== Columnas
Cada columna puede activarse de forma independiente. Desactivar las columnas no utilizadas reduce el tamaño del archivo, a veces de forma significativa. Por ejemplo, desactivar Volumen y Último en forex minorista ahorra alrededor de un 5% por fila.
- ¿Incluir columna Fecha? Incluir la columna Fecha (ISO AAAA-MM-DD). Desactívela sólo si todos sus ticks son de un día y no necesita la fecha.
- ¿Incluir columna Hora? Incluir la columna Hora. El formato depende de "¿Incluir milisegundos en la columna de tiempo (HH:MM:SS.fff)?".
- ¿Incluir columna Oferta? Incluir el precio de oferta en el momento del tick.
- ¿Incluir columna Ask? Incluir el precio de venta en el momento del tick.
- ¿Incluir columna Spread (calculado como precio de compra - precio de venta)? Incluir el diferencial (calculado como precio de compra - precio de venta, redondeado a dígitos de símbolo). Recomendado ON; la microestructura del diferencial es una de las principales razones para utilizar datos de tick.
- ¿Incluir la última columna (precio de negociación; normalmente vacía para el mercado minorista)? Incluye el precio de la última operación. Vacío para la mayoría de divisas al por menor (no se informa de operaciones reales); útil para índices/acciones. Desactivado por defecto porque suele estar vacío.
- ¿Incluir columna Volumen? Incluye el volumen negociado. La misma advertencia que Último - mayormente cero para el mercado minorista de divisas. Desactivado por defecto.
- ¿Incluir columna de banderas (separadas por tuberías, por ejemplo "BID|ASK")? Incluye la columna de banderas de tick decodificada que muestra qué cambió en este tick (por ejemplo, BID, ASK, BID|ASK, BID|ASK|LAST, BUY, SELL). Separación por tuberías. Por defecto desactivado porque la mayoría de los análisis no lo necesitan; activar para trabajos avanzados de microestructura.
=== Rendimiento
- Duración de los trozos por búsqueda (RAM frente a llamadas a la API): Ventana de tiempo por llamada a la API. Los trozos más pequeños utilizan menos RAM durante la búsqueda, pero requieren más llamadas a la API. Los chunks más grandes usan más RAM pero terminan más rápido. 1D es el valor por defecto adecuado para la mayoría de las divisas al por menor; aumente a 1W si tiene una máquina potente y grandes exportaciones, baje a 4H o 1H si tiene problemas de memoria.
- Registrar el progreso cada N chunks (0 = silencioso): Registra una línea de progreso cada N chunks. Ponlo a 0 para silenciar el progreso intermedio (sólo aparecerá la línea final de "misión cumplida"). Ajústalo a 5 o 10 para reducir el spam en exportaciones largas.
Tenga en cuenta que Duración de los trozos por búsqueda (RAM frente a llamadas a la API) y Dividir salida en un archivo por: hora / 4h / día / semana / off son ajustes independientes. El tamaño del trozo afecta a la forma en que el script *obtiene* los datos internamente; la granularidad de la división afecta a la forma en que la *salida se divide en archivos*. Pueden configurarse de forma diferente - por ejemplo, obteniendo en trozos 1D (eficiente) pero escribiendo en archivos 1H (granular para análisis).
=== Referencia de columna de archivo .CSV ===
- Fecha: ISO AAAA-MM-DD Fecha del tick en la zona horaria elegida. El formato ISO garantiza una interpretación inequívoca independientemente de la configuración regional.
- Hora: HH:MM:SS o HH:MM:SS.fff Hora de la marca en la zona horaria elegida. El formato depende de ¿Incluir milisegundos en la columna de hora (HH:MM:SS.fff)?.
- Oferta: Precio de oferta en el momento de este tick, formateado según el recuento de dígitos del símbolo.
- Compra: Precio de venta en el momento de este tick.
- Diferencial: Calculado como compra - venta, redondeado al número de dígitos del símbolo. Se trata del diferencial real en ese momento, no de un valor agregado por barras.
- Último: Precio de la última operación. Vacío (o 0) cuando el broker no ha informado de ninguna operación con este tick.
- Volumen: Volumen negociado. Vacío para la mayoría de divisas al por menor.
- Indicadores: Tokens separados por tuberías Banderas de tick decodificadas. Fichas: BID (cambio en la oferta), ASK (cambio en la demanda), LAST (operación), VOL (actualización del volumen), BUY/SELL (dirección de la operación). Un mismo tick puede tener varios indicadores, por ejemplo: BID|ASK|LAST.
=== Nota importante sobre fechas y Excel ===
Las fechas en el archivo están escritas en formato ISO AAAA-MM-DD. La mayoría de las herramientas (pandas, Python, R, editores de texto plano) las leen exactamente como están escritas. Excel no lo hace.
Cuando abra un archivo tick en Excel, la columna Fecha se mostrará en el formato de fecha de su localidad (DD-MM-AAAA en la mayor parte de Europa, MM/DD/AAAA en EE.UU.). Excel procesa automáticamente las fechas ISO y las vuelve a mostrar. Si guarda el archivo desde Excel, Excel también reescribirá las fechas a su formato local dentro del propio archivo, mutando sus datos ISO originales.
Esto se documenta en el bloque de metadatos del archivo como recordatorio. Dos estrategias para manejarlo:
- Tratar Excel sólo como un visor, nunca guardar los cambios. Abrir, inspeccionar, cerrar sin guardar.
- Leer el archivo en pandas o Python en lugar de Excel. El formato ISO funciona perfectamente allí.
Si necesita específicamente que Excel deje las fechas, formatee la columna Fecha como Texto a través del asistente de importación Datos > Desde Texto/CSV.
=== Consejos y ejemplos ===
Elegir la granularidad de división correcta. La opción Dividir la salida en un archivo por: hora / 4h / día / semana / apagado afecta profundamente a cómo se estructuran los datos para su análisis. La elección del valor correcto consiste en ajustar la granularidad del archivo a su pregunta de análisis.
- SPLIT OFF Archivo único Cuando se desea un flujo continuo de ticks para un rango completo y se pretende utilizar pandas o Python para filtrar. Evitar para rangos de más de 1 día - los archivos se vuelven demasiado grandes para navegar.
- SPLIT 1H Archivos horarios Lo mejor para análisis de ventanas de noticias. FOMC, NFP, CPI: exporte las 4-6 horas alrededor del evento con SPLIT_1H, y tendrá un archivo por hora listo para un análisis separado. Cada archivo de hora es lo suficientemente pequeño como para abrirlo en Excel.
- SPLIT 4H Archivos alineados con la sesión Lo mejor para el análisis basado en la sesión. Los archivos se alinean con los límites 00/04/08/12/16/20, que corresponden aproximadamente a las ventanas de las sesiones asiática/temprana-europea/londres/almuerzo/NY/NY-tarde. Una semana equivale a 42 ficheros, pero cada uno de ellos es manejable.
- SPLIT 1D Ficheros diarios (por defecto) Por defecto. Un día por fichero es una unidad natural, los ficheros son de 5-15 MB en forex, y pandas los lee rápidamente.
- SPLIT 1W Ficheros semanales Exportaciones de largo alcance donde la granularidad semanal es suficiente. Una exportación de un mes se convierte en 4-5 ficheros en lugar de 30.
Ejemplo 1: Estudiar el anuncio del FOMC
Las decisiones del FOMC sobre los tipos de interés se producen a las 19:00, hora del servidor, de un miércoles concreto. Desea estudiar cómo fue el diferencial, la densidad de ticks y la acción del precio en las 2 horas previas y las 2 horas posteriores al anuncio.
Ajustes:
- Start datetime = D'2026.05.07 17:00:00' // 2 horas antes del FOMC
- End datetime = D'2026.05.07 21:00:00' // 2 horas después
- ¿Auto-nombrar archivo desde Símbolo + fechas? = true
- Dividir la salida en un archivo por: hora / 4h / día / semana / off = SPLIT_1H // archivos por hora para análisis granular
- Zona horaria para las marcas de tiempo = EXPORT_TIME_SERVER
- ¿Incluir milisegundos en la columna de tiempo (HH:MM:SS.fff)? = true // la secuencia de sub-segundos importa en torno a las noticias
- Qué tipos de tick exportar = TICK_ALL
- ¿Incluir la columna Flags (separada por tuberías, por ejemplo, "BID|ASK")? = true // ayuda a ver los patrones bid-leading vs ask-leading
- Duración del fragmento por búsqueda (RAM frente a llamadas a la API) = CHUNK_1D // una sola búsqueda durante 4 horas
Resultados: cuatro archivos denominados EURUSD_TICKS_2026-05-07_17h.csv a _20h.csv. Cada archivo es pequeño (1-5 MB, siendo probablemente el archivo de anuncios de las 19h el más grande). Puede abrir el archivo de anuncio-hora en Excel directamente para inspeccionarlo, o cargar los cuatro en pandas para analizar la densidad de ticks frente al cambio de precio.
Lo que hay que observar: el diferencial suele ampliarse 30-60 segundos antes del anuncio (el corredor se prepara para la volatilidad), aumenta hasta 5-10 veces lo normal en el momento del anuncio, y luego vuelve a reducirse durante los 5-15 minutos siguientes. La densidad de ticks pasa de 1-2 por segundo antes de la noticia a 50-100 por segundo en los primeros 30 segundos después de la publicación.
Ejemplo 2: Comparación del comportamiento de la apertura de una sesión a lo largo de una semana
Quiere ver si el parpadeo del spread en la apertura de las 08:00 de Londres se comporta de forma consistente a lo largo de los cinco días de negociación de una semana.
Configuración:
- Start datetime = D'2026.05.04 07:30:00' // Lunes, 30 min antes de Londres
- End datetime = D'2026.05.08 09:00:00' // Viernes, 1 hora después
- ¿Auto-nombrar archivo desde Símbolo + fechas? = true
- Dividir la salida en un archivo por: hora / 4h / día / semana / off = SPLIT_1D // un archivo por día de negociación
- Zona horaria para las marcas de tiempo = EXPORT_TIME_UTC // UTC ya que las horas de las sesiones suelen indicarse en UTC
- ¿Incluir milisegundos en la columna de tiempo (HH:MM:SS.fff)? = true
- Qué tipos de tick exportar = TICK_ALL
- Duración de los trozos por búsqueda (RAM frente a llamadas a la API) = CHUNK_1D
Resultados: cinco archivos, uno por día. En cada archivo, filtre a aproximadamente 06:30-08:00 UTC (Londres 07:00-09:00 reloj de pared). Compare la evolución de la dispersión a lo largo de los cinco días.
En qué fijarse: Los lunes suelen tener aperturas más amplias que a mitad de semana (efectos de brecha de fin de semana). Los viernes suelen tener un diferencial más estrecho después de la apertura (el libro se está cerrando).
Ejemplo 3: Detección de una densidad de ticks inusual
Quiere marcar los minutos en los que la densidad de ticks es inusualmente alta, como señal de que algo interesante puede haber ocurrido.
Configuración:
- Fecha de inicio = D'2026.05.04 00:00:00'
- End datetime = D'2026.05.04 23:59:59' // día completo único
- ¿Auto-nombrar fichero a partir de Símbolo + fechas? = true
- Dividir la salida en un archivo por: hora / 4h / día / semana / off = SPLIT_OFF // archivo único para todo el día
- Zona horaria para las marcas de tiempo = EXPORT_TIME_SERVER
- ¿Incluir milisegundos en la columna de tiempo (HH:MM:SS.fff)? = true
- Qué tipos de tick exportar = TICK_BIDASK // excluir ruido de volumen puro
- ¿Incluir columna Flags (separada por tuberías, por ejemplo "BID|ASK")? = false // no es necesario para el análisis de densidad
- Duración de los trozos por búsqueda (RAM frente a llamadas a la API) = CHUNK_1D
Resultados: un archivo con el día completo. En pandas, agrupar por minutos y contar filas. Ordenar descendentemente por conteo. Los 10 primeros minutos son los periodos de alta densidad. Cruza las marcas de tiempo con tu calendario económico.
Esta es una poderosa técnica de diagnóstico: los máximos de densidad de ticks a menudo preceden a los movimientos de precios en decenas de segundos, y se correlacionan con eventos que no siempre aparecen en el calendario (grandes órdenes institucionales, cambios de liquidez del corredor, movimientos simpáticos de mercados correlacionados).
Ejemplo 4: Análisis del coste del diferencial para un Backtest
Está ejecutando un Backtest con un stop-loss ajustado (5-8 pips) y le preocupa que la lectura del diferencial agregada por barras esté ocultando una ampliación intra-barra que le habría dejado fuera. Quieres el spread real en cada tick durante el periodo.
Ajustes:
- Inicio datetime = D'2026.04.01 00:00:00'
- Fecha final = D'2026.04.30 23:59:59'
- ¿Auto-nombrar archivo desde Símbolo + fechas? = true
- Dividir la salida en un archivo por: hora / 4h / día / semana / off = SPLIT_1D // un archivo por día, trozos manejables
- Zona horaria para las marcas de tiempo = EXPORT_TIME_SERVER
- ¿Incluir milisegundos en la columna de tiempo (HH:MM:SS.fff)? = false // para el análisis de costes, la segunda precisión está bien
- ¿Qué tipos de tick exportar? = TICK_BIDASK
- ¿Incluir columna Bid? = false // sólo necesita el spread, no el precio
- ¿Incluir columna Ask? = false
- ¿Incluir columna Spread (calculada como ask - bid)? = true
- ¿Incluir columna Flags (separada por tuberías, por ejemplo, "BID|ASK")? = false
- Duración de los trozos por búsqueda (RAM frente a llamadas a la API) = CHUNK_1D
Resultados: 30 archivos diarios, cada uno de los cuales contiene únicamente las columnas Fecha, Hora y Spread. Volumen total ~50-150 MB para el mes. En pandas, puede calcular la distribución empírica del spread: media, p95, p99, max. Compárelo con el diferencial constante que asumió en su Backtest. Ajuste su stop loss en consecuencia, o acepte que algunas operaciones que funcionaron en Backtest habrían sido detenidas en picos reales de spread.
Ejemplo 5: Reconstrucción de un evento flash
Algo inusual ocurrió en un gráfico a las 14:32 - un repentino pico de 15 pips seguido de un inmediato retroceso. Los datos de las barras muestran el movimiento, pero no la trayectoria. Desea obtener información detallada al nivel de milisegundos sobre lo que ha sucedido realmente.
Ajustes:
- Inicio datetime = D'2026.05.04 14:30:00' // 2 minutos antes
- Fin datetime = D'2026.05.04 14:35:00' // 3 minutos después
- ¿Auto-nombrar fichero a partir de Símbolo + fechas? = true
- Dividir la salida en un archivo por: hora / 4h / día / semana / off = SPLIT_OFF // 5 minutos es un archivo pequeño
- Zona horaria para las marcas de tiempo = EXPORT_TIME_SERVER
- ¿Incluir milisegundos en la columna de tiempo (HH:MM:SS.fff)? = true // crítico para reconstruir la ruta
- Qué tipos de tick exportar = TICK_ALL
- ¿Incluir columna Flags (separada por tuberías, p.ej. "BID|ASK")? = true // ver líder bid vs ask
- Duración de los trozos por búsqueda (RAM frente a llamadas a la API) = CHUNK_1H
Resultados: un pequeño archivo con potencialmente 5.000-15.000 ticks dependiendo de la gravedad del evento. Abrir directamente en Excel. Trace la oferta y la demanda a lo largo del tiempo. La secuencia exacta del pico -cuántos ticks en el máximo del pico, el diferencial cuando se produjo el pico, si la oferta se movió primero o la demanda se movió primero- le indica si se trató de un stop-hunt, una orden de "dedos gordos", una filtración de noticias o un auténtico evento de liquidez.
Este tipo de autopsia es el mejor uso que se puede hacer de los datos de tick. Los datos de barras muestran la herida; los datos de ticks muestran cómo fue infligida.
