Cada filtro de tiempo de un asesor experto, cada regla de «cierre antes del rollover» y cada casilla de sesión de un gráfico se basan en un único dato: la tabla de sesiones del símbolo, es decir, el horario que el bróker declara a través de SymbolInfoSessionQuote y SymbolInfoSessionTrade. Esta herramienta compara dicha tabla con el historial. Durante los últimos N días completos, cuenta, para cada minuto de la semana, en cuántos de esos días el símbolo tiene una barra M1, y coloca el resultado junto a lo que indica la tabla: minutos declarados que suelen estar vacíos, barras en minutos que la tabla considera cerrados, minutos en los que las tablas de operaciones y de cotizaciones no coinciden, e interrupciones puntuales en minutos declarados que no suelen estar vacíos.

Cinco símbolos de Market Watch, 35 días completos cada uno (del 1 de septiembre de 2026 al 6 de octubre de 2026, hora del servidor), una pasada en 62 ms. «Tabla h/semana» y «Real h/semana» son las horas semanales que declara la tabla de sesiones y las horas en las que existen barras al menos en la mitad de las fechas de ese día de la semana. «Dead min/wk» cuenta los minutos declarados con barras en como máximo una cuarta parte de sus fechas; «Outages» cuenta los huecos de cinco minutos o más en los minutos declarados que no están inactivos. Generado con un tamaño de fuente del panel de 4 para ajustarse a la página; el valor predeterminado es 8.
El problema
Una tabla de sesión es una declaración, no una medición. El terminal la muestra en la especificación del símbolo y un EA puede leerla, pero nada la compara con los precios que realmente llegan. En el servidor de demostración analizado a continuación, el EURUSD, el GBPUSD y el USDJPY se declaran como cotizados de 00:00 a 24:00 de lunes a jueves. El historial M1 indica que, justo después de las 21:00, hora del servidor, a menudo no hay ningún precio. El oro, en el mismo servidor, declara una interrupción de 20:58 a 22:00, y sus barras coinciden con la tabla al minuto —excepto el lunes 7 de septiembre de 2026, festivo en EE. UU., cuando la última barra antes de la interrupción es a las 18:27 y dos horas y media de una sesión declarada están vacías.
Nada de esto se aprecia en la tabla, y todo ello es relevante para el trading automatizado. Un filtro temporal creado a partir de la tabla intentará operar en minutos en los que a menudo no hay cotización. El Strategy Tester tampoco dispone de ticks en ese intervalo, por lo que una regla que se active «a las 21:01» puede que simplemente nunca se active la mayoría de los días. Y un dato sobre el «horario de negociación» que alguien copió en su día de las especificaciones solo es tan correcto como lo sean dichas especificaciones.
Lo que mide
La ventana es [D0, D1): D1 es las 00:00, hora del servidor, del día de la barra M1 más reciente del símbolo, por lo que se excluye el día de hoy, que aún no ha terminado, y D0 se sitúa InpDays días completos antes (se adelanta al primer día completo si el historial M1 comienza más tarde). Para cada minuto de la semana, la herramienta cuenta las fechas de ese día de la semana dentro de la ventana —en el calendario, por lo que un día festivo sin ni una sola barra cuenta como una fecha en la que faltan todos los minutos— y los resultados, es decir, las fechas que tienen una barra M1 en ese minuto. Un minuto se considera válido cuando su inicio se encuentra dentro de una sesión de cotización de su día de la semana, con la misma prueba de sesión que utiliza el Tick Integrity Auditor.
El diario muestra el cálculo aritmético como una identidad por símbolo: findings_rows == dead_windows + outside_windows + trade_no_quote_windows + quote_no_trade_windows + outages. Una comprobación que no se haya medido se deja en blanco en el CSV y se muestra como «-» en el panel, nunca como «0».
Ejemplo medido
Servidor de demostración de Exness, hora del servidor = UTC, cinco símbolos en Market Watch, InpDays=35, el resto de parámetros con sus valores por defecto.
| símbolo | tabla h/semana | real h/semana | minutos inactivos / ventanas | min. fuera | min. de negociación ≠ min. de cotización | interrupciones | Interrupción más larga |
|---|---|---|---|---|---|---|---|
| XAUUSD | 114,82 | 114,82 | 0 / 0 | 0 | 0 | 1 | 150 min, lunes 7 de septiembre de 2026, 18:28 |
| EURUSD | 119,90 | 119,70 | 7 / 5 | 0 | 0 | 4 | 7 min, miércoles 2 de septiembre de 2026, 11:39 |
| BTCUSD | 168,00 | 168,00 | 0 / 0 | 0 | 0 | 1 | 13 min, domingo 13 de septiembre de 2026 a las 07:16 |
| GBPUSD | 119,90 | 119,62 | 9 / 6 | 0 | 0 | 5 | 9 min, jueves 1 de octubre de 2026, 21:03 |
| USDJPY | 119,90 | 119,57 | 14 / 5 | 0 | 0 | 9 | 10 min, domingo 4 de octubre de 2026 a las 21:05 |
El rollover es un hueco que la tabla no indica. En las 20 tardes de lunes a jueves del periodo, la última barra antes del rollover es a las 20:59. Después de eso, al menos un minuto entre las 21:00 y las 21:19 carece de barra en 16 noches para el EURUSD, en 19 para el GBPUSD y en 20 para el USDJPY, y faltan cuatro o más de esos minutos en 10, 10 y 14 de ellas, respectivamente. La duración varía de una noche a otra, por lo que se manifiesta de dos formas: como «minutos muertos», en los que la mayoría de las noches coinciden (USDJPY el lunes y el martes, de 21:00 a 21:05, con barras en como máximo una de las cinco fechas) y como interrupciones en las que solo algunas coinciden (GBPUSD en tres tardes, contadas a partir de las 21:03, cuando terminan sus «minutos muertos», de siete a nueve minutos cada una). Veintiocho de los 36 casos observados comienzan entre las 21:00 y las 21:15; dos de ellos corresponden a la apertura del domingo del USDJPY, donde la primera barra apareció 6 y 10 minutos después de las 21:05 declaradas.

