Trading Window and Spread Guard
- Utilidades
-
Kazuma Uezono
MQL5 / MQL4 / Pine Script v6 developer and active trader.
Seller on the MQL5 Market (indicators for MT4/MT5).
Services:
- TradingView Pine Script to MT5/MT4 conversion (bar-by-bar matching, with tester report)
- MT4 to MT5 migration - Versión: 1.1
- Activaciones: 5
Trading Window and Spread Guard es una utilidad para MetaTrader 5 que indica a sus propios Expert Advisors cuándo no abrir nuevas operaciones. Usted define hasta cinco ventanas de parada (día de la semana y hora; por ejemplo, el rollover diario, las horas nocturnas de poca liquidez o las horas en que los spreads de su bróker son amplios) y un límite de spread. Mientras una ventana está activa, o mientras el spread de un símbolo supera su límite, el guard levanta una bandera que sus EA pueden leer. De forma opcional, también puede cerrar las posiciones abiertas mientras las nuevas operaciones estaban bloqueadas.
Es una herramienta para pausar el trading, no una estrategia de trading. No busca buenos momentos para operar, no da señales de compra ni de venta y nunca abre una posición ni coloca una orden en una cuenta real o demo. No evita pérdidas: solo puede hacer que sus EA omitan nuevas entradas, o cerrar una nueva posición después de que se abrió. Qué horas evitar, y si opera y cómo, sigue siendo su decisión.
Con la configuración predeterminada no hay nada activo: sin ventanas, límite de spread DESACTIVADO, cierre DESACTIVADO. Hasta que complete los parámetros, el guard solo muestra su panel.
Importante: sus EA deben leer la bandera. Un EA que no comprueba la bandera sigue operando como antes. La comprobación son unas pocas líneas de código (abajo). Para un EA que no puede modificar, solo funciona la opción "Cerrar posiciones abiertas durante el bloqueo", y cierra la posición después de abrirse, lo que cuesta spread y comisión.
Funciones
- Hasta 5 ventanas de parada. Formatos: 12:00-12:30 (todos los días), Mon-Fri 23:50-01:15 (empieza en cada día indicado y puede cruzar la medianoche), Mon,Wed,Fri 08:00-08:30, Fri 21:00-Mon 01:00 (un solo tramo a través de varios días). Días en inglés (Mon o Monday, sin importar mayúsculas) o en japonés; All = todos los días. El final puede ser 24:00. Las ventanas que se tocan o se solapan se unen.
- Horas de las ventanas en hora del servidor (predeterminado) o en la hora de este ordenador.
- Límite de spread en puntos: un valor para todos los símbolos, más valores opcionales por símbolo (por ejemplo GOLD=50,US30=300).
- Símbolos: el símbolo del gráfico (predeterminado), una lista, o * = todos los símbolos de Observación del mercado (hasta 100).
- Banderas para sus EA como variables globales del terminal, con funciones de lectura listas para usar (TWG_Reader.mqh).
- Opcional: cerrar las posiciones abiertas durante el bloqueo, solo para los símbolos y números mágicos que usted elija. Las posiciones que ya existían cuando arrancó el guard nunca se tocan.
- Panel: estado (OK o BLOCKED y el motivo), próxima ventana con cuenta atrás, sus ventanas, spread y límite, ajustes de cierre, nombres de las banderas y el último mensaje. Inglés o japonés (automático según el idioma del terminal). Botón para plegar.
- Alertas emergentes y notificaciones push opcionales cuando una parada empieza o termina, un spread se vuelve demasiado amplio o se cierra una posición.
Parámetros principales
- Stop windows: base horaria de las ventanas (hora del servidor / hora del ordenador), Window 1 a Window 5 (vacío = DESACTIVADO).
- Spread limit: ACTIVADO/DESACTIVADO (DESACTIVADO por defecto), spread máximo en puntos (30 por defecto), máximo por símbolo.
- Symbols and positions: símbolos (vacío = este gráfico, * = todos los de Observación del mercado, o una lista), cerrar posiciones abiertas durante el bloqueo (DESACTIVADO por defecto), cerrar solo estos números mágicos (vacío = todos, 0 = operaciones manuales).
- Flags: prefijo del nombre de las variables globales ("TWG" por defecto).
- Alerts (emergente, push), Panel (mostrar, idioma, esquina, desplazamientos, tamaño de fuente), deslizamiento máximo al cerrar, demostración en el probador de estrategias.
- 23 parámetros en 7 grupos.
Cómo funciona
- El guard comprueba cada 250 ms y escribe las banderas aproximadamente una vez por segundo, por lo que su EA ve un cambio unos 1 a 2 segundos después.
- Banderas (variables globales del terminal; los valores son horas UTC en segundos; "TWG" es el prefijo predeterminado):
- TWG.TIME: fin de la ventana de parada actual, 0 fuera de las ventanas.
- TWG.SPR.<símbolo> (por ejemplo TWG.SPR.EURUSD): mayor que la hora actual mientras el spread de ese símbolo supera el límite. Una bandera por cada símbolo vigilado.
- TWG.NEXT: inicio de la próxima ventana de parada. TWG.HB: última actualización (indica que el guard está funcionando).
- Una bandera está ACTIVADA mientras su valor es mayor que TimeGMT().
- Comprobación básica para su EA (la misma lógica que TWG_Reader.mqh con el prefijo predeterminado):
bool GuardBlocks(const string sym)
{
if(MQLInfoInteger(MQL_TESTER)) return false;
double now = (double)TimeGMT();
if(GlobalVariableGet("TWG.HB") < now - 30) return false; // guard not running
return GlobalVariableGet("TWG.TIME") > now || GlobalVariableGet("TWG.SPR." + sym) > now;
}
Antes de cada nueva entrada: if(GuardBlocks(_Symbol)) return;
- TWG_Reader.mqh añade TWG_IsBlocked, TWG_TimeBlocked, TWG_SpreadBlocked, TWG_SecondsLeft y TWG_GuardRunning. La descarga del Market contiene solo el EA; el texto completo de este archivo está publicado en los comentarios de este producto. En el probador de estrategias estas funciones siempre responden "no bloqueado", así que sus backtests no cambian.
- El día de la semana es el día en que empieza la ventana. "Mon-Fri 23:50-01:15" crea cinco ventanas que empiezan el lunes 23:50 … el viernes 23:50 y terminan a las 01:15 del día siguiente. No cubre el lunes 00:00–01:15, porque esa parte empezaría el domingo. Para cubrir el fin de semana y la mañana del lunes, añada una segunda ventana como Fri 21:00-Mon 01:15. (Con Fri 21:00-Mon 01:00, el lunes 01:00–01:15 queda abierto.)
- "Abierta durante el bloqueo" significa: la hora de apertura de la posición está dentro de una ventana de parada, o el spread de su símbolo superaba el límite en ese momento (se comprueba en posiciones de hasta 10 minutos).
- El cierre se envía en cuanto la nueva operación (deal) aparece en el terminal.
- Puede ejecutar el guard en varios gráficos con el mismo prefijo (por ejemplo, para vigilar distintos símbolos). Las banderas conservan entonces el valor más largo. Use prefijos diferentes si grupos de EA necesitan reglas diferentes.
Notas y limitaciones
- No es una garantía. El guard no bloquea las órdenes por sí mismo. Solo los EA que comprueban la bandera omiten nuevas entradas.
- Quitar el último guard levanta la parada. Cuando lo quita o cierra su gráfico, borra sus banderas al instante. Si el terminal se detiene de forma inesperada, las funciones de lectura consideran el guard detenido después de 30 segundos. Por defecto, entonces permiten operar. Si su EA debe esperar cuando el guard no está funcionando, llame a TWG_IsBlocked(_Symbol, "TWG", true) (blockIfGuardStopped = true).
- Las banderas llevan un retraso de unos 1 a 2 segundos. Una orden enviada en el primer segundo de una ventana o de un pico de spread aún puede ejecutarse. Los picos de spread más cortos que una comprobación pueden pasar desapercibidos.
- Las órdenes pendientes no se eliminan ni se modifican. Una orden pendiente que se ejecuta durante una parada abre una nueva posición, que solo se cierra si la opción de cierre está ACTIVADA y la posición está dentro del alcance.
- En una cuenta netting, el volumen añadido a una posición abierta antes no es una nueva posición y no se cierra.
- Con el filtro de números mágicos vacío, la opción de cierre también cierra las operaciones que usted abre a mano dentro del alcance (magic 0 = operaciones manuales). Cada cierre cuesta spread y comisión y puede terminar en pérdida. El guard no puede impedir que otro EA envíe órdenes; si un EA sigue abriendo operaciones durante una parada, cada una se cierra.
- Las banderas de spread existen solo para los símbolos vigilados. Si su EA opera otros símbolos, añádalos a la lista o use *.
- Las horas de las ventanas siguen el reloj que elija. La hora del servidor cambia con el horario de verano de su bróker; la hora del ordenador sigue a este PC.
- Las variables globales pertenecen a un solo terminal. Ejecute el guard en el mismo terminal MetaTrader 5 que sus EA.
- El guard solo funciona mientras MetaTrader 5 está abierto y conectado. Para cerrar también se necesita Algo Trading ACTIVADO (botón de la barra de herramientas) y permitido en los ajustes del EA.
- Probador de estrategias: las banderas se guardan solo en memoria. Con el parámetro "Tester only: demo window and small demo positions" ACTIVADO (predeterminado), el guard abre pequeñas posiciones de demostración (lote mínimo, magic 73190): una antes de una ventana, que el guard deja abierta, y otra dentro, que el guard cierra al instante (la demostración limpia sus posiciones unos minutos después). Si no hay ninguna ventana definida, usa una ventana de demostración (30 minutos o 2 barras, como máximo una vez al día). El informe del probador muestra solo esta demostración y no es un resultado de trading; puede mostrar una pequeña pérdida. Con depósitos muy pequeños (por ejemplo 10 USD) puede no haber operaciones de demostración. La demostración nunca se ejecuta en una cuenta real o demo.
Compatibilidad y soporte
- Solo MetaTrader 5 (cuentas hedging y netting). La versión para MetaTrader 4 se vende por separado. Colóquelo en un gráfico; añada más gráficos solo si los necesita.
- Sin DLL, sin internet, sin servidor externo.
- Pruebe primero todos los ajustes en una cuenta demo.
- Soporte por mensajes de MQL5, respuesta en 3 días hábiles: instalación, ajustes, informes de errores y cómo llamar a las funciones de lectura. No podemos aconsejar qué horas o spreads evitar, dar opiniones de mercado o decisiones de trading, ni modificar su EA por usted.
- No se promete ni se insinúa ningún resultado de su trading.
