TriZone Semafor MT4
- Indicadores
-
Ahmed Hamed Hamed Eadwan
PORTUGUESE TRANSLATION — PORTUGUÊS
====================================
TITLE:
Desenvolvedor MQL5 e Trader | Fundador da R protocols
ABOUT:
Olá, sou Ahmed — um trader e desenvolvedor MQL5 baseado nos
Emirados Árabes Unidos, e fundador da R protocols. - Versão: 1.0
TriZone Semafor — ZigZag de sinais exclusivos de 3 níveis (Autônomo — ZigZag integrado, sem indicadores externos)
Se você já olhou para um gráfico coberto de setas ZigZag e se perguntou quais realmente importam — este indicador foi criado para essa frustração.
TriZone Semafor executa três algoritmos ZigZag independentes simultaneamente: Rápido (Período 5), Médio (Período 13) e Lento (Período 34). Quando detectam pivôs na mesma vela, apenas o sinal mais significativo sobrevive. Nível 3 sempre prevalece sobre Nível 2. Nível 2 sempre prevalece sobre Nível 1. Uma seta limpa por vela por direção — sem sobreposição, sem contagem dupla.
Por que três níveis em vez de um
Um único ZigZag trata todos os movimentos igualmente. O mesmo indicador marca um pullback de duas velas e uma reversão de tendência maior com setas idênticas. TriZone classifica cada pivô por importância para que você leia a hierarquia do gráfico de relance.
- Nível 1 — Rápido: Pequenos pullbacks e pivôs menores. A estrutura sob a estrutura.
- Nível 2 — Médio: Swings intradia e reações significativas. Os pivôs aos quais seu diário de trading faz referência.
- Nível 3 — Lento: Viradas estruturais maiores. Os pontos onde a continuidade da tendência está genuinamente em questão.
Cada nível tem sua própria forma e cor de seta para que você veja a hierarquia instantaneamente, sem consultar uma legenda.
Sistema de sinais exclusivos
Cada vela passa por uma regra: se um nível superior reivindica um pivô nessa vela, todas as reivindicações de níveis inferiores são removidas — não ocultas, removidas. Isso acontece dentro do buffer do indicador antes de qualquer coisa chegar ao gráfico. O gráfico reflete o estado real, não uma sobreposição em camadas.
Modo anti-repaint
Com AntiRepaint = ON, um sinal só é desenhado após o número configurado de barras de confirmação ter passado. A seta que você vê já passou por sua janela de estabilidade e não se moverá. O indicador mostra o modo atual e a profundidade de confirmação na barra de título do gráfico — transparência total sobre o que você está lendo.
Com AntiRepaint = OFF, os sinais aparecem imediatamente na vela em formação. Útil para referência visual. Não recomendado para lógica automatizada.
Sistema de alertas
Alertas são enfileirados durante o cálculo e entregues apenas após o passe de exclusividade confirmar que o sinal sobreviveu. Você nunca receberá um popup por um sinal de Nível 1 substituído pelo Nível 3 um momento depois. Um pivô confirmado — um alerta. Configurável por nível independentemente.
O que está incluído
- Três níveis de detecção ZigZag com parâmetros totalmente independentes
- Prioridade de sinal exclusiva em nível de buffer — o nível mais alto vence por vela
- Alertas popup apenas em pivôs confirmados — sem alertas fantasmas
- Modo anti-repaint com barras de confirmação configuráveis por nível
- Qualquer símbolo, qualquer timeframe — MetaTrader 4
- Arquivo único — zero dependências externas, sem DLL, sem includes personalizados
Ponto de partida recomendado
Abra H1 ou H4 com os parâmetros padrão. As profundidades padrão 5 / 13 / 34 seguem a sequência Fibonacci padrão — um ajuste natural para a maioria dos instrumentos e timeframes.
Pivôs de Nível 3 são sua referência estrutural. Nível 2 são seus pontos de referência intradia. Nível 1 mostra a estrutura menor intermediária. Ajuste profundidade (Period) e barras de confirmação (ConfirmBars) ao seu estilo.
Compatibilidade
MetaTrader 4 — qualquer broker, qualquer símbolo, qualquer timeframe. Sem bibliotecas externas. Sem importações DLL. Arquivo .ex4 único, totalmente autônomo.
Referência iCustom — TriZone_Semafor
Buffers de saída
A exclusividade já é aplicada pelo indicador.
Apenas o nível ativo mais alto não está vazio por vela.
EMPTY_VALUE = sem pivô naquela barra/nível.
Com AntiRepaint ON, leia em shift >= max(ConfirmBars1, ConfirmBars2, ConfirmBars3) — padrão: shift >= 4.
| Buffer | Índice | Sinal | Conteúdo |
|---|---|---|---|
| BufLow1 | 0 | BUY | Preço pivô Baixo Nível 1 — ZigZag Rápido |
| BufHigh1 | 1 | SELL | Preço pivô Alto Nível 1 — ZigZag Rápido |
| BufLow2 | 2 | BUY | Preço pivô Baixo Nível 2 — ZigZag Médio |
| BufHigh2 | 3 | SELL | Preço pivô Alto Nível 2 — ZigZag Médio |
| BufLow3 | 4 | BUY | Preço pivô Baixo Nível 3 — ZigZag Lento |
| BufHigh3 | 5 | SELL | Preço pivô Alto Nível 3 — ZigZag Lento |
Parâmetros de entrada
# = posição na chamada iCustom() (0-based, após Symbol / Period / FileName)
Em MT4, TODOS os parâmetros devem ser passados em ordem. Não é possível pular parâmetros intermediários.
Parâmetros finais podem ser omitidos (valores padrão usados).
| # | Nome | Tipo | Padrão | Faixa | Descrição |
|---|---|---|---|---|---|
| NÍVEL 1 — ZigZag Rápido | |||||
| 0 | ColorL1Low | color | clrAqua | color | Cor da seta Baixos Nível 1 |
| 1 | ColorL1High | color | clrMagenta | color | Cor da seta Altos Nível 1 |
| 2 | Period1 | int | 5 | 2-500 | Profundidade de pivô (barras) |
| 3 | Deviation1 | int | 1 | 1-100000 | Desvio mínimo em pontos |
| 4 | Backstep1 | int | 3 | 1-(P-1) | Barras mín entre pivôs consecutivos |
| 5 | HighSymbol1 | int | 159 | Wingdings | Seta Altos (159=ponto, 108=círculo, 116=diamante) |
| 6 | LowSymbol1 | int | 159 | Wingdings | Seta Baixos |
| 7 | ConfirmBars1 | int | 2 | 1-50 | Barras de confirmação |
| NÍVEL 2 — ZigZag Médio | |||||
| 8 | ColorL2Low | color | clrDodgerBlue | color | Cor Baixos Nível 2 |
| 9 | ColorL2High | color | clrOrchid | color | Cor Altos Nível 2 |
| 10 | Period2 | int | 13 | 2-500 | Profundidade |
| 11 | Deviation2 | int | 8 | 1-100000 | Desvio mínimo |
| 12 | Backstep2 | int | 5 | 1-(P-1) | Barras mín |
| 13 | HighSymbol2 | int | 108 | Wingdings | Seta Altos |
| 14 | LowSymbol2 | int | 108 | Wingdings | Seta Baixos |
| 15 | ConfirmBars2 | int | 3 | 1-50 | Confirmação |
| NÍVEL 3 — ZigZag Lento | |||||
| 16 | ColorL3Low | color | clrGold | color | Cor Baixos Nível 3 |
| 17 | ColorL3High | color | clrOrangeRed | color | Cor Altos Nível 3 |
| 18 | Period3 | int | 34 | 2-500 | Profundidade |
| 19 | Deviation3 | int | 21 | 1-100000 | Desvio mínimo |
| 20 | Backstep3 | int | 12 | 1-(P-1) | Barras mín |
| 21 | HighSymbol3 | int | 116 | Wingdings | Seta Altos (116=diamante) |
| 22 | LowSymbol3 | int | 116 | Wingdings | Seta Baixos |
| 23 | ConfirmBars3 | int | 4 | 1-50 | Confirmação |
| GESTãO DE INSTâNCIA | |||||
| 24 | InstanceID | string | "A" | qualquer | Tag único |
| 25 | DebugMode | ENUM_ONOFF | OFF (0) | 0 / 1 | Diagnósticos no Journal |
| 26 | HeadlessMode | ENUM_ONOFF | OFF (0) | 0 / 1 | ON para iCustom — suprime UI |
| ANTI-REPAINT | |||||
| 27 | AntiRepaint | ENUM_ONOFF | ON (1) | 0 / 1 | Sinais confirmados apenas |
| 28 | SafeArrows | ENUM_ONOFF | OFF (0) | 0 / 1 | Shift retroativo seguro |
| SISTEMA DE ALERTAS | |||||
| 29 | AlertMode | ENUM_ALERT_MODE | 1 (Popup) | 0-3 | 0=Nenhum 1=Popup 2=Push 3=Todos |
| 30 | AlertLevel1 | ENUM_ONOFF | OFF (0) | 0 / 1 | Alerta Nível 1 |
| 31 | AlertLevel2 | ENUM_ONOFF | ON (1) | 0 / 1 | Alerta Nível 2 |
| 32 | AlertLevel3 | ENUM_ONOFF | ON (1) | 0 / 1 | Alerta Nível 3 |
Total: 33 parâmetros (0-32)
Exemplo de código iCustom
Nome do arquivo: "TriZone_Semafor" (sem .ex4) — HeadlessMode = true no EA.
Em MT4, iCustom retorna double diretamente. Sem handle, CopyBuffer, IndicatorRelease.
double TZS_GetBuffer(int bufferIndex, int shift)
{
return iCustom(Symbol(), Period(), "TriZone_Semafor",
clrAqua, clrMagenta, 5, 1, 3, 159, 159, 2,
clrDodgerBlue, clrOrchid, 13, 8, 5, 108, 108, 3,
clrGold, clrOrangeRed, 34, 21, 12, 116, 116, 4,
"EA1", false, true, true, false,
0, false, false, false, bufferIndex, shift);
}
void OnTick()
{
int safeShift = 4;
double lo1 = TZS_GetBuffer(0, safeShift);
double hi1 = TZS_GetBuffer(1, safeShift);
double lo2 = TZS_GetBuffer(2, safeShift);
double hi2 = TZS_GetBuffer(3, safeShift);
double lo3 = TZS_GetBuffer(4, safeShift);
double hi3 = TZS_GetBuffer(5, safeShift);
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);
}
void OnDeinit(const int reason)
{
// MT4 sem handles — nada a liberar.
}
Erros comuns
| Erro | Sintoma | Solução |
|---|---|---|
| InstanceID duplicado | INIT_PARAMETERS_INCORRECT | ID único: "EA1" |
| HeadlessMode = false | Objetos + alertas | #26 = true |
| shift = 0 com AntiRepaint | EMPTY_VALUE | shift >= 4 |
| AlertMode != 0 no EA | Alert() bloqueia Tester | #29 = 0 |
| Nome errado | 0 / EMPTY_VALUE | "TriZone_Semafor" |
| Parâmetros cor faltando | Valores errados | TODOS 33 parâmetros |
| Ordem errada | Sinais incorretos | Seguir tabela (0-32) |
