TriZone Semafor MT4
- Indicadores
-
Ahmed Hamed Hamed Eadwan
SPANISH TRANSLATION — ESPAÑOL
===============================
TITLE:
Desarrollador MQL5 y Trader | Fundador de R protocols
ABOUT:
Hola, soy Ahmed — un trader y desarrollador MQL5 basado en
los Emiratos Árabes Unidos, y fundador de R protocols. - Versión: 1.0
TriZone Semafor — ZigZag de señales exclusivas de 3 niveles (Autónomo — ZigZag integrado, sin indicadores externos)
Si alguna vez has mirado un gráfico lleno de flechas ZigZag preguntándote cuáles importan realmente — este indicador fue creado para esa frustración.
TriZone Semafor ejecuta tres algoritmos ZigZag independientes simultáneamente: Rápido (Periodo 5), Medio (Periodo 13) y Lento (Periodo 34). Cuando detectan pivotes en la misma vela, solo la señal más significativa sobrevive. El Nivel 3 siempre prevalece sobre el Nivel 2. El Nivel 2 siempre prevalece sobre el Nivel 1. Una flecha limpia por vela por dirección — sin superposición, sin doble conteo.
Por qué tres niveles en lugar de uno
Un solo ZigZag trata todos los movimientos por igual. El mismo indicador marca un retroceso de dos velas y una reversión de tendencia mayor con flechas idénticas. TriZone clasifica cada pivote por su importancia para que leas la jerarquía del gráfico de un vistazo.
- Nivel 1 — Rápido: Pequeños retrocesos y pivotes menores. La estructura debajo de la estructura.
- Nivel 2 — Medio: Movimientos intradía y reacciones significativas. Los pivotes a los que hace referencia tu diario de trading.
- Nivel 3 — Lento: Giros estructurales mayores. Los puntos donde la continuación de la tendencia está realmente en cuestión.
Cada nivel tiene su propia forma y color de flecha para que veas la jerarquía al instante, sin consultar una leyenda.
Sistema de señales exclusivas
Cada vela pasa por una regla: si un nivel superior reclama un pivote en esa vela, todas las reclamaciones de niveles inferiores se eliminan — no se ocultan, se eliminan. Esto ocurre dentro del buffer del indicador antes de que algo llegue al gráfico. El gráfico refleja el estado real, no una superposición en capas.
Modo anti-repaint
Con AntiRepaint = ON, una señal solo se dibuja después de que haya pasado el número configurado de barras de confirmación. La flecha que ves ya ha pasado su ventana de estabilidad y no se moverá. El indicador muestra el modo actual y la profundidad de confirmación en la barra de título del gráfico — transparencia total sobre lo que estás leyendo.
Con AntiRepaint = OFF, las señales aparecen inmediatamente en la vela en formación. Útil para referencia visual. No recomendado para lógica automatizada.
Sistema de alertas
Las alertas se ponen en cola durante el cálculo y se entregan solo después de que el pase de exclusividad confirme que la señal sobrevivió. Nunca recibirás un popup por una señal de Nivel 1 anulada por el Nivel 3 un momento después. Un pivote confirmado — una alerta. Configurable por nivel de forma independiente.
Qué incluye
- Tres niveles de detección ZigZag con parámetros totalmente independientes
- Prioridad de señal exclusiva a nivel de buffer — el nivel más alto gana por vela
- Alertas popup solo en pivotes confirmados — sin alertas fantasma
- Modo anti-repaint con barras de confirmación configurables por nivel
- Cualquier símbolo, cualquier temporalidad — MetaTrader 4
- Archivo único — cero dependencias externas, sin DLL, sin includes personalizados
Punto de partida recomendado
Abre H1 o H4 con los parámetros predeterminados. Las profundidades por defecto 5 / 13 / 34 siguen la secuencia Fibonacci estándar — un ajuste natural para la mayoría de instrumentos y temporalidades.
Los pivotes de Nivel 3 son tu referencia estructural. Los de Nivel 2 son tus puntos de referencia intradía. El Nivel 1 muestra la estructura menor intermedia. Ajusta la profundidad (Period) y las barras de confirmación (ConfirmBars) para adaptarlas a tu estilo.
Compatibilidad
MetaTrader 4 — cualquier broker, cualquier símbolo, cualquier temporalidad. Sin librerías externas. Sin importaciones DLL. Archivo .ex4 único, totalmente autónomo.
Referencia iCustom — TriZone_Semafor
Buffers de salida
La exclusividad ya está aplicada por el indicador.
Solo el nivel activo más alto está no vacío por vela.
EMPTY_VALUE = sin pivote en esa barra/nivel.
Con AntiRepaint ON, leer en shift >= max(ConfirmBars1, ConfirmBars2, ConfirmBars3) — predeterminado: shift >= 4.
| Buffer | Índice | Señal | Contenido |
|---|---|---|---|
| BufLow1 | 0 | BUY | Precio pivote Bajo Nivel 1 — ZigZag Rápido |
| BufHigh1 | 1 | SELL | Precio pivote Alto Nivel 1 — ZigZag Rápido |
| BufLow2 | 2 | BUY | Precio pivote Bajo Nivel 2 — ZigZag Medio |
| BufHigh2 | 3 | SELL | Precio pivote Alto Nivel 2 — ZigZag Medio |
| BufLow3 | 4 | BUY | Precio pivote Bajo Nivel 3 — ZigZag Lento |
| BufHigh3 | 5 | SELL | Precio pivote Alto Nivel 3 — ZigZag Lento |
Parámetros de entrada
# = posición en la llamada iCustom() (basado en 0, después de Symbol / Period / FileName)
En MT4, TODOS los parámetros deben pasarse en orden. No puedes omitir parámetros intermedios.
Los parámetros finales pueden omitirse (se usan los predeterminados).
| # | Nombre | Tipo | Predet. | Rango | Descripción |
|---|---|---|---|---|---|
| NIVEL 1 — ZigZag Rápido | |||||
| 0 | ColorL1Low | color | clrAqua | color | Color de flecha para Bajos Nivel 1 |
| 1 | ColorL1High | color | clrMagenta | color | Color de flecha para Altos Nivel 1 |
| 2 | Period1 | int | 5 | 2-500 | Profundidad de pivote (barras) |
| 3 | Deviation1 | int | 1 | 1-100000 | Desviación mínima en puntos |
| 4 | Backstep1 | int | 3 | 1-(P-1) | Barras mín entre pivotes consecutivos |
| 5 | HighSymbol1 | int | 159 | Wingdings | Flecha para Altos (159=punto, 108=círculo, 116=diamante) |
| 6 | LowSymbol1 | int | 159 | Wingdings | Flecha para Bajos |
| 7 | ConfirmBars1 | int | 2 | 1-50 | Barras de confirmación |
| NIVEL 2 — ZigZag Medio | |||||
| 8 | ColorL2Low | color | clrDodgerBlue | color | Color de flecha para Bajos Nivel 2 |
| 9 | ColorL2High | color | clrOrchid | color | Color de flecha para Altos Nivel 2 |
| 10 | Period2 | int | 13 | 2-500 | Profundidad de pivote |
| 11 | Deviation2 | int | 8 | 1-100000 | Desviación mínima en puntos |
| 12 | Backstep2 | int | 5 | 1-(P-1) | Barras mín entre pivotes consecutivos |
| 13 | HighSymbol2 | int | 108 | Wingdings | Flecha para Altos |
| 14 | LowSymbol2 | int | 108 | Wingdings | Flecha para Bajos |
| 15 | ConfirmBars2 | int | 3 | 1-50 | Barras de confirmación |
| NIVEL 3 — ZigZag Lento | |||||
| 16 | ColorL3Low | color | clrGold | color | Color de flecha para Bajos Nivel 3 |
| 17 | ColorL3High | color | clrOrangeRed | color | Color de flecha para Altos Nivel 3 |
| 18 | Period3 | int | 34 | 2-500 | Profundidad de pivote |
| 19 | Deviation3 | int | 21 | 1-100000 | Desviación mínima en puntos |
| 20 | Backstep3 | int | 12 | 1-(P-1) | Barras mín entre pivotes consecutivos |
| 21 | HighSymbol3 | int | 116 | Wingdings | Flecha para Altos (116=diamante) |
| 22 | LowSymbol3 | int | 116 | Wingdings | Flecha para Bajos |
| 23 | ConfirmBars3 | int | 4 | 1-50 | Barras de confirmación |
| GESTIÓN DE INSTANCIA | |||||
| 24 | InstanceID | string | "A" | cualquiera | Etiqueta única — debe diferir de cualquier copia visible |
| 25 | DebugMode | ENUM_ONOFF | OFF (0) | 0 / 1 | Imprimir diagnósticos en el Journal |
| 26 | HeadlessMode | ENUM_ONOFF | OFF (0) | 0 / 1 | Establecer ON al usar via iCustom — suprime UI y alertas |
| ANTI-REPAINT | |||||
| 27 | AntiRepaint | ENUM_ONOFF | ON (1) | 0 / 1 | ON = solo señales confirmadas — requerido para EA estable |
| 28 | SafeArrows | ENUM_ONOFF | OFF (0) | 0 / 1 | ON = flechas usan shift retroactivo seguro (más estricto) |
| SISTEMA DE ALERTAS | |||||
| 29 | AlertMode | ENUM_ALERT_MODE | 1 (Popup) | 0-3 | 0=Ninguna 1=Popup 2=Push 3=Todo — establecer 0 en EA |
| 30 | AlertLevel1 | ENUM_ONOFF | OFF (0) | 0 / 1 | Alerta en pivotes Nivel 1 |
| 31 | AlertLevel2 | ENUM_ONOFF | ON (1) | 0 / 1 | Alerta en pivotes Nivel 2 |
| 32 | AlertLevel3 | ENUM_ONOFF | ON (1) | 0 / 1 | Alerta en pivotes Nivel 3 |
Total: 33 parámetros (índices 0-32)
Ejemplo de código iCustom
Nombre del archivo: "TriZone_Semafor" (sin .ex4) — Siempre establecer HeadlessMode = true dentro de cualquier EA.
En MT4, iCustom devuelve un double directamente para un índice de buffer y shift específicos.
Sin gestión de handles, sin CopyBuffer, sin IndicatorRelease.
// Firma de iCustom en MT4:
// double iCustom(symbol, timeframe, "name", params..., bufferIndex, shift)
// Envolvemos en una función helper para código EA más limpio.
double TZS_GetBuffer(int bufferIndex, int shift)
{
return iCustom(
Symbol(), // símbolo
Period(), // temporalidad
"TriZone_Semafor", // nombre exacto, sin .ex4
// ---- Nivel 1: Rápido ----
clrAqua, // #0 ColorL1Low
clrMagenta, // #1 ColorL1High
5, // #2 Period1
1, // #3 Deviation1
3, // #4 Backstep1
159, // #5 HighSymbol1 (punto)
159, // #6 LowSymbol1 (punto)
2, // #7 ConfirmBars1
// ---- Nivel 2: Medio ----
clrDodgerBlue, // #8 ColorL2Low
clrOrchid, // #9 ColorL2High
13, // #10 Period2
8, // #11 Deviation2
5, // #12 Backstep2
108, // #13 HighSymbol2 (círculo)
108, // #14 LowSymbol2 (círculo)
3, // #15 ConfirmBars2
// ---- Nivel 3: Lento ----
clrGold, // #16 ColorL3Low
clrOrangeRed, // #17 ColorL3High
34, // #18 Period3
21, // #19 Deviation3
12, // #20 Backstep3
116, // #21 HighSymbol3 (diamante)
116, // #22 LowSymbol3 (diamante)
4, // #23 ConfirmBars3
// ---- Instancia ----
"EA1", // #24 InstanceID — debe diferir de copia en gráfico
false, // #25 DebugMode = OFF
true, // #26 HeadlessMode = ON <- requerido para EA
// ---- Anti-Repaint ----
true, // #27 AntiRepaint = ON (señales EA estables)
false, // #28 SafeArrows = OFF
// ---- Alertas: todas OFF en EA ----
0, // #29 AlertMode = ALERT_NONE
false, // #30 AlertLevel1
false, // #31 AlertLevel2
false, // #32 AlertLevel3
// ---- Buffer + Shift ----
bufferIndex, // índice de buffer (0-5)
shift // shift de barra
);
}
// Lectura de buffers en shift confirmado
void OnTick()
{
int safeShift = 4;
double lo1 = TZS_GetBuffer(0, safeShift); // BufLow1 — Nivel 1 BUY
double hi1 = TZS_GetBuffer(1, safeShift); // BufHigh1 — Nivel 1 SELL
double lo2 = TZS_GetBuffer(2, safeShift); // BufLow2 — Nivel 2 BUY
double hi2 = TZS_GetBuffer(3, safeShift); // BufHigh2 — Nivel 2 SELL
double lo3 = TZS_GetBuffer(4, safeShift); // BufLow3 — Nivel 3 BUY
double hi3 = TZS_GetBuffer(5, safeShift); // BufHigh3 — Nivel 3 SELL
double ev = EMPTY_VALUE;
int buyLevel = (lo3 != ev) ? 3 : (lo2 != ev) ? 2 : (lo1 != ev) ? 1 : 0;
int sellLevel = (hi3 != ev) ? 3 : (hi2 != ev) ? 2 : (hi1 != ev) ? 1 : 0;
if(buyLevel > 0 && sellLevel == 0)
PrintFormat("BUY signal | Level %d | shift %d", buyLevel, safeShift);
else if(sellLevel > 0 && buyLevel == 0)
PrintFormat("SELL signal | Level %d | shift %d", sellLevel, safeShift);
}
// OnDeinit — Sin limpieza de handle en MT4
void OnDeinit(const int reason)
{
// MT4 no usa handles de indicador — nada que liberar.
// Las llamadas iCustom son stateless por invocación.
}
Errores comunes
La causa más común de INIT_PARAMETERS_INCORRECT: InstanceID ya está en uso por una copia en gráfico del mismo indicador. Usa una cadena única como "EA1", "EA2" ...
| Error | Síntoma | Solución |
|---|---|---|
| Mismo InstanceID que copia en gráfico | INIT_PARAMETERS_INCORRECT | ID único: "EA1", "EA2" ... |
| HeadlessMode = false en EA | Indicador dibuja objetos + alertas | Establecer parámetro #26 a true |
| Leer shift = 0 con AntiRepaint | EMPTY_VALUE siempre — barra no confirmada | Leer en shift >= 4 |
| AlertMode != 0 en EA | Alert() bloquea el Tester | Establecer parámetro #29 a 0 |
| Nombre de archivo incorrecto | Devuelve 0 / EMPTY_VALUE | Usar nombre exacto: "TriZone_Semafor" |
| Parámetros de color omitidos | Valores de buffer incorrectos o 0 | Pasar TODOS los 33 parámetros en orden |
| Orden de parámetros incorrecto | Señales incorrectas o ninguna | Seguir la tabla exactamente (0-32) |
