Detecção do Padrão de Picos Altistas
Padrão de 3 velas:
1ª vela: Verde com corpo grande (pico altista).
2ª vela: Vermelha (pullback).
3ª vela: Verde com corpo grande (pico altista).
Quando esse padrão aparece, uma zona é criada.
Criação da Zona
Um retângulo azul é desenhado a partir da faixa alta/baixa das 3 velas.
Uma linha horizontal verde-lima é desenhada no preço de abertura da vela do meio (2ª vela).
A linha se estende para o futuro até que o preço retorne.

EXPLICAÇÃO DOS PARÂMETROS
mq5 input color BoxColor = clrBlue; // Cor do retângulo do padrão de 3 velas input color EntryLineColor = clrLime; // Cor da linha de entrada input ENUM_LINE_STYLE EntryLineStyle = STYLE_SOLID; // Estilo da linha de entrada input int BoxWidth = 2; // Largura da borda do retângulo input int EntryLineWidth = 2; // Largura da linha de entrada input int EntryLineLength = 200; // Extensão da linha de mitigação
IDEIA CENTRAL
Buscamos um padrão de 3 velas altistas:
1. Primeira vela – forte altista (pico)
2. Segunda vela – retração baixista
3. Terceira vela – forte pico altista novamente
Quando isso aparece, desenhamos:
- Um retângulo ao redor do padrão
- Uma linha horizontal no preço de abertura da 2ª vela (ponto de entrada)
Uma vez que o preço retorna a essa linha ("mitigação"), cortamos a linha e evitamos redesenhá-la.
DADOS ESTRUTURADOS
struct PatternInfo {
datetime time; // Hora do padrão
double entry; // Preço de entrada (abertura da 2ª vela)
double high; // Maior alta das 3 velas
double low; // Menor baixa das 3 velas
bool mitigated; // O preço retornou ao nível de entrada?
};
CArrayObj activePatterns;Usamos uma struct `PatternInfo` para rastrear cada padrão válido e armazená-lo em um array. Isso ajuda a evitar processamento repetido.
FUNÇÃO DE INICIALIZAÇÃO
int OnInit() {
IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
ArrayInitialize(activePatterns, 0);
return INIT_SUCCEEDED;
}Definimos a precisão do indicador e preparamos nosso array.
DETECÇÃO DO PADRÃO (A CADA TICK)
for (int i = limit - 3; i >= 0; i--) {
Fazemos um loop pelas velas e olhamos 3 barras para trás.
if (isBullish(i+2) && isBearish(i+1) && isBullish(i))
Verificamos se as últimas 3 velas se encaixam no padrão de pico: Verde-Vermelha-Verde.
double high = MathMax(MathMax(High[i], High[i+1]), High[i+2]); double low = MathMin(MathMin(Low[i], Low[i+1]), Low[i+2]); double entry = Open[i+1];
Extraímos a alta/baixa para o retângulo e o nível de entrada da 2ª (vela do meio).
PatternInfo *pattern = new PatternInfo; pattern.time = Time[i]; pattern.entry = entry; pattern.high = high; pattern.low = low; pattern.mitigated = false;
Criamos e adicionamos esse padrão à nossa lista.
DESSENHO DO RETÂNGULO E LINHA
string boxName = "Box_" + IntegerToString(Time[i]); ObjectCreate(0, boxName, OBJ_RECTANGLE, 0, Time[i+2], high, Time[i], low);
Desenhamos o retângulo (caixa) do padrão de 3 velas.
string lineName = "EntryLine_" + IntegerToString(Time[i]); ObjectCreate(0, lineName, OBJ_TREND, 0, Time[i], entry, Time[i] + PeriodSeconds() * EntryLineLength, entry);
Desenhamos a linha de entrada a partir da abertura da 2ª vela para frente no tempo.
VERIFICAÇÃO DE MITIGAÇÃO (A CADA TICK)
for (int p = 0; p < activePatterns.Total(); p++) {
PatternInfo *pt = (PatternInfo*)activePatterns.At(p);
Se ainda não mitigado, verificamos:
if (!pt.mitigated && Low[0] <= pt.entry)
Se o preço atual atinge o nível de entrada:
pt.mitigated = true;
ObjectDelete("EntryLine_" + IntegerToString(pt.time));Deletamos a linha original.
ObjectCreate(0, "MitigatedLine_" + IntegerToString(pt.time), OBJ_TREND, 0, pt.time, pt.entry, Time[0], pt.entry);
Criamos uma linha curta mostrando onde a mitigação ocorreu.
FUNÇÕES AUXILIARES
bool isBullish(int i) {
return Close[i] > Open[i];
}
bool isBearish(int i) {
return Close[i] < Open[i];
}Esse indicador é simples, mas poderoso:
- Detecta comportamentos reais de pico no Boom
- Visualiza entradas de dinheiro inteligente
- Detecta automaticamente a mitigação
Agora você pode testá-lo ao vivo no Boom 500 ou Boom 1000.
Comente se você quiser perguntar ou compartilhar.
Comentário 0