Pon "Me gusta" y sigue las noticias
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
- Visualizaciones:
- 16
- Ranking:
- Publicado:
-
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa
Una prueba retrospectiva en el modo «Cada tick basado en ticks reales» no realiza operaciones en las velas que se ven. Reproduce el historial de ticks que contiene la terminal, cotización a cotización, y cada stop, cada orden pendiente y cada filtro de spread se decide en función de esos ticks. Esta herramienta audita ese historial de ticks: lee los ticks de los últimos días de un símbolo, una lista o todo el Market Watch, y cuenta cinco tipos de problemas en ellos: cotizaciones imposibles, marcas de tiempo erróneas, inversiones de precio de un tick medidas en múltiplos del spread mediano, silencios dentro de las propias sesiones de cotización del bróker y minutos en los que los ticks y las barras M1 no coinciden.

Cinco símbolos del «Market Watch», tres días cada uno, una pasada a las 02:51:02, hora del servidor, un domingo; 1,3 s. S pts es el spread mediano en puntos; Rev≥10S cuenta las inversiones de un tick de al menos diez spreads medianos; Silence unexpl. cuenta los intervalos de más de 60 s que la propia tabla de sesiones del bróker no explica; y las tres últimas columnas corresponden a las comprobaciones de coincidencia entre ticks y M1. Captura con el tamaño de fuente del panel en 4 para que quepa en la página; el valor por defecto es 8.
El problema
Una vela es un resumen. Conserva cuatro precios de un minuto y descarta el orden en que se produjeron, por lo que una cotización que bajó dos dólares y se recuperó inmediatamente se muestra, en el gráfico, como una mecha en el mejor de los casos —y como nada en absoluto cuando el resto del minuto ya cubre ese rango. El probador no ve la vela. Ve la cotización, y una orden stop-loss situada dentro de ese rango se ejecuta en función de ella.
Nadie lee los ticks a simple vista porque hay demasiados: en el símbolo del oro que se muestra a continuación, la terminal registra aproximadamente 300 000 ticks por día de negociación. Así pues, las preguntas que determinan si una prueba retrospectiva con ticks reales es una medida o una ficción suelen quedar sin formular. ¿Hay cotizaciones en las que el precio de venta sea inferior al de compra? ¿Alguna vez el tiempo corre hacia atrás? ¿Hay tramos de una sesión en los que no haya ningún tick? ¿Las barras M1 que leen los indicadores coinciden con los ticks con los que opera el probador?
Esta herramienta las plantea en menos de dos segundos para cinco símbolos y tres días, y responde con recuentos, marcas de tiempo en milisegundos y filas CSV, no con un porcentaje de calidad.
Qué mide
Cinco comprobaciones en la ventana [último tick - N días, último tick), con ambos extremos redondeados al minuto. La ventana termina en el tick más reciente del símbolo, no en el reloj de pared, por lo que una ejecución un domingo audita los últimos días de la semana que acaba de cerrarse. Todas las definiciones que figuran a continuación son exactas, y cada resultado se escribe en un archivo CSV con su marca de tiempo en milisegundos, de modo que el informe puede volver a comprobarse en lugar de darse por bueno.
- Cotizaciones (K1). Un tick con precio de compra <= 0 o precio de venta <= 0; una cotización cruzada, en la que el precio de venta es inferior al de compra; una cotización bloqueada, en la que el precio de venta es igual al de compra. Las cotizaciones bloqueadas se cuentan, pero no se consideran resultados: algunas fuentes de datos llegan a coincidir legítimamente.
- Marcas de tiempo (K2). Un tick cuyo «time_msc» es anterior al del tick anterior (hacia atrás); una repetición, con el mismo «time_msc», la misma oferta y el mismo precio de venta que el tick anterior; y un tick cuyo campo de tiempo no coincide con «time_msc / 1000».
- Inversiones de un tick (K3). En la secuencia de ticks que modifican el precio del gráfico, tres precios consecutivos p0, p1 y p2 forman una inversión cuando el movimiento hacia p1 y el movimiento desde p1 tienen signos opuestos y p2 vuelve a situarse dentro de una cuarta parte del movimiento desde p0. El tamaño es el menor de los dos movimientos, en puntos, y se expresa en múltiplos de S, el spread mediano del propio símbolo en la ventana: se cuentan a partir de 2, 5, 10 y 20 spreads, y cada reversión de al menos InpReversalMult spreads (por defecto, 10) se considera un hallazgo. Diez spreads en el oro y diez spreads en el EURUSD equivalen, por tanto, a lo mismo.
- Silencios (K4). Dos ticks consecutivos separados por más de InpSilenceSeconds (por defecto, 60). La herramienta consulta a SymbolInfoSessionQuote cada minuto del silencio y sobre su último segundo: si alguno de ellos queda fuera de las sesiones de cotización, el silencio tiene una explicación (una pausa diaria, un fin de semana); si todos están dentro, queda sin explicar y se considera un hallazgo. Un símbolo sin ningún registro de sesión se clasifica como «sin clasificar», nunca como «explicado».
- Ticks frente a barras M1 (K5). Para cada minuto de la ventana, se comparan el precio máximo y mínimo del gráfico en cada tick de ese minuto con el máximo y el mínimo de la barra M1 del bróker. Cada tick, no solo los que movieron el precio: el primer tick de un minuto a menudo solo cambia el precio de venta, y su precio de compra sigue siendo la apertura de la barra. Contar solo los ticks que modificaban el precio generó 144 discrepancias falsas en un día del EURUSD mientras se desarrollaba esta herramienta; contar todos los ticks no generó ninguna. Una barra M1 sin ningún tick subyacente constituye un hallazgo —es decir, un minuto en el que el Strategy Tester tiene que inventar ticks—, al igual que un minuto con ticks pero sin barra, y un minuto cuyo máximo o mínimo difiera en más de InpBarTolPoints.
La herramienta comprueba sus propios cálculos y muestra ambos lados para cada símbolo: el número de hallazgos debe ser igual a la suma de los once contadores de hallazgos, y el número de filas escritas en el archivo de hallazgos para ese símbolo debe ser igual a ambos.
Ejemplo medido
Cinco símbolos de Market Watch de una terminal de demostración de Exness (versión 6230), tres días cada uno, auditados en una sola pasada el 4 de octubre de 2026 a las 02:51, hora del servidor. Se trata de un domingo, por lo que las ventanas de divisas y oro finalizan con el último tick del viernes, mientras que el BTCUSD, que cotiza durante el fin de semana, finaliza en el momento de la ejecución. Se leyeron 1 962 511 ticks en 1 297 ms.
| símbolo | ventana (hora del servidor) | ticks | S, puntos | inversiones >= 2 S / 5 S / 10 S | inversión más grande, puntos | silencios > 60 s: explicados / inexplicables | segundos sin explicación (más largos) | Barras M1 / minutos con ticks | discrepancias en M1 | resultados |
|---|---|---|---|---|---|---|---|---|---|---|
| XAUUSD | 29/09 20:57 - 10/02 20:57 | 907 660 | 168 | 532 / 16 / 3 | 2 400 | 3 / 0 | 0 | 4 134 / 4 134 | 0 | 3 |
| EURUSD | 29 de septiembre a las 20:58 - 2 de octubre a las 20:58 | 177 962 | 6 | 13/2/0 | 58 | 0 / 6 | 1 514,073 (439,640) | 4 299 / 4 299 | 0 | 6 |
| GBPUSD | 29 de septiembre a las 20:58 - 2 de octubre a las 20:58 | 215 516 | 7 | 14 / 8 / 2 | 75 | 0 / 4 | 1 602,183 (741,443) | 4 295 / 4 295 | 0 | 6 |
| USDJPY | 29 de septiembre a las 20:58 - 2 de octubre a las 20:58 | 321 026 | 7 | 124 / 23 / 0 | 67 | 0 / 11 | 1 397,153 (307,393) | 4 305 / 4 305 | 0 | 11 |
| BTCUSD | 10,01 02:51 - 10,04 02:51 | 340 347 | 700 | 34 / 0 / 0 | 3 084 | 0 / 0 | 0 | 4 320 / 4 320 | 0 | 0 |
Lo que está limpio es la mayor parte. A lo largo de 1 962 511 ticks no hay ninguna cotización igual o inferior a cero, ni cotizaciones cruzadas ni bloqueadas, ni ningún tick que se remonte en el tiempo, ni ticks repetidos, ni ningún tick cuyos dos campos de tiempo no coincidan. Cada una de las 21 353 barras M1 tiene ticks subyacentes; cada minuto con ticks tiene una barra, y los máximos y mínimos de la barra coinciden con la cotización máxima de sus ticks hasta el último punto. En este servidor, las barras que leen los indicadores y los ticks que reproduce el probador coinciden en todos los máximos y mínimos. Es importante saberlo, y no es algo que se pueda dar por sentado en un servidor que no haya sido evaluado.
La tabla de sesiones y el feed no coinciden en ninguna de las tardes de la ventana. Para el EURUSD, el GBPUSD y el USDJPY, este bróker declara una sesión de cotización de 00:00 a 24:00 de lunes a jueves. Los ticks indican lo contrario. En cada una de las tres tardes, el último tick antes del rollover diario llega entre las 20:59:52 y las 20:59:58, y el siguiente, entre las 21:04:28 y las 21:12:18: entre 4,5 y 12,4 minutos sin ninguna cotización, dentro de lo que el bróker denomina una sesión abierta. El periodo más largo corresponde al GBPUSD el 1 de octubre de 2026, con 741,443 segundos, desde las 20:59:57,249 hasta las 21:12:18,692. El USDJPY muestra un segundo patrón tras el cambio de día del 29 de septiembre de 2026: entre las 21:15 y las 21:29 permanece en silencio durante algo más de un minuto en siete ocasiones, de 60,001 a 60,007 segundos cada una, de donde proceden siete de sus once registros. El oro, en el mismo servidor, indica una interrupción de 20:58 a 22:00, por lo que sus tres silencios de cambio de sesión se explican y no se consideran resultados.
Esto es relevante siempre que un asesor experto se base en la tabla de sesiones para determinar si el mercado está abierto. Las barras coinciden con los ticks —tampoco hay barras M1 en esos minutos, por lo que una prueba retrospectiva muestra el mismo hueco—, pero un EA que lee las sesiones de cotización para decidir cuándo actuar cree que el mercado está cotizando a las 21:02, y en ninguna de las nueve tardes de los símbolos mencionados anteriormente fue así.
Las mayores reversiones se producen todas coincidiendo con la publicación de datos de EE. UU. Las cinco reversiones de al menos diez spreads medianos —tres en el XAUUSD y dos en el GBPUSD— se producen en los ocho segundos posteriores a las 12:30, hora del servidor, los días 30 de septiembre de 2026 y 2 de octubre de 2026. El propio calendario económico de la terminal recoge publicaciones de datos de EE. UU. a las 12:30 en ambos días. La mayor, en el oro, es de tres ticks en menos de un milisegundo:
símbolo;verificación;tiempo_msc;hora;valor1;valor2;detalle XAUUSD;inversión;1790771407860;30/09/2026 12:30:07,860;2400;141;p0 4198,315 p1 4195,774 p2 4198,174 d1 -2541 d2 2400 S 168
La oferta cae 2,541 y vuelve a subir 2,400, terminando 0,141 por debajo de donde comenzó (valor2), en el mismo milisegundo. Eso equivale a 14,3 spreads medianos. En el gráfico M1 es invisible: la barra de las 12:30 va de 4192,325 a 4209,799, por lo que la vela no muestra ningún rastro de ello. En una prueba con ticks reales, una orden stop de venta o un stop-loss situado entre 4195,774 y 4198,174 en ese momento —por ejemplo, un trailing stop que sigue el repunte— se activa por ese único tick.

