Mira cómo descargar robots gratis
¡Búscanos en Facebook!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Asesores Expertos

Session Reality Auditor - Asesor Experto para MetaTrader 5

Quoc Dat Quach
Quoc Dat Quach
Software engineer with 8 years in fintech and mobile, writing MQL4/MQL5 since 2017. I build Expert Advisors, indicators, trade and risk-management panels and utilities for MT4/MT5, and I trade forex and gold on MT5 myself.
| Spanish English Русский 中文 Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Visualizaciones:
10
Ranking:
(1)
Publicado:
MQL5 Freelance ¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

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.

sra-panel

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.

  • Tabla efectiva. Un minuto se considera real cuando existen barras en al menos el InpLivePct por ciento de sus fechas (por defecto, 50). Los minutos reales consecutivos de un día de la semana forman las sesiones efectivas que se muestran junto a las declaradas.
  • Minutos declarados «inactivos» (C1). Un minuto declarado con barras en como máximo el InpDeadPct por ciento de sus fechas (por defecto, 25). Cada secuencia de minutos inactivos consecutivos en un día de la semana constituye un hallazgo.
  • Barras fuera de la tabla (C2). Un minuto que la tabla considera cerrado y que tiene una barra en al menos una fecha. Cada racha constituye un hallazgo, con el número de barras que contiene.
  • Tabla de negociación frente a tabla de cotización (C3). Minutos que se encuentran en una sesión de negociación pero no en ninguna sesión de cotización (órdenes aceptadas, sin precio previsto), y minutos que se encuentran en una sesión de cotización pero no en ninguna sesión de negociación (precios mostrados, órdenes rechazadas). Cada racha constituye un hallazgo. InpCheckTrade=false desactiva la comprobación.
  • Interrupciones puntuales (C4). En la línea temporal real, minuto a minuto: un minuto declarado que no está inactivo y no tiene barra. Las secuencias de dichos minutos, que pueden traspasar la medianoche, de al menos InpOutageMinutes minutos (por defecto 5) son interrupciones; cada una de ellas constituye un hallazgo con su fecha. Los minutos inactivos se excluyen a propósito: un minuto que está vacío la mayor parte del tiempo es un patrón y pertenece a C1; un minuto vacío que normalmente está ocupado es un evento y pertenece a esta categoría.

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.

sra-real-vs-tabla

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í.

  • …_<símbolo>_summary.csv — una fila: la ventana, los umbrales y cada contador anterior.
  • …_<símbolo>_sessions.csv — todos los registros de cotizaciones y sesiones de negociación de la tabla.
  • …_<símbolo>_map.csv — 10 080 filas, una por cada minuto de la semana: cotización declarada, operación declarada, coincidencias, fechas.
  • …_<símbolo>_effective.csv — las sesiones efectivas, una fila por ventana.
  • …_findings.csv — una fila por resultado de cada símbolo, con día de la semana, inicio, fin, duración y valor.

Límites, explicados con claridad

  • La presencia se lee a partir de las barras M1: un minuto con una barra cuenta como cotizado. Una barra existe cuando el minuto tiene al menos un tick, por lo que un silencio de 30 segundos dentro de un minuto no se tiene en cuenta aquí; para silencios en segundos, utiliza una herramienta de ticks.
  • La herramienta lee la tabla de sesiones tal y como está ahora. Si el bróker ha modificado su horario dentro de la ventana, los días anteriores se evalúan según la nueva tabla.
  • Las fechas se cuentan según el calendario, por lo que un día festivo reduce en una fecha la proporción de cada minuto de los días laborables de esa semana. Esto es intencionado: es exactamente lo que la tabla no indicaba.
  • Se utiliza siempre la hora del servidor. Un cambio de horario de verano dentro de la ventana desplaza el cambio de día en una hora para parte de las fechas, y las proporciones de esos minutos se reducen en consecuencia.
  • La profundidad de la auditoría está limitada por el historial M1 que la terminal mantiene para el símbolo (la configuración de barras máximas por gráfico); un historial más corto reduce la ventana, con una sola línea de registro.
  • Las cifras anteriores corresponden a un servidor de demostración durante cinco semanas. Describen ese feed, no las cuentas reales del bróker ni ningún otro servidor.

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 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 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 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 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.