Izquierda: porcentaje de las 20 tardes de lunes a jueves del periodo en las que el EURUSD presenta una barra M1, minuto a minuto desde las 20:50 hasta las 21:15; la tabla de la sesión indica que cada uno de estos minutos es de apertura. Derecha: el XAUUSD del lunes 7 de septiembre de 2026 comparado con los otros cuatro lunes del periodo; la franja sombreada corresponde a la ruptura que indica la tabla. Datos extraídos de las barras M1 leídas a través de la interfaz MCP de la terminal, no de la propia salida de la herramienta.
La tabla del oro es correcta, salvo en el día festivo. Las sesiones efectivas y declaradas del XAUUSD coinciden en todos los días laborables, al minuto: de 00:00 a 20:58 y de 22:00 a 24:00 de lunes a jueves, de 22:01 a 24:00 el domingo y de 00:00 a 20:58 el viernes. Su único hallazgo corresponde al 7 de septiembre de 2026, Día del Trabajo en EE. UU., sin ninguna barra desde las 18:28 hasta la interrupción a las 20:58, 150 minutos. La tabla no tiene forma de indicar «cierre anticipado hoy»; el historial sí lo hace.
Dos interrupciones diurnas afectaron a los tres pares de divisas a la vez. El miércoles 2 de septiembre de 2026 a partir de las 11:39 y el miércoles 9 de septiembre de 2026 a partir de las 10:37: siete minutos cada una, los mismos minutos en el EURUSD, el GBPUSD y el USDJPY, mientras que el XAUUSD y el BTCUSD tienen una barra en cada uno de esos minutos. Sea cual sea la causa, afectó a los tres pares de divisas a la vez y dejó al oro y al bitcoin al margen, y es el tipo de evento que una prueba retrospectiva de esos días reproduce sin decir nada.
Lo que está claro. Ningún símbolo tiene una sola barra en un minuto que su tabla indique como cerrado, y la tabla de operaciones coincide con la tabla de cotizaciones en los cinco, por lo que C2 y C3 no encontraron nada aquí. El BTCUSD, declarado 24/7, es realmente 24/7; su única interrupción es de 13 minutos el domingo 13 de septiembre de 2026 a partir de las 07:16.
Verificación independiente del informe
El informe se puede volver a calcular fuera de MetaTrader. El script utilizado para esta página solo lee lo que Python no puede obtener por sí mismo —la ventana, los tres umbrales, si la comprobación de operaciones estaba activada y las tablas de sesiones de los archivos de resumen y de sesiones—, extrae los tiempos de las barras M1 a través de la interfaz MCP de la terminal y vuelve a calcular las 22 columnas de resultados del resumen, las 10 080 celdas del mapa de cada símbolo, las sesiones efectivas y las filas de resultados según las definiciones anteriores. En la ejecución que aquí se muestra, coincide con la herramienta en todos los valores de los cinco símbolos. Se detectaron los dos errores introducidos manualmente en una copia de los archivos (un contador y una celda del mapa). Sus propias definiciones se comprobaron primero en dos semanas sintéticas elaboradas a mano.
Cómo utilizarlo
Adjunta el Asesor Experto a cualquier gráfico. Si InpSymbols está vacío, audita el símbolo del gráfico; * audita todo el Market Watch; una lista separada por comas audita esos símbolos. La auditoría se ejecuta una vez (o cada InpRefreshMinutes), imprime la comparación por día laborable y las interrupciones en el diario de los Expertos, dibuja la tabla en el gráfico y escribe los archivos CSV. Solo lee las tablas de historial y de sesión: no hay ninguna función de negociación en el código, ni DLL, ni acceso a la red. Con * solo se tienen en cuenta los símbolos que ya están en el «Market Watch»; un símbolo incluido en la lista que aún no esté allí es seleccionado por la terminal cuando se lee su historial, al igual que con cualquier solicitud de historial.
Lee primero las líneas del diario. Una línea como
USDJPY Lun tabla 00:00-24:00 | real 00:00-21:00 21:05-24:00 | inactivo 21:00-21:05 (1/5) | fuera ninguno
indica que los lunes la tabla declara todo el día, hay barras desde las 00:00 hasta las 21:00 y a partir de las 21:05, y cada minuto desde las 21:00 hasta las 21:05 tuvo una barra en, como máximo, uno de los cinco lunes. Utiliza las sesiones reales, no las declaradas, para los filtros de tiempo; amplía InpDays para ver más semanas y reduce InpOutageMinutes para ver interrupciones más cortas.
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 | 28 | Días completos del servidor del historial M1 que se van a auditar (que finalicen antes de hoy) |
| InpLivePct | 50 | Un minuto se considera real cuando hay barras en al menos este porcentaje de sus días laborables |
| InpDeadPct | 25 | Un minuto declarado se considera inactivo cuando hay barras en, como máximo, este porcentaje de ellos |
| InpOutageMinutes | 5 | Notificar interrupciones puntuales en los minutos declarados que normalmente están activos a partir de esta duración |
| InpCheckTrade | true | Comparar la tabla de sesiones de negociación con la tabla de sesiones de cotización |
| InpMaxExamples | 5 | Diario: interrupciones impresas por símbolo |
| InpWriteCsv | true | Escribir archivos CSV de resumen, sesiones, mapa, datos efectivos y 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) |
Los valores fuera de rango de las entradas de auditoría se limitan con una línea de registro cada uno (el panel no muestra ningún mensaje); el Asesor Experto nunca rechaza el inicio.
Archivos de salida
Todos los archivos se guardan en MQL5\Files\SessionRealityAuditor\, separados por punto y coma y con una fila de encabezado, con el nombre <símbolos>_<días>d_<id del gráfico>_…, de modo que dos gráficos nunca se sobrescriban entre sí.
Límites, explicados con claridad
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/code/78079
ATS Trade Management Library - break-even, trailing stop and partial closes for any EA
Gestiona las posiciones abiertas en un asesor experto: umbral de rentabilidad, stop dinámico, dos cierres parciales y un stop y un objetivo para las posiciones que no los tengan. Nunca abre una operación.
ATS Prop Rules Monitor - prop firm challenge scoreboard with the room left on every rule
Un panel con las reglas de un desafío de una empresa de inversión: pérdida diaria, pérdida máxima (estática o móvil), objetivo de beneficios, número mínimo de días de negociación y la regla del «mejor día» (consistencia). Para cada una de ellas, muestra cuánto se ha utilizado y cuánto margen queda, expresado en dinero. La opción «Una operación más» te indica el tamaño de lote máximo que aún mantiene el stop-out dentro del margen disponible hoy y del margen de pérdida máxima. Solo lectura: nunca abre, modifica ni cierra una operación. Los ajustes preestablecidos contienen valores típicos; las empresas cambian sus reglas, así que comprueba las tuyas y utiliza el ajuste preestablecido «Personalizado». Desarrollado sobre la base de la biblioteca ATS Risk Library (ATS_RiskLib.mqh, incluida).
CajasTF – Panel lateral integrado con múltiples marcos temporales para MT5
Minigráfico en el panel lateral en tiempo real con múltiples marcos temporales, combinación inteligente de colores, escala de precios independiente y temporizador de cuenta atrás de las velas.
Advanced Prop-firm Trade Panel based on S-R
Un panel de trading manual con un sistema de protección contra riesgos integrado, propio de una empresa de trading por cuenta propia, y un buscador oculto de niveles de soporte y resistencia para MetaTrader 5.