XAUUSD, 29 ticks consecutivos en torno a la mayor reversión de la racha, en orden de llegada. Los tres ticks con la marca 12:30:07,860 son 4198,315, 4195,774 y 4198,174. Los otros 26 ticks, desde las 12:30:07.610 hasta las 12:30:08.663, constituyen un movimiento rápido pero habitual provocado por noticias, que abarca 7,7 dólares. Extraídos de los ticks leídos a través del propio servidor MCP de MetaTrader 5, no de los archivos de la herramienta.
No es posible determinar, basándose únicamente en los datos, si un tick de este tipo es un error de lectura o una operación real en un mercado con poca liquidez, y la herramienta no intenta hacerlo. Lo que hace es contarlos, compararlos con el spread del propio símbolo y proporcionar la marca de tiempo, para que puedas averiguar si el resultado de una prueba retrospectiva depende de unos pocos de ellos. La distribución es pronunciada: en el oro, 532 reversiones de al menos dos spreads, 16 de al menos cinco y 3 de al menos diez.
Verificación independiente del informe
Cada contador de la tabla anterior se ha vuelto a calcular mediante un programa que no comparte código alguno con la herramienta y que obtiene sus ticks y barras de una interfaz a la que la herramienta nunca recurre. Un script de Python lee de los archivos del EA únicamente la ventana, el punto del símbolo y el modo de gráfico, los cuatro umbrales y la tabla de sesiones, y extrae por sí mismo los ticks sin procesar y las barras M1 a través del servidor MCP integrado en MetaTrader 5 (get_chart_ticks_history, get_chart_history). A continuación, aplica las definiciones anteriores y realiza la comparación.
Para la ejecución de la tabla: 1 962 511 ticks extraídos, 31 campos de resumen por símbolo más la tabla de 24 horas de cada símbolo (72 celdas por símbolo), 0 discrepancias. Los 31 campos son 29 contadores, el recuento de filas del archivo de resultados y la identidad. Se detectaron dos errores introducidos deliberadamente: un contador incrementado en 1 y un recuento de ticks por hora incrementado en 1. Hay un campo que no se ha vuelto a contar: la comprobación del campo de tiempo requiere el miembro «time» de MqlTick, que las filas de MCP no contienen, por lo que su valor cero recae únicamente en el EA. El script tampoco puede comprobar un símbolo cuyo gráfico se base en los precios «Last»; ninguno de los cinco lo hace.
Las propias definiciones del script se validan mediante una prueba con 13 ticks generados manualmente, con todos los recuentos esperados calculados en papel: una repetición, una inversión de 49 puntos, un tick fuera de orden, una cotización cruzada y otra bloqueada, una cotización con un precio de venta igual a cero, dos silencios dentro de una sesión y uno que se extiende a través de un corte de sesión — además de un caso de dos ticks en el que solo el último segundo de un silencio queda fuera de la sesión. 45 afirmaciones, contadas por la propia prueba. Que el EA aplique los mismos predicados queda demostrado por el recuento con datos reales, no por esa prueba.
Un cero confirmado en ambos lados es solo un cero. En ninguna de las ejecuciones en las que se basa este artículo se produjo ningún tick cruzado, invertido, repetido o no positivo, ni ninguna discrepancia M1, por lo que esas ramas están definidas y se han vuelto a contar, pero nunca se observó que se activaran en este servidor.
Cómo utilizarlo
- Adjúntalo a cualquier gráfico; se audita el símbolo propio del gráfico, a menos que InpSymbols enumere otros o sea * (Market Watch). Lee el diario o el panel.
- Configura InpDays para que abarque el periodo de la prueba retrospectiva que te interese. La ventana siempre termina en el último tick que contiene la terminal.
- Fíjate primero en los silencios inexplicables y lee sus marcas de tiempo en el archivo de resultados. Los silencios que se repiten a la misma hora todos los días se deben a que la programación del servidor no coincide con su tabla de sesiones; los dispersos merece la pena comprobarlos con el registro de conexión de tu propia terminal.
- Fíjate en las inversiones de tendencia de diez spreads o más y, a continuación, en los recuentos de 2S y 5S para evaluar la forma de la distribución. Si los stops de una estrategia se encuentran a pocos spreads del precio, vuelve a ejecutar su backtest excluyendo los minutos marcados y compara los resultados.
- Cualquier discrepancia en M1 o barra de M1 sin ticks es un minuto en el que el probador y el gráfico no coinciden, o en el que el probador inventa precios. Esos casos merecen una consulta al bróker.
- Vuelve a ejecutar la prueba tras cambiar de bróker o de servidor: la calidad de los ticks es una propiedad del historial de una terminal en un momento dado, no de un símbolo.
Datos de entrada
| entrada | por defecto | significado |
|---|---|---|
| InpSymbols | "" | Símbolos: vacío = símbolo del gráfico, * = Market Watch, en caso contrario, lista CSV |
| InpDays | 3 | Días de historial de ticks que se van a auditar (terminando en el último tick) |
| InpCheckQuotes | true | K1: cotizaciones no positivas / cruzadas / bloqueadas |
| InpCheckTimes | verdadero | K2: marcas de tiempo inversas, repetidas e incoherentes |
| InpCheckReversals | verdadero | K3: inversiones de precio de un tick (picos) |
| InpReversalMult | 10,0 | K3: inversiones de bandera de al menos esta cantidad de spreads medianos |
| InpReversalReturnFrac | 0,25 | K3: distancia máxima de retroceso hasta el inicio, expresada como porcentaje del movimiento |
| InpCheckSilences | true | K4: intervalos entre ticks respecto a las sesiones de cotización |
| InpSilenceSeconds | 60 | K4: se considera silencio cualquier intervalo superior a este valor, en segundos |
| InpCheckBars | true | K5: compara los máximos y mínimos de los ticks con las barras M1 |
| InpBarTolPoints | 0 | K5: ignorar las desviaciones de máximo/mínimo de hasta este número de puntos |
| InpChunkMinutes | 360 | Los ticks se leen en bloques de este número de minutos |
| InpMaxExamples | 5 | Diario: número de resultados de ejemplo impresos por comprobación |
| InpWriteCsv | true | Escribir archivos CSV con el resumen, las sesiones, las horas y los resultados |
| InpShowPanel | true | Dibujar la tabla de resultados en el gráfico |
| InpPanelCorner | CORNER_LEFT_UPPER | Esquina del panel |
| InpPanelFontSize | 8 | Tamaño de fuente del panel |
| InpPanelX | 10 | Desplazamiento X del panel, px |
| InpPanelY | 18 | Desplazamiento del panel Y, px |
| InpRefreshMinutes | 0 | Reauditar cada N minutos (0 = auditar una vez) |
Archivos de salida
Todos los archivos se guardan en MQL5\Files\TickIntegrityAuditor\, separados por punto y coma, con una fila de encabezado y el prefijo <símbolos>_<días>d_<id del gráfico>, de modo que dos instancias nunca se sobrescriban entre sí.
- <prefijo>_<símbolo>_summary.csv: una fila por símbolo; la ventana en milisegundos, cada contador anterior, los parámetros utilizados y el resultado de la identidad. Una comprobación desactivada deja sus celdas vacías en lugar de escribir un 0.
- <prefijo>_<símbolo>_sessions.csv — las sesiones de cotización que declara el bróker, una fila por sesión (día laborable, desde, hasta en segundos).
- <prefijo>_<símbolo>_hours.csv — por hora del servidor: ticks, silencios inexplicables y sus segundos, reversiones señaladas.
- <prefijo>_findings.csv — una fila por hallazgo con el símbolo, la comprobación, time_msc, la hora legible, dos valores y un detalle de texto. Para una inversión, el valor1 es su magnitud y el valor2 la distancia hasta p0, ambos en puntos; para un silencio, el valor1 es su duración en segundos y el valor2 el time_msc del tick que lo puso fin.
Límites, explicados con claridad
- Audita los ticks que contiene tu terminal. Un historial actualizado o descargado de nuevo puede modificar todas las cifras, y un terminal que haya estado desconectado genera silencios que el bróker nunca tuvo.
- La tabla de sesión es el propio extracto del bróker. Un silencio explicado solo se explica en el sentido de que el bróker indicó que no habría cotizaciones; uno inexplicado es una discrepancia entre dos de los extractos del bróker, no una prueba de un fallo.
- Una reversión es un patrón, no un veredicto. La herramienta no puede distinguir una cotización errónea de una operación real; mide el volumen y el tiempo, y deja el juicio a tu criterio.
- La ventana está limitada a InpDays días (como máximo 365). Los ticks se leen en bloques, por lo que el consumo de memoria es reducido, pero una ventana larga en un símbolo con mucha actividad tarda proporcionalmente más tiempo.
- Los símbolos representados gráficamente por el «Último precio» se auditan en función del «Último precio». No había ningún símbolo de este tipo disponible en este servidor, por lo que esa rama se implementó pero nunca se ejecutó, y el recuento independiente solo abarca los símbolos representados gráficamente por la «Oferta».
- Sin funciones de negociación, sin DLL, sin acceso a la red: lee ticks, barras y tablas de sesión, y escribe archivos CSV en MQL5\Files.
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/code/78008
87.8 Percent from 2021 to YTD at 8.5 Percent MaxDD. The Nikkei EA That Only Buys When Volume Is Quiet
Un EA gratuito y totalmente abierto para el JPN225 (Nikkei 225) en el timeframe M15. Compra cuando el precio muestra una tendencia alcista, el impulso no está sobrevalorado y el volumen es bajo. Backtest de 2022 a 2026: factor de beneficio de 1,68, +18,5 % al año, ha superado 15 pruebas de estrés. Cierra en plano a las 17:00.
Session Sweep Boxes
Traza los rangos de las sesiones de Asia, Londres y Nueva York y señala los «sweeps» de liquidez: una barra cerrada cuya mecha se extiende más allá del máximo o mínimo de una sesión completada y vuelve a cerrar dentro de dicho rango. Flechas que no se actualizan, niveles de sesión ampliados, alertas y buffers compatibles con iCustom.
Accumulation/Distribution
El indicador Accumulation/Distribution (Acumulación/Distribución) queda determinado por los cambios que se producen en el precio y en el volumen.
Accelerator Oscillator (AC)
El indicador Acceleration/Deceleration (AC, Aceleración/Desaceleración) mide la aceleración y la desaceleración de la fuerza impulsora del mercado.