EA CandleSniper · v1.263

CandleSniper

Conteúdo alinhado ao código do EA. O bloco seguinte reproduz o mesmo raciocínio do pacote Markdown; o botão copia tudo (lógica + parâmetros + convenções) para usar noutra ferramenta ou IA.

Telegram · CandleSniper

Alertas Telegram

Antes do candle em formação fechar, o EA envia um alerta com análise completa e botões de decisão. O backend monta a mensagem em HTML; o robô faz polling da sua escolha e aplica no fechamento do candle (START) ou na abertura da cesta.

Telegram · suas decisões (clicar ou não)

O que você pode fazer (3 caminhos)

AçãoO que acontece no EA
Não clicar em nadaAção auto no servidor. O robô decide sozinho quando o candle fecha: se os filtros do candle START passarem (perfil AUTO/MANUAL/FIXED + EvaluateStartCandle), arma e pode entrar após confirmação. Não força nem bloqueia por Telegram.
🟡 Armar operaçãoEquivale ao botão ARMAR OPER. do painel: no fechamento desse candle, o START é aprovado mesmo com filtros reprovados (reversão forçada). Usa o perfil já ativo na mensagem, salvo se você escolher outro no menu abaixo.
❌ PularAborta esta oportunidade: o START desse candle não vira entrada, mesmo que filtros e score estejam verdes.

Menu de perfis (opcional)

  • Aparece abaixo dos dois botões principais.
  • Clicar em um perfil = Armar + trocar config (risco, SL, TP, pesos, filtros do JSON) para o nome escolhido.
  • Ordem típica: Armar → (opcional) perfil no menu. Só Armar já usa o perfil mostrado em PERFIL ATIVO (EA).

Sem resposta até o fechamento

Controlado por InpTgDefaultAction (ou telegram_config.default_action no JSON):

  • ENTRAR (padrão): sem clique = mesmo que “robô decide” (não grava decisão de usuário).
  • PULAR: se você não responder até o candle fechar, o EA trata como Pular e não entra nessa oportunidade.

O alerta dispara InpTgSegundosAntes segundos antes do fechamento (ex.: 120 s no H1), quando InpTgAtivo e condições de horário/modo/corpo mínimo estão OK.

Estrutura da mensagem (de cima para baixo)

A mensagem segue blocos separados por linha ━━━━━━━━━━━━━━━━. Tudo é calculado no instante do envio (candle índice 0 ainda aberto; preço = Bid).

⚡ Cabeçalho

  • Símbolo + timeframe — ex.: XAUUSD H1.
  • Direção da reversão propostaSELL ou BUY: se o candle em formação está bearish (preço < open), a reversão esperada é compra; o rótulo mostra o lado da entrada (SELL = venda na reversão de candle de alta, conforme lógica do EA).
  • Data/hora do candleDD/MM HH:MM do bar 0.
  • ⏳ tempo restante — minutos:segundos até o fechamento (time_remaining).
  • faixa … (XXXX pts) — faixa de corpo em pontos usada nas estatísticas históricas (backend classifica o body_pts atual em buckets do PostgreSQL, ex. 2000-3000).

🎯 VEREDITO e 🧠 SCORE

VEREDITO (síntese estatística + EA)

Montado no backend (compute_verdict): combina vários “checks” em bolinhas 🟢 🟡 🔴 e um rótulo:

RótuloRegra (aprox.)
✅ ENTRADA FORTE≥ 85% dos checks “bons”
🟢 ENTRADA OK≥ 70%
🟡 RISCO MÉDIO≥ 50%
🟠 RISCO ALTO≥ 30%
🔴 PULAR< 30%

Checks incluídos (quando há dados no banco):

  1. Score EAfinal ≥ 65 = ok, ≥ 50 = médio.
  2. Tendênciafavor=true = ok; aligned ≥ 2/4 = médio; senão ruim.
  3. Heatmap — win rate da faixa de corpo × hora (≥ 5 ops).
  4. Body — win rate só da faixa de corpo.
  5. Hora — win rate da hora do candle.
  6. Dia — win rate do dia da semana.
  7. Grid — perfil ótimo marcado como recomendado.

Linha 7/7 sinais (100%) = quantos checks “ok” / total de checks.

SCORE 0–100 (motor do EA)

Vem do EA (g_indFinalScore e decomposição):

  • final — nota composta 0–100 (Entry + Context + Risk no painel).
  • entry — qualidade do setup de entrada (candle, confirmação, etc.).
  • context — contexto de mercado (pull, S/R, tendência).
  • risk — risco da situação (esticamento, contra-tendência).

Barra █████░░░░░ = visualização do final. Rótulos: EXCELENTE ≥80, FORTE ≥65, OK ≥50, FRACO ≥30, EVITAR abaixo.

Linha em itálico — texto narrativo: combina nível do score, % corpo/range e alinhamento de tendência.

retrace / exaustãog_indRetracePct (pullback %) e exaustão M5 (g_momRatio × 100).

O VEREDITO não substitui os filtros do EA; é leitura para estudo. Entrada automática ainda depende de EvaluateStartCandle + confirmação, salvo Armar.

📐 TENDÊNCIA

Dados enviados pelo EA (g_trendH4, g_trendD1, g_trendW1, g_trendMN, g_trendAligned, g_trendFavor).

  • H4 / D1 / W1 / MN — seta ↑ ↓ − por timeframe: compara Bid com open do candle atual daquele TF (sinal simplificado de viés).
  • (3/4)aligned: quantos TFs “favorecem” a direção da reversão proposta (0 a 4).
  • A FAVOR / PARCIAL / CONTRAfavor=true → a favor; senão ≥2/4 → parcial; senão contra.

Usado no veredito e nos filtros contra-tendência do EA (InpBlockCounterTrend, exaustão M5, etc.).

📊 WIN RATE histórico

Estatísticas do PostgreSQL (amostra indicada na mensagem, ex. 4880 ops · 2024–2026). Não é o placar do dia no MT5.

LinhaSignificado
Heatmap faixa×horaWin rate das operações passadas com mesma faixa de corpo e mesma hora (UTC/servidor conforme cadastro). n= = tamanho da amostra. Emoji 🟢🟡🔴 por faixa de WR.
SELL/BUY × horaWR histórico da direção do alerta naquela hora.
Body faixaWR só pelo tamanho do corpo (bucket).
HoraWR agregado da hora (todas faixas).
DiaWR do dia da semana (Seg, Ter, …).

Serve para estudo contextual: “este tipo de setup já pagou quanto no passado?”. Não garante resultado futuro.

🏆 PERFIL ÓTIMO e 💡 REFERÊNCIA

PERFIL ÓTIMO

Sugestão do grid/otimizador no banco para a faixa de corpo + hora + direção atuais:

  • Nome do perfil simulado, risco, SL, TP1-TP2-TP3.
  • sim WR / EV — win rate e lucro médio simulados na grade.
  • vs default — comparação % vs config padrão daquele bucket.
  • ✅ recomendado / ⚠️ alternativo — se a célula passou critérios de recomendação.

REFERÊNCIA (SL/TP)

  • SL ideal — ponto onde ~X% dos winners históricos “sobreviveram” ao drawdown (análise de SL no banco).
  • MFE med / p75 — Maximum Favorable Excursion: até onde o preço foi a favor antes do desfecho (mediana e percentil 75 em pts).

Ajuda a calibrar SL/TP; o EA na operação usa o perfil ativo ou o escolhido no menu Telegram.

━━━ CONTEXTO ━━━

Indicadores no momento do alerta (candle 0):

CampoCálculo / origem
PULL %g_indRetracePct — retrace do movimento recente. Rótulo FORTE ≥50%, MÉDIO ≥30%, FRACO ≥15%, MÍN abaixo.
velVelocidade recente (pull_bounce.velocity / M5).
BNC a/bbounce_count / bounce_total — toques/contagem de bounce em M5.
S/RNível mais próximo (nearest_label) e distância em pts; proximidade MUITO PERTO ≤200, PERTO ≤500, etc.
STRatr_stretch — distância do preço ao open do dia em múltiplos de ATR D1.
Zz_score — desvio em relação à média recente.
corpo Xx médiabody_vs_avg — tamanho do corpo vs média histórica de corpos.
corpo / sombra %Corpo e sombra como % do range (high−low) do candle em formação, em pts no rodapé.

━━━ PERFIL ATIVO (EA) ━━━

Configuração efetiva no robô quando o alerta foi enviado:

  • AUTO / FIXED / MANUAL — modo de perfil (g_profileMode).
  • nome — perfil casado (AUTO preview), fixo ou último aplicado.
  • risco · SL · TP · pesos — globais ativos (g_riscoDolar, g_slPontos, g_tpPontos, g_pesos).

filtros no envio

Espelham o painel Candle Start (badges verde/vermelho). Calculados no EA com o candle ainda aberto (Bid como “close” provisório):

LinhaO que validaFaixa exibida
totalRange high−low em pts
corpoCorpo em pts vs InpRangeBodyPontos / max do perfilex. 2001-3000
sombra% corpo/range vs InpMin/MaxCorpoPercentualRangeex. 59-96
sw_hPavio superior (% do range) vs filtro sombra — só ativo se reversão for SELL (candle bullish)ex. 4-21
sw_lPavio inferior — só ativo se reversão for BUYex. 4-21
  • 🟢 = dentro da faixa · 🔴 = fora · ⚪ = linha inativa (não é o pavio da reversão).

Em modo AUTO, as faixas vêm do perfil preview (ProfileEngine_PreviewMatch). Armar ignora esses filtros no fechamento; sem clique o EA exige que passem no EvaluateStartCandle.

💼 Sessão EA

Placar da sessão atual no gráfico (acumulado g_acc no EA), não o histórico do banco:

  • 2W/1L — vitórias e derrotas desde o último reset do acumulado (reinício do EA ou InpResetAcumulado no OnInit).
  • $+450 — P/L líquido em USD somado nessa sessão.
  • (3 ops) — total de operações fechadas contadas.

Se não houver ops na sessão, o bloco não aparece.

Botões e callback (técnico)

Botãocallback_dataEfeito no banco / EA
🟡 Armar operaçãoalert:{id}:armaction=arm, decided_by=user → polling seta g_armarProxOper
❌ Pularalert:{id}:skipaction=skip → bloqueia START e entrada
Perfil (lista)alert:{id}:profile:{idx}action=arm + profile_override=nome → armar com perfil do JSON

Cada instância do EA tem instance_id = conta-símbolo-TF-magic-ChartID. O EA consulta GET /alerts/candle/{id}/decision a cada ~5 s até receber decided_by=user ou o candle passar.

Perfis no menu: só entradas do JSON com disponivel_em = telegram ou ambos e ativo.

Painel MT5 · CandleSniper

Painel STATS (MT5)

Coluna STATS do painel principal mostra win rate, MFE, MAE e um veredito curto com base em operações históricas importadas no PostgreSQL. O botão **[+]** abre o overlay **STATS — Detalhamento do Setup** com breakdown e percentis.

STATS · origem dos dados e polling

De onde vêm os dados

CamadaFunção
BancoTabela backtest_stats_operations — cada linha é uma operação fechada do estudo/backtest (corpo, direção, hora, dia, MFE, MAE, PnL, etc.).
BackendGET /stats/candle-snapshot agrega SQL (médias, percentis, breakdown).
EAStatsApi_Fetch() em CS_StatsApi.mqh — polling HTTP a cada InpStatsPollSec (padrão 60 s).
PainelUpdateStatsBadges() (resumo) + UpdateStatsPanel() (expandido).

Não é o placar ao vivo da conta nem o bloco “Sessão EA” do Telegram. É estatística histórica para o setup parecido com o candle START atual.

Contexto enviado pelo EA (a cada poll)

O EA usa o candle anterior fechado (bar índice 1), mesma referência do candle START:

  1. body_pts — |close − open| / PointValue() do bar 1. Candles &lt; 50 pts são ignorados.
  2. direction — direção da reversão: candle de alta → SELL; candle de baixa → BUY.
  3. hora — hora do bar 1 (0–23).
  4. dia_semana — 0=Seg … 6=Dom (conversão do day_of_week do MT5).
  5. Opcionais (refinam o veredito no servidor): trend_aligned (0–4), atr_stretch, score_final.

O backend classifica body_pts em faixas fixas (buckets): &lt;400, 400-600, … 2000-3000, 3000-6000, 6000+.

URL exemplo: {InpStatsApiUrl}/stats/candle-snapshot?body_pts=2210&direction=BUY&hora=20&dia_semana=3&trend_aligned=3&atr_stretch=1.2&score_final=72

Se InpStatsApiUrl estiver vazio ou InpStatsPollSec = 0, o painel STATS fica desligado (badges cinza).

Painel sintético (coluna STATS · sem abrir [+])

Três chips + linha de veredito + botão +:

ElementoNa telaSignificado
WREx.: WR 85Win rate % da amostra filtrada principal.
MEx.: M 420MFE médio em pontos (movimento favorável médio).
DEx.: D 890MAE médio em pontos (magnitude do drawdown; valor exibido éMAE).
Linha amarela/verde/vermelhaEx.: amostra pequena, cuidado (n=0)Frase verdict + n = tamanho da amostra da query principal.
[+]Botão azulAbre/fecha o painel expandido (ToggleStatsPanel).

Cores dos chips (vêm do backend como green / yellow / red / gray):

  • WR: verde ≥80%, amarelo ≥65%, vermelho abaixo (se n ≥ 5).
  • MFE: verde ≥500 pts, amarelo ≥250, vermelho abaixo.
  • MAE (drawdown): verde ≤800 pts, amarelo ≤1500, vermelho acima.
  • Cinza: amostra &lt; 5 ops na métrica principal.

Enquanto a API não responde: WR --, MFE --, MAE -- e STATS aguardando dados....

Painel expandido — STATS · Detalhamento do Setup

Overlay à direita do painel (arrastável pelo header). Estrutura:

Cabeçalho

  • Título: STATS — Detalhamento do Setup.
  • Linha cinza: {main_label} · amostra total: N ops · n=X (confiança)
  • main_label — filtro usado na estatística principal (ex.: &lt;400 x BUY ou 2000-3000 x SELL x 20h x Qui).
  • amostra totalCOUNT(*) de toda a tabela (ex.: 5150 ops).
  • n — operações que entraram na query principal (após filtros).
  • confiançaalta (n≥50), media (n≥10), baixa (n&lt;10).

Veredito grande

Frase gerada no backend (_generate_verdict). Exemplos: setup consistente, amostra pequena, cuidado, setup perigoso contra tendencia. Cor: verde / amarelo / vermelho.

4 cards (2×2)

CardCálculo
WIN RATE% de linhas com resultado = 'GAIN' na amostra principal.
MFE (movimento favorável)Média de max_fav_pts — quanto o preço foi a favor antes do desfecho.
MAE (drawdown)Média de ABS(max_dd_pts) — pior contra-movimento médio durante a operação.
EV (esperança)Média de total_pnl_usd por operação — lucro/prejuízo médio em USD (não é win rate).

▸ BREAKDOWN (WR por filtro)

Cinco comparações independentes no histórico (cada uma com seu n e cor):

  1. by_body_hour — mesma faixa de corpo e mesma hora (ex.: &lt;400 x 20h).
  2. by_direction_hour — mesma direção e hora (ex.: BUY x 20h).
  3. by_body — só faixa de corpo.
  4. by_hour — só hora do dia.
  5. by_weekday — só dia da semana (Seg…Dom).

Formato: {label} -> WR XX% (n=YYY). Se n = 0 ou sem linha: sem dados (cinza). Cor do WR segue os mesmos limiares (≥80 verde, ≥65 amarelo, senão vermelho; &lt;5 ops = cinza).

▸ PERCENTIS E REFERÊNCIA

Na amostra principal (não no breakdown):

  • MFE p50 / p75 — percentis 50 e 75 de max_fav_pts (metade / 75% das ops tiveram MFE até X).
  • MAE p95 — percentil 95 de |drawdown| — referência conservadora de “pior caso frequente”.
  • duração média — média de duration_sec (segundos com a operação aberta).

Serve para calibrar TP (MFE) e SL (MAE p95), não é ordem automática.

Como a amostra principal é montada (backend)

Passo 1 — Query “exata”

Filtra operações com todos estes campos iguais ao contexto atual:

body_range + direction + hora + dia_semana

Ex.: corpo 380 pts → bucket &lt;400; reversão BUY; 20h; quinta → label &lt;400 x BUY x 20h x Qui.

Passo 2 — Fallback se n &lt; 5

Se a combinação exata tiver poucas ops, relaxa para:

body_range + direction apenas (label ex.: &lt;400 x BUY).

Assim n=0 na exata ainda pode mostrar WR/MFE/MAE do fallback — ou zero se não houver dados nem no fallback.

Métricas agregadas (SQL)

Para a amostra escolhida:

`` WR = AVG(CASE resultado='GAIN' THEN 1 ELSE 0 END) × 100 MFE = AVG(max_fav_pts) MAE = AVG(ABS(max_dd_pts)) EV = AVG(total_pnl_usd) p50/p75/p95 = percentile_cont sobre max_fav_pts e max_dd_pts ``

Veredito (regras resumidas)

Determinístico: mesmas entradas → mesma frase.

CondiçãoTendência
n &lt; 10Sempre amostra pequena, cuidado (amarelo) — domina sobre WR alto.
WR ≥ 90%scalp limpo… ou alta taxa, drawdown pesado (ratio MFE/MAE).
WR 80–90%setup consistente / boa taxa… / risco elevado conforme MFE e ratio.
WR 65–80%Considera atr_stretch, trend_aligned, ratio → neutro, instável, etc.
WR &lt; 65%fraco, perigoso contra tendência, evitar se MAE alto ou poucos TFs a favor.

trend_aligned e atr_stretch entram só no texto do veredito (não mudam o WR exibido nos cards).

Configuração no EA (inputs)

InputPadrãoEfeito
InpStatsApiUrlhttps://api-forex.lcmti.com.brBase da API. Vazio = STATS desligado.
InpStatsPollSec60Intervalo mínimo entre GETs. 0 = desliga polling.

Requisitos MT5: URL em Ferramentas → Opções → Expert Advisors → permitir WebRequest para o host da API.

O painel expandido não refaz request — usa o último cache g_stats* do poll. Abrir [+] após o primeiro fetch bem-sucedido mostra os mesmos números dos badges.

Comparar com Telegram e com a conta

OrigemO que mostra
STATS (painel)Histórico backtest_stats_operations para o candle START (bar 1): WR/MFE/MAE/EV + breakdown. Atualiza a cada poll.
Telegram · WIN RATE históricoMesma base de dados em geral, mas formatado no alerta pré-fechamento (bar 0) e com veredito de 7 checks + score do EA.
Telegram · Sessão EAPlacar ao vivo da sessão no gráfico (g_acc), não o backtest.
Placar 4 (ACUMULADO)Persistência por conta no EA — outro conceito de “sessão”.

Uso recomendado: STATS no gráfico = leitura rápida enquanto o candle START já fechou; Telegram = decisão minutos antes do fechamento do candle em formação; expandido [+] = estudo detalhado dos filtros (hora, dia, corpo) antes de armar ou deixar o robô decidir.

Lógica operacional · IA · resumo

Para uso em IA

Documento de referência do CandleSniper 1.263. Use apenas os Inp listados e os nomes de botões/campos descritos; o código mantém estado em runtime (g_, painel, GlobalVariables) que pode divergir dos inputs após a primeira sessão.


Arquitetura modular + sistema de perfis

Desde a v1.110 o EA está dividido em módulos sob MQL5/Experts/:

  • core/: CS_Common (enums), CS_Inputs (declarações input), CS_State (globais g_* + structs), CS_FileIO (panel persist via GlobalVariables), CS_Helpers (math/lot/volume/PnL fmt), CS_LiveJson (log JSON incremental por cesta).
  • ui/: CS_Panel (painel principal + lateral Ajuste fino), CS_PanelProfiles (painel de perfis), CS_PanelIndicadores (painel de indicadores + guia de score), CS_PanelUpdate (repaint), CS_PanelEvents (handlers de click/edit), CS_Drawing (cards de debug + modo ESTUDO).
  • motor/: CS_Signal (EvaluateStartCandle + filtros), CS_Strategy (ProcessAutoStrategy), CS_Trade (OpenBasketAuto/Manual), CS_Risk (trailing, BE, prot.cesta), CS_Tracking (basket id, comments, closed orders), CS_Closing (encerramento automático), CS_Indicators (indicadores visuais + scores de reversão).
  • perfis/: CS_ProfileTypes (struct CSProfile + HorarioSegment), CS_ProfileEngine (parser JSON, MatchProfile, ApplyProfile, snapshot/restore MANUAL).

Perfis JSON via InpPerfisJsonFile (relativo a MQL5/Files/; no Tester também Common/Files/). Modos: MANUAL, AUTO PERFIL, FIXED. Modo inicial: InpPerfilModo (default AUTO) + InpPerfilFixoNome se FIXED. Editor em /perfil. Em AUTO/FIXED campos read-only; COMPRAR/VENDER/ARMAR OPER. desabilitados em AUTO. Snapshot MANUAL em g_manualSnap.

InpRangeBodyPontos (string): "1000" = min; "700-1000" = range. Válido no F7, painel e JSON de perfil. Inválido bloqueia entradas (input) ou ignora perfil (JSON).

Trailing (desde v1.145): InpTrailingGatilhos, InpTrailingDistancia e InpTrailingStep são três strings O1–O5 (ex.: "0-0-0-80-80").

Filtro horario_operacao (opcional, raiz do perfil): "3", "15-18", "9|13|15-17|22". Broker time. Prioridade absoluta sobre perfis sem horário.

InpHorarioOperacao (global, input do EA): mesma sintaxe do horario_operacao de perfil, mas age como filtro global que bloqueia qualquer entrada fora das horas configuradas. Vazio = sem restrição.

InpPointScale: 0=auto (3/5 dígitos→10×), 1=sem ajuste, 10=forçar. Afeta todos os cálculos em pontos (corpo, SL, TP, etc.).

Indicadores visuais (desde v1.200): 6 indicadores internos (S/R D1, ATR Band, EMA 20, EMA 50, Sessões, VWAP) com toggles no painel INDICADORES. Inputs InpInd* definem estado inicial; painel persiste via GlobalVariables.

Sistema de Score (desde v1.200): 4 scores em tempo real — Entry (setup técnico: ATR stretch, Z-Score, rejeição, corpo vs avg, exaustão), Context (localização: S/R, VWAP, EMA, sweep, H4/H1), Risk (continuação: momentum, aceleração, stretch baixo, H4 contra), Final (combinado 0–100 com decisão textual PREMIUM/BOA/PODE ENTRAR/AGUARDAR/EVITAR). Inclui análise multi-TF (H4/D1/W1/MN — bid vs open do candle corrente + % distância) e frase narrativa. InpDebugScore imprime decomposição no log.

Telegram Alerts (InpTg*): notificação remota antes do close. Master switch InpTgAtivo (false = zero overhead). O EA fala só com o backend (InpTgApiUrl) — bot token, chat ID e botões de risco/SL ficam no servidor. Envia POST N segundos antes do close (InpTgSegundosAntes) e faz polling GET para receber a decisão. Filtros: horário (InpTgHorarioNotificacao), modo do EA (InpTgModoFiltro), condição (InpTgCondicaoEnvio). Ação sem resposta configurável (InpTgDefaultAction: ENTRAR/PULAR).


Lógica operacional

Timeframe e velas

  • O EA está preso ao período do gráfico. START = barra índice 1 (fechada). Atual = índice 0.
  • Em cada mudança de Time[0], um ciclo novo de qualificação de START pode começar (sinal anterior sem entrada vira «sem confirmação» no debug).

Quando ProcessAutoStrategy corre

  • Se nãog_autoTradeOn e nãog_armarProxOper, zera estado de sinal e sai (AUTO off).
  • g_armarProxOper: permite uma próxima janela em que o START é forçado como válido sem corpo mínimo, sombra, filtro range, etc.; flag é consumida ao fechar a vela; imprime log «ARMAR OPER. consumido». Também ignora o bloqueio de AUTO para esse arranque.

Fase 1 — Qualificar START (abertura de vela nova)

  1. Lê OHLC do START.
  2. Se não for modo armar forçado: EvaluateStartCandle — corpo em pontos vs g_rangeBodyPontos (piso); teto vem do perfil FIXED ativo via ProfileEngine_ActiveBodyMax() quando hasBodyMaxFromRange for true (em MANUAL/AUTO PERFIL não há teto nesse ponto — AUTO valida teto dentro do _CSP_CandleFiltersPass no Match); filtro corpo/range se g_filtroRangeOn, direção reversa do corpo, g_tipoOperacao, g_filtroSombraOn com limites, extremos gravados para SL %.
  3. Primeiro candle do dia civil no período atual: bloqueio — não arma sinal.
  4. Se aprovado: armag_signalDirection, GetConfirmacaoPontos(body) (PTS fixos ganham da % corpo via g_confPontos/ g_confPercentual), GetSLPontos, abertura do candle 0 naquele momento em g_signalOpen0.

Fase 2 — Tick com sinal armado

  1. Uma entrada por vela: g_umaEntradaPorCandle + já entrou nesta barra.
  2. Posição aberta: g_bloquearNovaEntrada + já existe magic no símbolo.
  3. Spread: > g_spreadMaxPontos → para.
  4. Confirmação em preço usando Open[0] e distância em pontos igual à calculada em Fase 1 (bid/ask vs open0 ± N×Point).
  5. Novamente bloqueio 1.º candle do dia antes de enviar.
  6. Resolve perfil via ProfileEngine_ResolveForEntry(body, corpoPctRange, sombraRevPct, candleStartTime). MANUAL/FIXED retornam true direto (g_ já refletem o que vai operar). AUTO PERFIL faz Match agora: pode retornar idx (aplica perfil em g_) ou bloquear com razão no_profile_match, profile_conflict ou horario_active_candle_rejected. Razão é gravada em g_lastBlockReason e o sinal é abortado.
  7. OpenBasketAuto(direction, ClampQuantidade(), slPts, …) com ClampQuantidade = 5 sempre.; lotes apenas para ordens g_ordAtiva[i] não nulas na etapa final (redistribuição se só parte ativa). O snapshot do perfil (mode, name, match_kind, match_hour, match_spec) é gravado em g_liveCurrent para sair no live JSON.

Gestão intra–OpenBasket

  • SL real pode diferir dos pontos nominais no modo % candle — lotes dimensionados por distância real entrada→SL.
  • Trailing configurado pela tripleta de strings por índice (gatilho, distância, passo).

Ciclo por tick quando não está em modo backtest player

Proteção cesta → trailing por perna → tracking de fechos → encerramentos automáticos (hora / N velas / minutos) → ProcessAutoStrategy → UI.

Entrada manual / ações

  • OpenBasketManual no COMPRAR/VENDER (duplo clique).
  • FECHAR TODAS / SAIR POSITIVO / nudge TP-SL: ver secção Painel.

Modo ESTUDO

  • Não opera em conta: só objetos STUDY_ no gráfico; simula lotes (CalculateLotsForBasket), g_ordAtiva e fechos walk-forward até TP ou SL.
  • Ligar o botão ESTUDO: AUTO off, sem sinal, sem posição; ao ligar zera ARMAR e estudos anteriores.
  • Duplo clique no mesmo candle em ≤500 ms (fora dos botões): candle = START; entrada no seguinte após confirmar trigger com high/low intrabar desde o open. Walk-forward até TP ou SL; mesmo candle com ambos tocados → SL primeiro.

Parâmetros (Inp*)

A lista detalhada segue nas secções com MT5: nomes técniques + textos espelhados do painel e campos.

Nota (coluna MT5): No MT5 os input aparecem com comentários na coluna da esquerda — aqui repetimos esse texto onde existir no código-fonte. Quando um perfil JSON está ativo (AUTO PERFIL ou FIXED), edits no painel são bloqueados e os valores efetivos vêm do perfil (InpRangeBodyPontos, InpRiscoDolar, etc.).

Resumo em uma frase: Reversão pós candle START esticado: em cada nova vela o EA avalia o candle anterior; se qualificar (ou se você armar manualmente), prepara entrada na direção oposta ao corpo do START e só executa depois da confirmação em pontos no candle atual. A cesta tem até 5 ordens, com pesos, TP e trailing por perna (strings v1-v2-v3-v4-v5 para gatilho, distância e passo). O EA está modularizado em core/, ui/, motor/ e perfis/ e suporta perfis JSON (modo MANUAL / AUTO PERFIL / FIXED) com filtro de horario_operacao, range body ("1000" ou "700-1000") no input F7, no painel e no JSON. O painel espelha e persiste quase tudo em GlobalVariables; quando um perfil está ativo, os campos ficam read-only. Editor visual de perfis público em /perfil. O modo ESTUDO simula walk-forward (TP/SL) com duplo clique no gráfico — não envia ordens. Desde a v1.200 o EA inclui 6 indicadores visuais (S/R D1, ATR Band, EMA 20/50, Sessões, VWAP) com toggles no painel INDICADORES, sistema de score composto (Entry / Context / Risk → Final Score 0–100) com decisão textual e análise multi-timeframe (H4/D1/W1/MN via bid vs open + % distância), e filtro de horário global (InpHorarioOperacao). O módulo Telegram Alerts (InpTg*) envia notificações com dados completos do candle START antes do fechamento, com botões inline para decisão remota via celular (bot/chat/risco ficam no backend). O Placar 1 traz 3 colunas de leitura — Candle Start, Candle Operação (com zonas de tempo do candle, InpZonasCandlePct) e Candle Anterior (último candle fechado, com filtros e status) — e o EA desenha linhas de reversão no gráfico (entrada/TP/SL, InpMostrarLinhasReversao) como preview "e se entrasse". Há filtros contra-tendência (motor de regra: InpBlockCounterTrend, InpMaxATRStretchEntry, InpMinExaustaoContraTendencia), painel STATS (WR/MFE/MAE + verdict via InpStatsApiUrl) e log JSON de operações (InpSalvarOperacoesJson).

=== Estratégia automática ===

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

InpAtivarAutoTrade

Liga ou desliga a abertura automática de ordens pela lógica de reversão (candle START esticado + confirmação no candle atual). É o valor inicial ao carregar o EA; depois do primeiro tick prevalece o botão AUTO do painel (g_autoTradeOn), que persiste entre sessões.

Relacionado

Para a estratégia automática executar entradas, AUTO precisa estar ON ou você precisa ter usado ARMAR OPER. (que bypassa AUTO off por um ciclo). Independe de InpTipoOperacao (direção) e dos filtros de candle — estes só afetam se o START é aprovado.

Exemplo

AUTO=true no input e no painel. H1: candle das 9h tem corpo 1500 pts, passa filtros → sinal armado às 10h. Se o preço confirmar 150 pts de reversão no candle das 10h, abre a cesta automaticamente.

No MT5: corpo do candle START (pts). "1000" = min; "700-1000" = range min-max

InpRangeBodyPontos

Filtro de tamanho do corpo do candle START (barra índice 1, fechada). Corpo = |close − open| em pontos. Tipo string no input F7 (desde v1.145 / etapa 19.2): "1000" = só piso (corpo ≥ 1000 pts); "700-1000" = range inclusivo (min e max). Inteiro legado no JSON de perfil ainda aceito. String inválida marca g_rangeBodyInvalid=true e bloqueia entradas até corrigir no painel ou .set.

Relacionado

Parseado por ApplyRangeBodyString / ParseRangeBodyStringg_rangeBodyPontos, g_rangeBodyMax, g_rangeBodyRaw. Painel EDT_RANGE_BODY espelha a mesma string. InpMaxBodyPontos removido — teto só via range. Em perfil JSON, string inválida marca o perfil invalid. Combina com InpUsarFiltroCorpoPercentualRange e filtros de sombra.

Exemplo

InpRangeBodyPontos="1000" → START com 800 pts rejeitado. "1200-2500" → aceita só corpos entre 1200 e 2500 pts. Perfil JSON: "InpRangeBodyPontos": "1000-1500".

No MT5: confirmação fixa em pts (se não usar %) · % do corpo do candle START

InpConfirmacaoReversaoPontos / InpConfirmacaoPercentual

Define quantos pontos o preço precisa andar contra o corpo do START, a partir do open do candle atual (índice 0), para confirmar a entrada. Dois modos: pontos fixos (InpConfirmacaoReversaoPontos) ou percentual do corpo do START (InpConfirmacaoPercentual). Em runtime, GetConfirmacaoPontos usa g_confPontos se > 0; senão calcula g_confPercentual × corpo / 100.

Relacionado

Depende de um START já aprovado (corpo, filtros, direção). InpConfirmacaoReversaoPontos=0 deixa o percentual valer. Campos do painel EDT_CONF_PTS e EDT_CONF_PCT espelham os globais. Não existe mais InpUsarConfirmacaoPercentual — a escolha é implícita.

Exemplo

START com corpo 2000 pts, InpConfirmacaoPercentual=10 → confirmação = 200 pts. Sinal de venda: bid precisa cair 200 pts abaixo do open[0]. InpConfirmacaoReversaoPontos=300 com PTS>0 no painel → usa 300 pts fixos, ignorando o %.

No MT5: Distância fixa em pontos a partir da entrada · ou % corpo START ancorado no extremo

InpModoSL

Escolhe como o stop loss é calculado na abertura da cesta: SL_FIXO_PONTOS usa distância fixa desde a entrada; SL_PERCENTUAL_CANDLE ancora o SL no extremo oposto do corpo do START (low para BUY, high para SELL) usando InpSL_PercentualCandle.

Relacionado

Trabalha com InpSL_Pontos (modo fixo e referência na proteção da cesta) e InpSL_PercentualCandle (modo %). No painel, botão SL: FIXO / PERC alterna g_modoSL; EDT_SL_FIXO e EDT_SL_PERC guardam os valores.

Exemplo

Modo FIXO, InpSL_Pontos=3000 → SL a 3000 pts da entrada. Modo %, corpo START=2000 pts, InpSL_PercentualCandle=10 → SL fica 200 pts além do low (compra) ou do high (venda) do START.

No MT5: % do corpo: SL fica X% do corpo abaixo do low (BUY) / acima do high (SELL) do candle START

InpSL_PercentualCandle

Percentual do corpo do candle START usado para posicionar o SL no modo percentual. O SL fica além do extremo oposto à direção da entrada: para compra, abaixo do low; para venda, acima do high.

Relacionado

Só aplica quando InpModoSL = SL_PERCENTUAL_CANDLE (ou g_modoSL no painel = PERC). InpSL_Pontos continua relevante como referência na proteção da cesta e no dimensionamento de lotes (distância real entrada→SL).

Exemplo

START: high 2660, low 2640, corpo 1500 pts (venda esperada). InpSL_PercentualCandle=10 → buffer = 150 pts → SL da venda ≈ 2660 + 150 = 2810 pts acima do low em termos de distância SL.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

InpSpreadMaxPontos

Spread máximo permitido, em pontos, para abrir nova cesta. Se o spread atual (ask − bid) ultrapassar esse teto, a entrada é bloqueada mesmo com sinal armado e confirmação ok.

Relacionado

Checado em IsSpreadOk() na Fase 2 (tick com sinal armado). Também afeta entrada manual indiretamente se spread alto. Editável no painel lateral (EDT_SP_SPREADg_spreadMaxPontos).

Exemplo

InpSpreadMaxPontos=100, spread atual 120 pts → sinal fica em «spread alto» e não entra. Spread 80 pts → passa.

No MT5: direções permitidas

InpTipoOperacao

Restringe quais direções a estratégia automática pode operar: só compra, só venda ou ambas. A direção do trade é sempre reversa ao corpo do START (START de alta → busca venda; START de baixa → busca compra), mas este filtro pode bloquear uma das direções.

Relacionado

Avaliado em EvaluateStartCandle junto com corpo e filtros. Ciclo Op: AMBOS / COMPRA / VENDA no painel (g_tipoOperacao) substitui em runtime. COMPRAR/VENDER manual respeita ordens ativas O1–O5, não este enum diretamente.

Exemplo

InpTipoOperacao=TO_SELL. START de baixa (corpo bearish) geraria compra → bloqueado. START de alta → venda permitida.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

InpBloquearNovaEntradaComPosicaoAberta

Quando true, impede abrir nova cesta enquanto já existir posição aberta do magic neste símbolo. Evita sobreposição de operações automáticas ou manuais.

Relacionado

Checado na Fase 2 antes da confirmação de preço. Toggle Bloquear com posição no painel lateral (BTN_SP_BLOQg_bloquearNovaEntrada). Independe de InpUmaEntradaPorCandle — os dois podem estar ativos ao mesmo tempo.

Exemplo

true + cesta aberta às 10:15 → novo sinal confirmado às 11:00 não abre segunda cesta. Após fechar todas, próximo sinal pode entrar.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

InpUmaEntradaPorCandle

Limita a no máximo uma entrada por candle do timeframe do gráfico. Se já entrou na vela atual, ignora novos disparos até a próxima barra.

Relacionado

Usa g_lastEntryBarTime vs Time[0]. Toggle Uma entrada por vela no painel (BTN_SP_UMA_CDLg_umaEntradaPorCandle). Complementa InpBloquearNovaEntradaComPosicaoAberta (este bloqueia por posição aberta, não por vela).

Exemplo

true, H1: entrou às 10:05 no candle das 10h → outro trigger às 10:40 no mesmo candle é ignorado («já entrou neste candle»). Às 11:00 (nova vela) pode entrar de novo.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

InpUsarApenasCandleFechado

Preferência para operar só com candles START já fechados. Valor inicial ao carregar; em runtime o toggle Candle fechado ON/OFF no painel lateral (g_usarApenasCandleFechado) substitui e persiste. A Fase 1 da estratégia automática já qualifica o candle índice 1 (anterior fechado) a cada nova vela — este parâmetro alinha configuração, painel e API de backtest.

Relacionado

Espelhado no painel lateral (BTN_SP_CDL_FECH). Combina com InpUmaEntradaPorCandle (evita múltiplas entradas na mesma vela) e com InpAtivarAutoTrade / AUTO (sem auto, só entra via manual ou após ARMAR OPER.).

Exemplo

true (padrão): às 10:00 no H1, o START é o candle 9h–10h já fechado; confirmação ocorre no candle 10h–11h em formação. false: preferência registrada no painel para setups mais agressivos em TF baixo (estado exportado no JSON do EA).

=== Filtros opcionais (candle anterior) ===

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

InpUsarFiltroCorpoPercentualRange

Ativa o filtro que exige que o corpo do candle START ocupe uma fração mínima e máxima do range total (high − low). Candles com corpo «muito pequeno» ou «quase doji com range grande» são reprovados.

Relacionado

Precisa estar true (g_filtroRangeOn) para InpMinCorpoPercentualRange e InpMaxCorpoPercentualRange valerem. Toggle Filtro corpo (range) no painel principal. Bypassado por ARMAR OPER. (força START sem filtros).

Exemplo

true, min=70, max=95. Candle com range 1000 pts e corpo 800 pts → 80% → aprovado. Corpo 600 pts → 60% → rejeitado.

No MT5: mínimo / máximo: corpo em % do range

InpMinCorpoPercentualRange / InpMaxCorpoPercentualRange

Limites inferior e superior do corpo em percentual do range (high − low) do candle START. O corpo precisa estar entre min e max (inclusive) para passar.

Relacionado

Só aplicados se InpUsarFiltroCorpoPercentualRange = true. Persistem como g_filtroMinPct / g_filtroMaxPct; editáveis no EDT_FILTRO_RANGE do placar (formato 70-95, min < max, 0–100).

Exemplo

InpMinCorpoPercentualRange=70, InpMaxCorpoPercentualRange=95. Range 2000 pts, corpo 1500 pts → 75% → ok. Corpo 1300 pts → 65% → abaixo do mínimo.

No MT5: campo `70-95` típico

(painel EDT min-max corpo/range)

Campo de texto EDT_FILTRO_RANGE no placar principal para editar min e max do filtro corpo/range em runtime, sem reabrir propriedades do EA.

Relacionado

Escreve em g_filtroMinPct e g_filtroMaxPct após validação (dois números 0–100, min < max). Só tem efeito se InpUsarFiltroCorpoPercentualRange / toggle filtro range estiver ON.

Exemplo

Digite 75-90 → aceita STARTs cujo corpo represente entre 75% e 90% do range. Valor inválido 90-70 reverte ao anterior.

=== Filtro sombra de reversão (sombra do candle START) ===

Sombra do lado para onde o preço deve reverter; limites em % do TOTAL do candle (range = high − low).

No MT5: ativa / mín / máx % do total do candle

InpUsarFiltroSombraReversao / InpFiltroSombraReversao*

Filtra o tamanho da sombra na direção da reversão esperada. candle de COMPRA (bullish) → reversão SELL → sombra SUPERIOR (sw_h); candle de VENDA (bearish) → reversão BUY → sombra INFERIOR (sw_l). InpFiltroSombraReversaoMinPct e InpFiltroSombraReversaoMaxPct definem limites em % do TOTAL do candle (range = high − low) — por construção nunca passam de 100%. 0 no mínimo = aceita qualquer sombra pequena; 0 no máximo = sem teto.

Relacionado

Requer InpUsarFiltroSombraReversao = true (g_filtroSombraOn). Toggle Sombra reversão e EDT_SP_SOMBRA_RANGE no painel lateral. Bypassado por ARMAR OPER.

Exemplo

Candle de alta (venda esperada), total 1000 pts: mede a sombra superior. Min=5%, max=30% → sombra válida entre 50 e 300 pts. Sombra superior 400 pts (40%) → rejeitado.

=== Debug visual candle START ===

No MT5: desenha card visual em candles aprovados pelo filtro de tamanho

InpMostrarDebugCandleStart

Liga ou desliga cards visuais sobre candles START que passam o filtro de tamanho mínimo (InpRangeBodyPontos). Mostra corpo, sombra, percentuais e status (ok, rejeitado, entrou, sem confirmação).

Relacionado

Cards só aparecem se corpo ≥ InpRangeBodyPontos. Limitados por InpMaxDebugCandlesStart. Desligado automaticamente em InpModoHeadless no Strategy Tester.

Exemplo

true: após candle H1 fechar com corpo 1200 pts, aparece card verde «OK» ou vermelho com motivo («spread alto», «filtro range», etc.).

No MT5: linhas entrada/TP/SL (preview "e se entrasse") no candle START + operação

InpMostrarLinhasReversao

Desenha sempre as linhas pontilhadas de entrada, TPs e SL que valeriam se houvesse entrada na reversão, cobrindo apenas o candle START fechado + o candle de operação (sem rótulos). É um preview "e se entrasse", independente de haver sinal, posição ou perfil casado. A cada candle novo apaga e recalcula com a barra recém-fechada; também recalcula quando você muda parâmetros no painel, troca de perfil ou de modo.

Relacionado

Em AUTO usa o perfil candidato do candle (ProfileEngine_PreviewMatch, não-destrutivo); em MANUAL/FIXED usa a config carregada — independe do candle satisfazer os filtros. Mesma base de cálculo de entrada/SL/TP da estratégia (InpConfirmacaoReversaoPontos/Percentual, InpModoSL, InpTP_Pontos). Cores: entrada preta, SL vermelho, TP1→TP3 verdes do mais forte ao mais fraco; pernas em trailing (TP=0) não desenham.

Exemplo

InpMostrarLinhasReversao=true: candle das 14h fecha → aparecem linha preta (entrada = open das 15h ± confirmação), linha vermelha (SL) e linhas verdes (TPs) sobre os dois candles. Às 15h fecha → tudo recalculado para o candle das 15h.

No MT5: máximo de candles marcados (remove os mais antigos)

InpMaxDebugCandlesStart

Número máximo de cards de debug mantidos no gráfico. Quando excede, remove os mais antigos para não poluir o chart.

Relacionado

Só relevante com InpMostrarDebugCandleStart = true. Independe dos filtros de entrada — só controla quantos objetos gráficos ficam visíveis.

Exemplo

InpMaxDebugCandlesStart=300: após 300 STARTs marcados, o card #1 é apagado ao criar o #301.

No MT5: deslocamento mínimo acima do high (em pontos) — fallback

InpDebugStartOffsetMinPts

Deslocamento mínimo em pontos do símbolo entre o candle e o card de debug, usado como fallback quando o posicionamento por pixels falha.

Relacionado

Ajuste fino de layout junto com InpDebugLegendOffsetPx, InpDebugLegendCardHeightPx e InpDebugLegendCardWidthBars.

Exemplo

InpDebugStartOffsetMinPts=50: card nunca fica a menos de 50 pts acima do high do candle (compra).

No MT5: distância vertical aproximada entre o candle e o card (pixels)

InpDebugLegendOffsetPx

Distância vertical em pixels entre a borda do candle e o card de debug. Constante em pixels (não escala com zoom do gráfico).

Relacionado

Usado com InpDebugLegendCardHeightPx para calcular posição. Fallback para InpDebugStartOffsetMinPts se conversão falhar.

Exemplo

InpDebugLegendOffsetPx=100: card fica ~100 px acima (compra) ou abaixo (venda) do candle.

No MT5: altura do card em pixels

InpDebugLegendCardHeightPx

Altura fixa do retângulo do card de debug, em pixels.

Relacionado

Combinado com InpDebugLegendOffsetPx (posição) e InpDebugLegendCardWidthPx (largura).

Exemplo

InpDebugLegendCardHeightPx=220: card alto o suficiente para 4–5 linhas de texto (corpo, sombra, status).

No MT5: largura do card em pixels

InpDebugLegendCardWidthPx

Largura fixa do card de debug em pixels (constante, não escala com zoom do gráfico).

Relacionado

Usado no layout e overlap-check junto com InpDebugLegendCardWidthBars (legado, barras). Só relevante com InpMostrarDebugCandleStart = true em live.

Exemplo

InpDebugLegendCardWidthPx=280 → card ~280 px de largura independente do zoom.

No MT5: largura do card em "candles"

InpDebugLegendCardWidthBars

Largura do card expressa em número de barras do timeframe atual. Usado no overlap-check e layout legado; complementa largura em pixels do input InpDebugLegendCardWidthPx.

Relacionado

Só afeta debug visual com InpMostrarDebugCandleStart = true.

Exemplo

InpDebugLegendCardWidthBars=10 no H1: card ocupa largura equivalente a 10 candles de 1 hora.

=== Horário operacional (broker time) ===

Filtro **global** de horas permitidas para qualquer entrada automática. Independe do `horario_operacao` dos perfis JSON (que filtra **por perfil**). Aqui o EA inteiro é bloqueado fora das horas configuradas.

No MT5: horas permitidas. "" = sem restrição. Ex: "10-12" ou "9|13|15-17|22"

InpHorarioOperacao

String com segmentos separados por |. Cada segmento é uma hora isolada ("3") ou range inclusivo ("15-18" = 15, 16, 17, 18). Horas de 0 a 23 em broker time (server time MT5). Vazio ("") = sem restrição horária global. Range invertido ou token inválido gera warning no log.

Relacionado

Diferente de horario_operacao no perfil JSON — este input age como filtro global do EA, independente de perfil. Se ambos existirem, os dois precisam permitir a hora para a entrada acontecer. Avaliado antes de ProcessAutoStrategy.

Exemplo

InpHorarioOperacao="10-12" → EA só arma sinais entre 10h e 12h broker time. "9|13|15-17|22" → 9h, 13h, 15–17h e 22h. Vazio → sem restrição.

=== Encerramento automático ===

No MT5: Hora 0–23 (25=off) · filtro ao atingir hora

InpFechamentoHora / InpFechamentoHoraFiltro

InpFechamentoHora: hora do servidor (0–23) em que o EA tenta encerrar posições abertas; 25 = desligado. InpFechamentoHoraFiltro: define quais ordens fechar (todas, só positivas, só negativas, aguardar positivo, etc. — enum ENUM_FECHAR_FILTRO).

Relacionado

Espelhados em g_fechamentoHora / g_fechamentoHoraFiltro; editáveis no painel lateral (EDT_SP_FECH_HORA, botão BTN_SP_FECH_HORA_F). Independente de InpFechamentoMinutos — cada gatilho é avaliado separadamente. Só age com posição aberta do magic.

Exemplo

InpFechamentoHora=17, filtro=FC_TODAS: às 17:00 server time fecha toda a cesta. InpFechamentoHora=25 → gatilho por hora desligado.

No MT5: N minutos absolutos da entrada · filtro ao atingir o tempo

InpFechamentoMinutos / InpFechamentoMinutosFiltro

InpFechamentoMinutos: após N minutos desde a abertura da cesta (entryTime), dispara encerramento; 0 = off. Contagem em minutos reais, não em número de candles. InpFechamentoMinutosFiltro: mesmo enum de filtro da hora.

Relacionado

g_fechamentoMinutos / g_fechamentoMinutosFiltro no painel lateral. Diferente de InpExitByTimeMinutos (fecha cesta inteira sem filtro) e de InpTempoMaxArmadoMinutos (aborta sinal armado, não posição).

Exemplo

InpFechamentoMinutos=120, filtro=FC_POSITIVAS: 2 h após entrada, fecha só pernas com lucro flutuante. Com filtro FC_AGUARDAR_POSITIVO, armazena gatilho e espera PnL agregado ≥ 0.

=== Defesas adicionais (cortar SL antes de virar) ===

No MT5: 0=off; >0=encerra cesta após N minutos

InpExitByTimeMinutos

Encerra a cesta inteira após N minutos desde a entrada, fechando todas as pernas abertas de uma vez (sem filtro positivo/negativo).

Relacionado

g_exitByTimeMinutos via EDT_SP_EXIT_MIN no lateral. Diferente de InpFechamentoMinutos, que usa filtros (ENUM_FECHAR_FILTRO). Avaliado a cada tick com posição aberta.

Exemplo

InpExitByTimeMinutos=60: entrou às 10:00 → às 11:00 fecha O1–O5 restantes independente de lucro/prejuízo.

No MT5: 0=off; >0=aborta sinal armado se confirmação não vier em N min

InpTempoMaxArmadoMinutos

Timeout do sinal armado (antes de abrir posição). Se a confirmação de preço não ocorrer em N minutos desde g_signalArmedTime, aborta o sinal e libera novo ciclo. 0 = desligado.

Relacionado

g_tempoMaxArmadoMinutos no painel lateral. Diferente de InpExitByTimeMinutos (fecha cesta aberta) e InpFechamentoMinutos (encerramento com filtro). Avaliado a cada tick com sinal armado.

Exemplo

InpTempoMaxArmadoMinutos=30: sinal armado 10:05, sem confirmação até 10:35 → aborta com razão timeout armado (30min).

=== Filtros contra-tendência (motor de regra) ===

Bloqueios duros baseados no snapshot de indicadores no candle START — evitam reverter contra um movimento ainda forte. Todos com default **0 = OFF** (preserva o comportamento legado); habilite via .set ou perfil JSON. Lê os mesmos sinais do **Sistema de Score** (alinhamento multi-TF, ATR stretch, momentum M5).

No MT5: 0=off; bloqueia se trend_aligned <= (4-N)

InpBlockCounterTrend

Bloqueia a entrada quando a reversão vai contra a tendência da maioria dos timeframes maiores. trend_aligned conta quantos dos 4 TFs (H4/D1/W1/MN) estão a favor da reversão (bid vs open de cada um). O gate bloqueia se trend_aligned <= (4 − N), ou seja, com N ou mais TFs contra.

Relacionado

Usa Ind_CalcMultiTFTrend() — os mesmos TFs do Context Score. Complementa InpMaxATRStretchEntry e InpMinExaustaoContraTendencia. Não bloqueia entradas manuais via ARMAR OPER.

Exemplo

InpBlockCounterTrend=3 → bloqueia se 3 ou 4 TFs estão contra a reversão (só deixa passar com no máximo 2 contra). =4 → só bloqueia com os 4 contra.

No MT5: 0=off; bloqueia se atr_stretch > X

InpMaxATRStretchEntry

Bloqueia quando o preço já está muito esticado em relação ao range estatístico do dia (ATR Band). atr_stretch = distância do preço ao day-open em múltiplos do ATR(14 D1). Acima do limite, o movimento ainda tem força (pernada) e reverter é arriscado.

Relacionado

Usa g_indATR_D1_val (ver InpIndATR_Band). Mesmo conceito do componente ATR-stretch do Entry Score, mas aqui como bloqueio duro.

Exemplo

InpMaxATRStretchEntry=2.5 → se o preço está a 2.6× ATR do day-open, não entra (esticado demais). Valores típicos 2.0–3.0.

No MT5: 0=off; em contra-tendência exige RecentM5Ratio <= X

InpMinExaustaoContraTendencia

Quando a entrada é contra-tendência (trend_aligned <= 1), exige sinal de exaustão no curto prazo antes de aceitar: o RecentM5Ratio (ritmo recente do M5 vs. média) precisa estar <= X, indicando que o movimento já desacelerou. Em tendência a favor, este gate não se aplica.

Relacionado

Combina com InpBlockCounterTrend (um bloqueia por quantidade de TFs contra; este exige desaceleração quando se está contra). Lê o momentum M5 do snapshot de indicadores.

Exemplo

InpMinExaustaoContraTendencia=0.5 → contra-tendência só entra se o M5 já desacelerou para metade do ritmo. 0 = desligado.

=== Risco e lotes ===

No MT5: % saldo (>0 ganha prioridade sobre dólar)

InpRiscoPercentual

Percentual do saldo da conta arriscado por operação (até o SL). Se > 0, o EA dimensiona lotes para que a perda total no SL ≈ esse % do saldo.

Relacionado

Tem prioridade sobre InpRiscoDolar quando g_riscoPct > 0. Usa distância real entrada→SL e InpPesos / ordens ativas O1–O5. Campo EDT_RISCO_PCT no painel.

Exemplo

Saldo $10 000, InpRiscoPercentual=1 → risco alvo $100 no SL. Com SL 3000 pts e 5 ordens ativas, lotes são calculados para somar ~$100 de perda no stop.

No MT5: Risco fixo em $ (usado só se g_riscoPct=0)

InpRiscoDolar

Risco fixo em moeda da conta (dólares) por operação. Usado somente quando InpRiscoPercentual = 0 (ou g_riscoPct = 0 no painel).

Relacionado

Segundo na prioridade após InpRiscoPercentual. EDT_RISCO_DOLg_riscoDolar. Combina com InpSL_Pontos (distância do stop) e InpPesos.

Exemplo

InpRiscoPercentual=0, InpRiscoDolar=500 → cada cesta arrisca ~$500 até o SL, repartido pelos pesos das ordens ativas.

No MT5: SL fixo (referência / modo fixo)

InpSL_Pontos

Distância do stop loss em pontos no modo fixo. Também serve de referência/teto na proteção da cesta e no cálculo de lotes (distância nominal quando SL real difere no modo %).

Relacionado

Modo fixo: InpModoSL = SL_FIXO_PONTOS. EDT_SL_FIXOg_slPontos. Usado por InpProtecaoO3_LucroMinimoDolar como teto de SL na proteção.

Exemplo

InpSL_Pontos=3000, modo FIXO, entrada 2650.00 compra → SL ≈ 2650.00 − 30.00 = 2620.00 (XAUUSD, 3000 pts × 0.01).

No MT5: ex.: 5-4-3-2-1

InpPesos

String com 5 inteiros positivos separados por hífen — peso relativo de cada ordem O1–O5 no cálculo de lotes. O risco total é repartido proporcionalmente apenas entre ordens ativas (g_ordAtiva[i]).

Relacionado

EDT_PESOSg_pesos. Se alguma ordem O1–O5 estiver OFF, o risco dela é redistribuído às ativas. Se todas inativas, OpenBasketAuto aborta.

Exemplo

InpPesos=5-4-3-2-1, risco $500, todas ativas → O1 recebe 5/15 do risco, O2 recebe 4/15, etc. Só O1, O3, O5 ativas → pesos efetivos 5, 3, 1 (renormalizados).

=== Take Profit por ordem (O1–O5; 0=sem TP) ===

No MT5: 50-75-150-0-0

InpTP_Pontos

Cinco valores em pontos — TP de cada perna O1 a O5 a partir do preço de entrada. 0 em uma posição = sem TP naquela perna (só SL ou trailing).

Relacionado

EDT_TP_PONTOSg_tpPontos. Botões TP+ / TP− deslocam todos os TPs abertos em ±g_tpStep. Trailing (InpTrailingGatilhos) pode coexistir — TP fecha antes se tocado.

Exemplo

InpTP_Pontos=50-75-150-0-0, compra em 2650: O1 TP +50 pts, O2 +75, O3 +150, O4/O5 sem TP. TP+ com step 10 → todos sobem 10 pts.

No MT5: múltiplo do TP no envio (reancorado no fill depois). 1 = desliga a rede

InpTpSafetyMult

Rede de segurança do TP na abertura: cada perna é enviada com o TP multiplicado por este fator e, assim que o preço de execução real (fill) é conhecido, o EA reancora o TP para o valor correto em pontos a partir da entrada efetiva. Evita que um TP fique perto demais do preço de envio (e seja rejeitado pelo broker ou disparado no fill). 1 desliga a rede (envia o TP já no valor final).

Relacionado

Aplicado em OpenBasketAuto no envio de cada perna; a reancoragem aparece no Journal como Reancoragem O1: TP … recolocado…. Trabalha junto com InpTP_Pontos (valores-alvo por perna).

Exemplo

InpTpSafetyMult=3, O1 com TP-alvo 75 pts: a ordem sai com ~225 pts de TP e, no fill, é recolocada em 75 pts a partir da entrada real.

No MT5: painel EDT_TP_STEP · EDT_SL_STEP

g_tpStep / g_slStep

Incremento em pontos dos botões TP+ / TP− / SL+ / SL− do painel. Um clique ajusta todas as posições abertas via NudgeOpenPositions.

Relacionado

Só funcionam com operação aberta. EDT_TP_STEP e EDT_SL_STEP (ints 1–100000). Independentes de InpTP_Pontos (valores iniciais na abertura).

Exemplo

g_tpStep=10, 3 pernas abertas: TP+ uma vez → cada TP sobe 10 pts. SL− com g_slStep=50 → todos os SLs descem 50 pts (compra).

=== Trailing por ordem (O1–O5; 0=sem trailing na perna) ===

No MT5: gatilhos · distância · passo — três strings O1-O5

InpTrailingGatilhos / InpTrailingDistancia / InpTrailingStep

Trailing stop por perna. Três strings com 5 inteiros separados por hífen (O1–O5). Gatilhos: lucro flutuante em pts para armar trailing. Distância: pts entre preço e SL após armado. Passo: avanço mínimo do SL. Desde v1.145 (etapa 19.3), distância e passo também são strings ("0-0-0-80-80"), alinhadas ao painel — não mais int único replicado 5×.

Relacionado

Runtime: g_trailingGatilhos, g_trailingDistancia, g_trailingStep editáveis no lateral (EDT_SP_TRAIL_*). 0 no gatilho = sem trailing naquela perna; 0 em dist/step = trailing desligado na perna mesmo com gatilho. Complementa o TP por perna (InpTP_Pontos) e a proteção da cesta.

Exemplo

Gatilhos=0-0-0-150-200, Dist=0-0-0-80-80, Step=0-0-0-10-10 → trailing só O4/O5 após +150/+200 pts; SL segue a 80 pts, avanço mínimo 10.

=== Proteção da cesta ===

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

InpAtivarProtecaoCesta

Liga o ajuste automático de SL nas ordens restantes quando pernas intermediárias fecham em TP (cenários O3→O4/O5 ou O4→O5).

Relacionado

Toggle Prot.Cesta no painel (g_protCestaOn). Precisa InpProtecaoO3_LucroMinimoDolar e/ou InpProtecaoO4_LucroMinimoPontos > 0 para efeito prático. Só age com 4–5 ordens na cesta e após TPs parciais.

Exemplo

true, O1–O3 fecharam em TP, O4/O5 abertas → proteção O3 recalcula SL permitido com base no lucro já realizado menos InpProtecaoO3_LucroMinimoDolar.

No MT5: lucro mín. $ pós-O3

InpProtecaoO3_LucroMinimoDolar

Após a O3 fechar (com O4/O5 ainda abertas): reserva em dólares do lucro estimado já realizado (TPs de O1–O3). O risco permitido nas ordens abertas = lucro estimado − este valor (piso 0); distância de SL derivada disso, limitada por InpSL_Pontos.

Relacionado

Requer InpAtivarProtecaoCesta = true. EDT_PROT_DOLg_protO3Dolar. Usa InpSL_Pontos como teto de distância do SL.

Exemplo

Lucro estimado pós-O3 = $800, InpProtecaoO3_LucroMinimoDolar=200 → até $600 de «margem» para SL das pernas restantes; SL ajustado para não arriscar mais que isso.

No MT5: lucro mín. pts O5 só com O4 já fechada

InpProtecaoO4_LucroMinimoPontos

Após a O4 fechar e restar só O5: move SL da O5 para entry ± N pontos a favor (breakeven + buffer configurável).

Relacionado

Requer InpAtivarProtecaoCesta = true e O4 já encerrada. EDT_PROT_PTSg_protO4Pontos. Independe da proteção O3 (fases diferentes da cesta).

Exemplo

InpProtecaoO4_LucroMinimoPontos=50, O5 compra entrada 2650 → SL vai para 2650 + 50 pts = 2650.50 (protege lucro mínimo).

=== Proteção após TP (cesta) ===

No MT5: dispara quando esta ordem fechar em TP

InpProtegerAposTpOrdem

Enum ENUM_PROT_APOS_TP: quando a ordem indicada (O1–O5) fecha em TP, dispara proteção nas pernas ainda abertas movendo SL conforme InpSlProtAposTpPontos. PROT_TP_OFF (0) = desligado.

Relacionado

Requer InpSlProtAposTpPontos > 0. Implementado em CS_Tracking ao detectar fechamento da ordem alvo. BUY: SL → entry + pts; SELL: entry − pts.

Exemplo

InpProtegerAposTpOrdem=1 (após O1), InpSlProtAposTpPontos=10 → quando O1 fecha em TP, SL das demais pernas vai para entry + 10 pts (compra).

No MT5: pts a partir da entrada (BUY=entry+X, SELL=entry-X); 0 = ignora

InpSlProtAposTpPontos

Distância em pontos a favor a partir da entrada para mover SL das pernas abertas quando o gatilho InpProtegerAposTpOrdem dispara.

Relacionado

Só age se InpProtegerAposTpOrdem ≠ OFF e valor > 0. Independe da proteção da cesta O3/O4.

Exemplo

10 pts, compra entry 2650 → SL protegido ≈ 2650.10 nas pernas restantes após TP da ordem configurada.

=== Outros ===

No MT5: 0=magic automático; outro=fixo

InpMagic

Número mágico que identifica ordens desta instância do EA. 0 = EA gera magic único por gráfico/instância; qualquer outro valor = magic fixo (útil para vários EAs no mesmo símbolo).

Relacionado

Todas as funções de posição (HasOpenPositionByMagic, fechamentos, estatísticas ACUMULADO) filtram por este magic. Não alterável em runtime pelo painel.

Exemplo

InpMagic=0 → magic auto gerado por gráfico. InpMagic=151515 → fixo 151515.

No MT5: 0=auto (3/5 dígitos→10x); 1=sem ajuste; 10=broker 3 casas

InpPointScale

Multiplicador do ponto do símbolo. 0 (auto): se o símbolo tem 3 ou 5 casas decimais, multiplica por 10 (converte pontos pipette em pips). 1: sem ajuste (usa o ponto raw do broker). 10: forçar 10× (brokers como Dukascopy com 3 casas). Afeta todos os cálculos em pontos: corpo START, confirmação, SL, TP, trailing, spread, etc.

Relacionado

Grava em g_pointScale no OnInit. PointValue() retorna _Point * g_pointScale. Afeta CalculateLotsForBasket, ParseRangeBodyString, todos os filtros em pontos. Não alterável em runtime.

Exemplo

XAUUSD com 2 casas decimais + InpPointScale=0 → g_pointScale=1 (auto detecta sem ajuste). EURUSD 5 casas + InpPointScale=0 → g_pointScale=10 (1 pip = 10 pontos).

=== Cards de operação, log e info do candle ===

Itens visuais e de diagnóstico (gráfico/Journal) — não afetam a lógica de entrada.

No MT5: canto onde os cards das operações aparecem

InpOpCardLado

Define o canto do gráfico onde ficam os cards flutuantes por operação (um card por cesta, com pernas, PnL e estado). Enum ENUM_OPCARD_SIDE (direita/esquerda).

Relacionado

Renderizado por OpCards_SyncAndDraw (módulo ui/CS_OpCards). Combina com InpOpCardMaxVisiveis.

Exemplo

InpOpCardLado=OPCARD_RIGHT → cards no canto superior direito.

No MT5: quantidade máxima de cards visíveis ao mesmo tempo

InpOpCardMaxVisiveis

Limita quantos cards de operação aparecem simultaneamente; mostra os mais recentes e tira o excedente da tela (não afeta o tracking interno das operações).

Relacionado

Usado por OpCards_SyncAndDraw. Puramente visual.

Exemplo

InpOpCardMaxVisiveis=5 → no máximo 5 cards na tela; a 6ª operação empurra o card mais antigo para fora.

No MT5: loga no Journal a decisão de cada candle

InpLogDecisaoAtivo

Liga o log de decisão por candle no Journal do MT5: para cada vela registra se o candle START foi aceito/rejeitado (e o motivo) e se a operação foi aceita/rejeitada. Útil para estudar por que uma entrada não ocorreu.

Relacionado

Módulo ui/CS_DecisionLog (DecLog_*). Só escreve no Journal — não envia ordens nem desenha no gráfico.

Exemplo

InpLogDecisaoAtivo=true → Journal: Candle Start [09/06 14:00] - rejeitado - corpo 73 pts < mínimo 500 pts.

No MT5: info do candle em formação (tempo/range/corpo/sombras)

InpMostrarInfoCandle

Mostra no gráfico (à direita, acima do preço) o candle em formação: tempo restante para fechar, range (high−low), corpo e sombras em pontos. Ajuda a antecipar se o candle atual vai qualificar como START.

Relacionado

Módulo ui/CS_CandleInfo (CandleInfo_Draw). Puramente visual; não interfere na lógica.

Exemplo

InpMostrarInfoCandle=true → exibe algo como "H1 | 12:34 restante · range 820 · corpo 540 · sombras 120/160".

=== Score de reversão (debug) ===

Input de debug que imprime a decomposição completa do score no log do MT5 (aba Experts).

No MT5: imprime decomposição Entry/Context/Risk/Final no log a cada tick

InpDebugScore

Quando true, a cada tick com candle em formação o EA imprime no log (aba Experts do MT5) a decomposição detalhada dos 4 scores: Entry Score, Context Score, Risk Score e Final Score com todos os componentes individuais (ATR stretch, Z-Score, rejeição, momentum, S/R, VWAP, EMA, sweep, tendência H4, etc.).

Relacionado

Requer os indicadores calculados (Ind_Calc*) — funciona mesmo com painel de indicadores OFF. Útil para entender por que um candle recebeu determinado score. Desligar em live para não sobrecarregar o log.

Exemplo

InpDebugScore=true → log: [SCORE] Entry=72 (ATR:18 Z:15 Rej:25 Body:10 Exh:4) Context=65 (SR:24 VWAP:7 EMA:4 Sweep:20 H4:10 BNC:0) Risk=35 Final=68 → PODE ENTRAR.

=== Indicadores visuais ===

6 indicadores desenhados no gráfico, cada um com toggle individual no painel **INDICADORES**. Os inputs abaixo definem o **estado inicial** dos toggles ao carregar o EA; depois, o painel persiste o estado entre sessões via GlobalVariables. Todos os indicadores são calculados internamente (sem indicadores custom do MT5).

No MT5: S/R D1 (prev day H/L/Open/Close)

InpIndSR_D1

Desenha 4 linhas horizontais no gráfico: High, Low, Open e Close do dia anterior (D1, barra index 1). Também desenha a linha do Day Open (abertura do dia atual). Estas são referências de suporte/resistência usadas pelo score de contexto.

Relacionado

Toggle S/R D1 ON/OFF no painel INDICADORES (g_indSR_D1_On). Dados calculados em Ind_CalcDailyLevels(). Usado pelo Context Score (proximidade S/R), Liquidity Sweep e Testes de nível.

Exemplo

true: 5 linhas aparecem no gráfico — PD High (cinza), PD Low (cinza), PD Open (amarelo), PD Close (amarelo), Day Open (branco). Valores recalculados a cada nova barra D1.

No MT5: ATR Band (day open ± ATR)

InpIndATR_Band

Desenha duas linhas horizontais simétricas: Day Open + ATR(14 D1) e Day Open − ATR(14 D1). Mostra o range estatístico esperado do dia. Quando o preço toca ou ultrapassa a banda, o dia está esticado (ATR stretch ≥ 1.0).

Relacionado

Toggle ATR Band ON/OFF no painel (g_indATR_Band_On). ATR calculado em Ind_CalcATR(). Valor g_indATR_D1_val (em pontos) usado pelo Entry Score (ATR stretch) e normalização de distâncias no Context/Risk Score.

Exemplo

true, XAUUSD: Day Open 2650, ATR D1 = 3000 pts → linhas em 2680 e 2620. Preço em 2690 → ATR stretch ≈ 1.33 (acima da banda superior).

No MT5: EMA 20

InpIndEMA20

Desenha a EMA de 20 períodos do timeframe atual no gráfico. Média móvel exponencial rápida — referência de tendência de curto prazo.

Relacionado

Toggle EMA 20 ON/OFF no painel (g_indEMA20_On). Handle g_hEMA20 criado sob demanda em Ind_CalcEMAs(). Distância bid→EMA20 em g_indEMA20_dist (pontos), usada no Context Score (EMA distance).

Exemplo

true no H1: linha EMA20 aparece no gráfico. Preço 200 pts acima → g_indEMA20_dist = +200.

No MT5: EMA 50

InpIndEMA50

Desenha a EMA de 50 períodos do timeframe atual. Referência de tendência de médio prazo. EMA50 H4 também usada no cálculo de H4 Trend Risk (Risk Score). A análise multi-TF trend (H4/D1/W1/MN) usa bid vs open do candle de cada TF, não mais EMA50.

Relacionado

Toggle EMA 50 ON/OFF no painel (g_indEMA50_On). Distância em g_indEMA50_dist. Multi-TF trend: Ind_CalcMultiTFTrend() compara bid vs open (independe desta EMA). EMA50 H4 (g_hEMA50_H4) ainda usada em Ind_CalcH4TrendRisk().

Exemplo

true: linha EMA50 no gráfico do TF atual. Multi-TF: H4/D1/W1/MN bid vs open → tendência C (compra) ou V (venda) com % de distância. 3/4 a favor = +20 pts no Context Score.

No MT5: Sessões (Asia/London/NY)

InpIndSessoes

Desenha high/low de cada sessão do dia atual: Ásia (00:00–08:00), Londres (08:00–16:00), Nova York (13:00–21:00) em broker time. Linhas horizontais com labels identificando a sessão.

Relacionado

Toggle Sessões ON/OFF no painel (g_indSessoes_On). Calculados em Ind_CalcSessionLevels() usando M5. Valores g_indAsiaHigh/Low, g_indLondonHigh/Low, g_indNYHigh/Low usados no Context Score (S/R) e Liquidity Sweep.

Exemplo

true: 6 linhas (2 por sessão). Ásia high/low em azul claro, London em laranja, NY em verde. Preço rompeu Asia High e voltou → Liquidity Sweep detectado (+20 pts Context).

No MT5: VWAP

InpIndVWAP

Desenha a VWAP (Volume Weighted Average Price) intraday, calculada internamente com barras M5 desde a abertura do dia (00:00 broker time). Proxy usando tick_volume × typical price.

Relacionado

Toggle VWAP ON/OFF no painel (g_indVWAP_On). Calculada em Ind_CalcVWAP(). Valor g_indVWAP_val usado no Context Score (VWAP distance: distância bid→VWAP normalizada pelo ATR).

Exemplo

true: linha VWAP roxa no gráfico. Distância bid→VWAP ≥ 0.8× ATR D1 → +15 pts no Context Score (preço longe da VWAP = mais esticado).

=== Zonas do candle (tempo por faixa) ===

Divide o candle em 3 faixas verticais (% do range a partir do LOW) e mede **quanto tempo o preço passou em cada faixa** durante a formação. Útil para ler **onde o mercado aceitou preço**: muito tempo no topo num candle de alta sugere absorção/distribuição; tempo concentrado na base sugere rejeição rápida. Exibido na coluna Candle Operação do Placar 1 (3 linhas LOW→HIGH).

No MT5: "minA-maxA|minB-maxB|minC-maxC" — 3 faixas, 0..100

InpZonasCandlePct

Define as 3 faixas verticais como % do range (high − low) do candle, a partir do LOW. Exatamente 3 segmentos separados por |, cada um min-max em 0..100. O EA acumula o tempo que o preço (via ticks/M1) ficou dentro de cada faixa enquanto o candle se forma.

Relacionado

Serializado no LiveJson (tempo_por_zona). Backfill via CopyTicksRange quando há histórico de ticks. Mostra as 3 linhas no Placar 1 com o tempo/percentual por faixa.

Exemplo

Default "0-30|31-70|71-100" → base 30% / meio 40% / topo 30%. Candle de alta que passou 70% do tempo na faixa topo (71-100) = preço aceito no alto (possível continuação ou distribuição).

=== STATS Panel API (WR / MFE / MAE + verdict) ===

Painel **STATS** consulta um backend com o histórico de operações e devolve **win-rate, MFE/MAE e um verdict** para o contexto do candle atual (corpo, hora, direção). Ajuda a decidir em tempo real se o setup tem histórico favorável. Veja o cartão dedicado *Painel MT5 · STATS* acima para a leitura dos campos.

No MT5: URL do backend (vazio = desliga)

InpStatsApiUrl

URL base do backend que serve o endpoint /stats/candle-snapshot. Vazio = painel STATS desligado (zero requests). Precisa estar na whitelist de WebRequest do MT5. Mesmo backend do módulo Telegram.

Relacionado

Combina com InpStatsPollSec (frequência). O painel STATS no MT5 também tem botão de reload manual e countdown até o próximo poll.

Exemplo

InpStatsApiUrl=https://api-forex.lcmti.com.br → consulta WR/MFE/MAE do bucket de corpo do candle atual.

No MT5: Polling em segundos do /stats/candle-snapshot

InpStatsPollSec

Intervalo de polling do endpoint de estatísticas. O EA respeita esse throttle internamente (não consulta a cada tick). Valor menor = dados mais frescos, mais requests.

Relacionado

Só relevante com InpStatsApiUrl preenchida. Reload manual no painel força uma consulta fora do ciclo.

Exemplo

InpStatsPollSec=60 → atualiza o painel STATS a cada 60 s.

=== JSON de operações (log estruturado) ===

Grava o ciclo de vida completo de cada operação em JSON, para análise posterior (dashboards, backtests estatísticos, IA). Independente do log de texto do MT5.

No MT5: Salva snapshot completo de cada operação em JSON (Common\Files\Trades\)

InpSalvarOperacoesJson

Quando true, grava um JSON por operação em Common\Files\Trades\ com candle START, entrada, pernas, TP/SL, trailing, fechamentos, PnL e contexto de indicadores/score. É a mesma estrutura consumida pelo backend de estatísticas e pelos dashboards.

Relacionado

Combina com InpTradePathIntervalSec (amostragem do caminho do trade). Funciona em live e no Strategy Tester. Schema único para live / mt5_tester / backtest_player.

Exemplo

InpSalvarOperacoesJson=true → cada cesta encerrada gera um arquivo JSON com todos os campos da operação.

No MT5: Intervalo (s) para amostrar o caminho do trade (0=desligado)

InpTradePathIntervalSec

De quantos em quantos segundos o EA registra um ponto do caminho do preço durante a operação (MFE/MAE ao longo do tempo). 0 = não amostra o caminho (só os eventos). Útil para reconstruir a excursão da cesta.

Relacionado

Só tem efeito com InpSalvarOperacoesJson=true. Alimenta o gráfico de excursão/MFE-MAE nas análises.

Exemplo

InpTradePathIntervalSec=20 → registra preço/PnL a cada 20 s enquanto a cesta está aberta.

=== Sistema de Score (qualificação de reversão) ===

O EA calcula **4 scores** em tempo real para qualificar a entrada: **Entry Score** (setup técnico), **Context Score** (localização no mercado), **Risk Score** (sinais de continuação/perigo) e **Final Score** (combinado). Exibidos no Placar 1 e no card de debug. Decisão textual automática baseada no Final Score. Todos dependem dos indicadores calculados internamente (`Ind_Calc*`).

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Entry Score (0–100)

Mede a qualidade técnica do setup de reversão com 5 componentes:

  • ATR Stretch (25 pts): ≥1.5 = 25, ≥1.2 = 18, ≥1.0 = 12, ≥0.8 = 6. Quanto mais o dia está esticado vs ATR D1, melhor para reversão.
  • Z-Score (20 pts): |Z| ≥2.5 = 20, ≥2.0 = 15, ≥1.5 = 10. Desvio estatístico do preço em relação à SMA20.
  • Rejeição wick (25 pts): ≥70% = 25, ≥55% = 18. Sombra oposta ao corpo em % do range do candle em formação — indica perda de força.
  • Corpo vs M15 avg (15 pts): ≥3× = 15, ≥2× = 10. Corpo atual vs média dos últimos 20 candles M15.
  • Exaustão momentum (15 pts): ratio < 0.3 = 15. Velocidade M5 recente vs início do candle — ratio baixo = desacelerou.

Relacionado

Calculado em Ind_CalcEntryScore(). Peso no Final Score: ×0.4. Impresso no log se InpDebugScore = true.

Exemplo

ATR stretch 1.6 (+25) + Z-Score 2.2 (+15) + rejeição 60% (+18) + corpo 2.5× avg (+10) + exaustão 0.25 (+15) = Entry 83.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Context Score (0–100)

Avalia a localização do preço em relação a referências de mercado com 6 componentes:

  • S/R proximidade (30 pts): distância ao nível S/R mais próximo (PD H/L/O/C, Day Open, sessões) normalizada pelo ATR. <5% ATR = 30, <10% = 24.
  • VWAP distância (15 pts): bid longe da VWAP (≥0.8× ATR = 15). Preço afastado da VWAP reforça reversão.
  • EMA distância (15 pts): max(|EMA20 dist|, |EMA50 dist|) vs ATR. ≥0.8× ATR = 15.
  • Liquidity Sweep (20 pts): preço rompeu um nível (PD High, Asia High, etc.) e voltou → sweep detectado = +20.
  • H4 trend (10 pts): tendência H4 (EMA20 vs EMA50) a favor da reversão.
  • H1 Topo/Fundo (10 pts): padrão de rejeição no H1 (bounce contra a direção).

Relacionado

Calculado em Ind_CalcContextScore(). Peso no Final Score: ×0.4. Usa dados de S/R D1, sessões, VWAP, EMAs, trend H4.

Exemplo

Perto do PD High (+24) + VWAP longe (+15) + EMA longe (+10) + sweep Asia High (+20) + H4 a favor (+10) = Context 79.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Risk Score (0–100)

Mede sinais de que o movimento pode continuar (risco para reversão) com 4 componentes:

  • Momentum forte (25 pts): ratio M5 ≥0.8 = 25, ≥0.5 = 15. Velocidade recente alta = tendência forte.
  • Aceleração (15 pts): velocidade final > 1.5× velocidade inicial do candle.
  • Stretch baixo (15 pts): ATR stretch < 0.5 = dia pouco esticado, reversão menos provável.
  • H4 contra (25 pts): tendência H4 forte contra a reversão esperada. risk ≥70 = 25.

Risk Score alto = perigo: ≥70 → AGUARDAR; ≥85 → EVITAR.

Relacionado

Calculado em Ind_CalcRiskScore(). Peso no Final Score: ×0.3 (subtrai). Risk alto reduz o Final Score significativamente.

Exemplo

Momentum 0.9 (+25) + aceleração 1.8× (+15) + stretch 0.4 (+15) + H4 contra 80 (+25) = Risk 80 → penalidade severa no Final.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Final Score (0–100)

Score combinado: (Entry × 0.4 + Context × 0.4) − (Risk × 0.3), normalizado 0–100. Nos últimos 10% do candle (modo decisão), usa pesos alternativos com Pullback, Exaustão, Bounces, Testes e Tendência. Decisão textual automática:

  • PREMIUM (aumente!): ≥85 — setup excepcional, pode aumentar mão.
  • BOA ENTRADA: ≥75 — entrada confiável.
  • PODE ENTRAR: ≥60 — ok mas atenção aos riscos.
  • AGUARDAR: 40–59 — espere condições melhores.
  • EVITAR: <40 — não vale o risco.

Também gera frase narrativa: tipo do candle + tendência + S/R + veredito (ex: «VENDEDOR rev. COMPRA a FAVOR — SL acima PD Hi — TOP!»).

Relacionado

Exibido no Placar 1 (barra de progresso colorida + texto de decisão). Impresso no card de debug do START. Fórmula em Ind_CalcFinalScore(). Não bloqueia entradas automaticamente — é informativo para o operador. Em AUTO PERFIL, o perfil + filtros decidem a entrada; o score ajuda na decisão manual.

Exemplo

Entry=83, Context=79, Risk=35 → Final = (83×0.4 + 79×0.4) − (35×0.3) = 33.2+31.6−10.5 = 54.3 → normalizado ~64 → PODE ENTRAR.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Tendência Multi-TF (H4 / D1 / W1 / MN)

Analisa a tendência em 4 timeframes superiores: H4, D1, W1 e MN (mensal). Para cada TF, compara o bid atual com a abertura (open) do candle corrente daquele TF: acima = C (compra/bullish), abaixo = V (venda/bearish). Threshold de 50 pontos para evitar flickering perto do neutro. Resultado:

  • 3/4 ou 4/4 a FAVOR da reversão: +20 pts no Context Score — setup muito alinhado.
  • 2/4 PARCIAL: +5 pts — misto, atenção.
  • 0–1/4 CONTRA: −10 pts — tendência contra a reversão, risco alto.

Badges exibem o percentual de distância do preço em relação à abertura: [ H4 V 1.2% ] [ D1 V 0.8% ] [ W1 V 2.9% ] [ MN C 0.5% ].

Relacionado

Calculado em Ind_CalcMultiTFTrend(). Percentuais armazenados em g_trendH4_pct / g_trendD1_pct / g_trendW1_pct / g_trendMN_pct. Influencia Context Score e H4 Trend Risk (no Risk Score). Input InpIndEMA50 controla só o desenho no gráfico do TF atual.

Exemplo

XAUUSD H1: abertura semanal 2700, bid 2630 → W1 V 2.6% (preço 2.6% abaixo do open semanal). Se a reversão esperada é COMPRA e W1 é V (venda), esse TF conta CONTRA.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Pullback / Retrace (% do range)

Percentual do range do candle em formação que o preço recuou do extremo. Mede a sombra de rejeição em tempo real:

  • 10–30%: sombra formando, bom sinal de reversão.
  • <5%: no extremo ainda, sem pullback.
  • >40%: voltou demais, corpo encolhendo.

Relacionado

Calculado em Ind_CalcRejectScore(). Entra no Entry Score (rejeição wick) e no modo decisão do Final Score. Exibido no card de debug e indicadores.

Exemplo

Range 2000 pts, preço recuou 500 pts do high → pullback 25% → bom sinal de rejeição para venda.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Exaustão M5 (velocidade recente)

Compara velocidade dos últimos M5 vs primeiros M5 do candle em formação. Ratio = velocidade final / velocidade inicial:

  • <0.3: ESGOTOU (movimento parou) — favorável para reversão.
  • 0.3–0.5: DESACELERANDO — sinal moderado.
  • >1.0: ACELERANDO — cuidado, momentum forte contra reversão.

Relacionado

Calculado em Ind_CalcMomentum(). g_momRatio entra no Entry Score (exaustão) e no Risk Score (momentum forte). g_momM5_speed_start/end detalhados no log com InpDebugScore.

Exemplo

Início: velocidade 80 pts/M5. Final: 20 pts/M5 → ratio 0.25 → ESGOTOU → +15 pts Entry Score.

=== Painel de Indicadores ===

Painel lateral amplo (840px) acionado pelo botão **INDICADORES** no painel principal. Contém dois blocos: (1) **LIGAR/DESLIGAR** — 6 toggles individuais + botão **TODOS ON/OFF**; (2) **GUIA COMPLETA** — documentação visual em duas colunas explicando cada score, componente e decisão textual.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Botão INDICADORES (painel principal)

Toggle no placar principal que abre/fecha o painel de indicadores. Estado em g_indicadoresPanelOn. Quando aberto, posiciona-se à direita do painel principal (ou do painel de perfis/ajuste fino se estiverem abertos).

Relacionado

Threshold 2 cliques (500 ms). Independe dos toggles InpInd* (estes definem estado inicial; o painel reflete e persiste). Painel inclui os toggles S/R D1, ATR Band, EMA 20, EMA 50, Sessões, VWAP.

Exemplo

2 cliques INDICADORES → painel lateral abre com botões coloridos (ON=verde, OFF=cinza). Clique em 'ATR Band OFF' → vira ON, linhas ATR aparecem no gráfico.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Toggles individuais (S/R D1, ATR Band, EMA 20/50, Sessões, VWAP)

Cada botão liga/desliga o respectivo indicador no gráfico. ON = desenha linhas/zonas; OFF = remove objetos gráficos. Botão TODOS ON/OFF liga ou desliga todos de uma vez.

Relacionado

Estados em g_indSR_D1_On, g_indATR_Band_On, g_indEMA20_On, g_indEMA50_On, g_indSessoes_On, g_indVWAP_On. Persistidos em GlobalVariables. Indicadores são calculados sempre (mesmo com toggle OFF) para alimentar os scores — toggle só controla o desenho visual.

Exemplo

VWAP OFF no painel → linha VWAP não aparece no gráfico, mas g_indVWAP_val continua sendo calculado e o Context Score usa a distância VWAP normalmente.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Guia Completa (documentação no painel)

Bloco inferior do painel de indicadores com documentação em duas colunas explicando todos os componentes do score:

Coluna esquerda: Score Final (fórmula), Entry Score (5 componentes), Context Score (6 componentes), Risk Score (4 componentes), Tendência Multi-TF.

Coluna direita: Pullback/Retrace, Exaustão M5, Bounces M5, S/R + Testes, ATR Stretch + Z-Score, Decisão Textual, Frase Narrativa.

Cores indicam qualidade: verde = bom, amarelo = atenção, vermelho = perigo.

Relacionado

Somente leitura — não é editável. Serve como referência rápida sem sair do MT5. Atualizado ao criar o painel (CreateIndicadoresPanel).

Exemplo

Abre INDICADORES → rola até a guia: vê que Entry Score precisa ATR Stretch ≥1.2 para pontuar 18 pts. Confere no gráfico que ATR stretch está 1.4 → 18 pts confirmados.

=== Sistema de Perfis (JSON) ===

Perfis carregados de um arquivo JSON em `MQL5/Files` (e `Terminal/Common/Files` no Strategy Tester — ver página **`/perfil`**). Cada perfil reescreve um subconjunto dos parâmetros (risco, SL, TPs, filtros, trailing, proteção, body range, horário). Três modos: **MANUAL**, **AUTO PERFIL**, **FIXED**. Modo inicial definido por **InpPerfilModo** (default **AUTO**). JSON ausente/inválido → MANUAL com warning.

No MT5: Caminho do JSON em MQL5/Files (vazio = manual)

InpPerfisJsonFile

Caminho relativo (a partir de MQL5/Files/) do arquivo JSON com a lista de perfis. Vazio = não carrega nada e o EA opera em MANUAL puro com os inputs do .set. Arquivo ausente / JSON malformado / sem perfis válidos = log de warning e o EA segue MANUAL (não bloqueia entradas).

Relacionado

Carregado em OnInit via ProfileEngine_LoadFromFile (tenta MQL5/Files e fallback Common/Files no Tester). Painel PERFISRECARREGAR JSON. Editor web em /perfil (público). Limite CS_MAX_PROFILES = 32.

Exemplo

InpPerfisJsonFile=perfis.json → abre MQL5/Files/perfis.json. No backtest, copie também para Terminal/Common/Files/. Vazio → MANUAL puro.

No MT5: Modo inicial dos perfis

InpPerfilModo

Modo de perfis ao carregar o EA ou iniciar backtest: CS_PROFILE_MANUAL (0) = inputs/.set; CS_PROFILE_AUTO (1) = engine escolhe por candle/hora (default); CS_PROFILE_FIXED (2) = força perfil de InpPerfilFixoNome. Se AUTO/FIXED pedidos sem JSON válido → cai para MANUAL com log.

Relacionado

Aplicado no OnInit após carregar JSON. Depois o usuário troca pelo painel PERFIS (MANUAL / AUTO / duplo-clique no nome = FIXED). Em AUTO, COMPRAR/VENDER/ARMAR OPER. desabilitados.

Exemplo

Backtest com perfis: InpPerfilModo=AUTO + perfis.json carregado → cada entrada resolve perfil via Match. FIXED + InpPerfilFixoNome=moderado → aplica perfil moderado desde o início.

No MT5: Nome do perfil (usado SÓ se InpPerfilModo = FIXED)

InpPerfilFixoNome

String com o nome exato (perfil) de um perfil no JSON. Usado apenas quando InpPerfilModo = FIXED no OnInit. Nome não encontrado → MANUAL com warning.

Relacionado

Deve coincidir com a chave "perfil" no JSON. No live, FIXED também pode ser escolhido pelo painel (duplo-clique no nome).

Exemplo

InpPerfilModo=FIXED, InpPerfilFixoNome=scalp_rapido → EA inicia já com parâmetros desse perfil aplicados.

No MT5: schema (parser manual, tolerante a comentários //)

Esquema JSON do perfil

Array top-level com objetos. Cada perfil tem chaves no nível raiz "perfil" (nome único), "ativo" (opcional, default true — ver seção dedicada), "horario_operacao" (opcional, ver seção dedicada), "candle" (filtros do candle START) e "operacao" (parâmetros de risco/trade). Campos ausentes mantêm o valor do snapshot MANUAL (gravado quando o usuário sai de MANUAL pela primeira vez). Comentários // ... são strip-ados no parse.

Relacionado

Chaves aceitas em candle: InpRangeBodyPontos (int OU string "min-max"), InpMinCorpoPercentualRange, InpMaxCorpoPercentualRange, InpFiltroSombraReversaoMinPct, InpFiltroSombraReversaoMaxPct, InpConfirmacaoReversaoPontos, InpConfirmacaoPercentual, InpSpreadMaxPontos. Em operacao: InpRiscoDolar, InpRiscoPercentual, InpSL_Pontos, InpSL_PercentualCandle, InpPesos, InpTP_Pontos, InpTrailingGatilhos/Distancia/Step, InpAtivarProtecaoCesta, InpProtecaoO3_LucroMinimoDolar, InpProtecaoO4_LucroMinimoPontos, InpProtegerAposTpOrdem, InpSlProtAposTpPontos, InpExitByTimeMinutos, InpTempoMaxArmadoMinutos. InpMaxBodyPontos foi removido — use range em InpRangeBodyPontos. InpMinBodyPontos legado dispara warning mas a chave é ignorada (foi renomeada para InpRangeBodyPontos).

Exemplo

[{ "perfil": "moderado", "candle": { "InpRangeBodyPontos": "1200-2500", "InpMinCorpoPercentualRange": 70 }, "operacao": { "InpRiscoDolar": 600, "InpSL_Pontos": 2000, "InpTP_Pontos": "120-160-240-0-0", "InpAtivarProtecaoCesta": true } }]. Veja perfis/profiles_example.json no repo.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Modos: MANUAL · AUTO PERFIL · FIXED

MANUAL: sem perfil ativo; o EA usa os valores do painel/.set. Edits no painel ficam habilitados. AUTO PERFIL: na hora da entrada, o engine consulta o candle START + a hora do servidor e escolhe o perfil que casa (segundo as regras de prioridade descritas em horario_operacao). FIXED: usuário pré-seleciona um perfil pelo painel; os campos do perfil são aplicados imediatamente e ficam ativos até o usuário voltar para MANUAL ou trocar de perfil.

Relacionado

Switch via painel PERFIS ou InpPerfilModo no backtest. Em AUTO PERFIL, COMPRAR / VENDER / ARMAR OPER. ficam desabilitados. Em FIXED, ARMAR OPER. habilitado. Snapshot MANUAL em g_manualSnap — restore ao voltar para MANUAL.

Exemplo

Usuário em MANUAL ajusta SL=3000, risco=500. Clica perfil moderado no painel (vira FIXED) → painel exibe SL=2000, risco=600 (do perfil) read-only. Clica MANUAL de volta → valores 3000/500 restaurados.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Lock de inputs quando perfil ativo

Quando o modo é AUTO PERFIL ou FIXED, todos os campos editáveis do painel principal (Risco, SL, Corpo range, Filtro corpo, Pesos, TPs) e do Ajuste fino (Spread, Sombra, Trailing, etc.) ficam read-only com aparência acinzentada. Edits via OBJ_EDIT são rejeitadas no Panel2_HandleEndEdit com log informativo.

Relacionado

Exceções: EDT_TP_STEP, EDT_SL_STEP e EDT_SAIR_POSITIVO continuam editáveis (são ferramentas operacionais sobre posições abertas, não parâmetros do perfil). Os botões AUTO ON/OFF, PERFIS, ESTUDO, AJUSTE, INDICADORES e 1..5 ON/OFF ficam sempre ativos.

Exemplo

FIXED com perfil scalp_rapido → tentar editar EDT_RISCO_DOL → log «Painel: edicao bloqueada — perfil ativo (FIXED: scalp_rapido). Volte a MANUAL pra editar.».

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Painel de Perfis (PP_*)

Painel lateral acionado pelo botão PERFIS (acima de AUTO). Lista os perfis carregados + dois botões de modo (MANUAL, AUTO PERFIL) + RECARREGAR JSON. Cada linha tem o nome do perfil + um toggle ON / OFF. Duplo-clique no nome seleciona-o em modo FIXED; duplo-clique em AUTO PERFIL muda para AUTO; duplo-clique em MANUAL volta ao modo manual com os valores snapshot.

Relacionado

Estado em g_profilesPanelOn, g_profileMode, g_profileFixedIdx. RECARREGAR JSON chama ProfileEngine_LoadFromFile de novo (útil para editar o JSON com o EA ligado). O toggle ON/OFF alterna p.ativo in-memory (não persiste no arquivo; pra persistir use a página /perfil ou edite o JSON).

Exemplo

Clica PERFIS → painel lateral abre listando abertura_NY, scalp_rapido, moderado, carregado com ON/OFF cada. Duplo-clique no nome moderado → modo FIXED. Clique simples em OFF do scalp_rapido → perfil fica inativo e ignorado pelo Match.

No MT5: default true — opcional no JSON

Campo `"ativo"` (ON/OFF por perfil)

Cada perfil aceita opcionalmente a chave "ativo": false no nível raiz pra ficar carregado mas ignorado pelo Match. Útil pra desabilitar temporariamente um perfil sem apagar a configuração (ex: "essa semana vou ser conservador, deixo perfis 1, 4 e 5 ON e 2, 3 OFF"). Ausente = true.

Relacionado

Painel: clique simples no botão ON/OFF ao lado de cada perfil alterna o estado in-memory. Em FIXED, desativar o perfil atualmente fixado força volta pra MANUAL automaticamente. Engine: ProfileEngine_Match pula !p.ativo em ambas as rodadas (horário e candle). ProfileEngine_ActiveCount() retorna quantos perfis estão ativos.

Exemplo

No JSON: { "perfil": "scalp_rapido", "ativo": false, "candle": { ... } }. No painel, o perfil aparece com a tag OFF acinzentada. Reativa clicando ON. Perfis ON aparecem na cor verde; OFF acinzentados.

=== Filtro horario_operacao (no perfil) ===

Campo **opcional** no nível raiz do perfil. Limita o perfil a operar apenas em determinadas horas do **broker time** (server time do MT5). Perfis com `horario_operacao` têm **prioridade absoluta** sobre perfis sem.

No MT5: ex.: "3", "15-18", "13|15-17|22"

Sintaxe da string `horario_operacao`

String com segmentos separados por |. Cada segmento é uma hora isolada ("3") ou um range inclusivo ("15-18" = 15, 16, 17, 18). Horas em 0..23. Range invertido ("18-15"), tokens não-numéricos, segmentos vazios, hora > 23 = warning no parse e perfil marcado inválido (ignorado pelo Match).

Relacionado

Parseado em ParseHorarioSpec. Armazenado em p.horarioSegments[] + p.horarioOperacaoRaw. Match feito em HoraInSegments(hora, segs) onde hora = MqlDateTime.hour do candle START.

Exemplo

"3" = só candle que abre às 03:00. "15-18" = das 15h às 18h inclusive. "9|13|15-17|22" = 9, 13, 15-17, 22.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Prioridade absoluta sobre perfis sem horário

Algoritmo do ProfileEngine_Match (AUTO PERFIL): (a) avalia primeiro todos os perfis COM horario_operacao cuja hora bate; (b) se exatamente 1 também passa nos filtros de candle do próprio perfil → vence (perfis sem horário são ignorados na rodada, mesmo que casassem); (c) se mais de 1 → profile_conflict; (d) se a hora bate em algum perfil mas filtros de candle rejeitam → horario_active_candle_rejected (sem fallback); (e) se nenhum perfil com horário tem hora batendo → fallback para perfis SEM horário usando filtros de candle.

Relacionado

Retornos: CS_MATCH_NO_MATCH (−1), CS_MATCH_CONFLICT (−2), CS_MATCH_HORARIO_BLOCK (−3). ProfileEngine_ResolveForEntry mapeia para razões textuais (no_profile_match, profile_conflict, horario_active_candle_rejected).

Exemplo

Perfis: abertura_NY (horario 10-12), moderado (sem horário). Candle START às 10:00 com corpo 1500 pts: se passa filtros de abertura_NY → vence (moderado ignorado mesmo que também passasse). Candle às 14:00: abertura_NY fora do horário → cai para moderado que casa.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Log no live JSON quando perfil casa

A cada cesta aberta, o JSON da operação (LiveJson_BuildOperation) inclui bloco "profile" com mode, name, match_kind (hour ou candle) e, quando match_kind=hour, match_hour (int) + match_spec (raw string do horario_operacao).

Relacionado

Snapshot dos campos é gravado em g_liveCurrent no OpenBasketAuto. Variáveis intermediárias: g_profileLastMatchKind, g_profileLastMatchHour, g_profileLastMatchSpec.

Exemplo

JSON da op: "profile": { "mode": "AUTO", "name": "abertura_NY", "match_kind": "hour", "match_hour": 10, "match_spec": "10-12" }.

=== Sintaxe range em InpRangeBodyPontos ===

Válido no **input F7**, no **EDT_RANGE_BODY** do painel e no bloco `candle` do perfil JSON. Parser único: `ParseRangeBodyString` / `_CSP_AssignRangeBodyPontos`.

No MT5: string "1000" | "700-1000" · int legado no JSON de perfil

Formatos aceitos

String com um número ("1000") = só mínimo; corpo ≥ 1000 pts. String range ("700-1000") = corpo entre min e max inclusive. Inteiro no JSON de perfil (1000) = idem string "1000". String inválida: no input/painelg_rangeBodyInvalid e entradas bloqueadas; no perfil JSON → perfil marcado invalid e ignorado pelo Match.

Relacionado

Grava g_rangeBodyPontos (min), g_rangeBodyMax (max, 0 = sem teto), g_rangeBodyRaw. Teto aplicado em AUTO via _CSP_CandleFiltersPass; em FIXED via ProfileEngine_ActiveBodyMax() no EvaluateStartCandle.

Exemplo

Válidos: "1000", "700-1000", JSON int 1000. Inválidos: "1000-", "abc", "1500-1000", "a-b-c".

=== Painel: blocos extras ===

No MT5: Placar 4 acumulado

InpMostrarAcumulado

Mostra ou esconde o bloco ACUMULADO no painel (totais persistidos por magic: nº ops, win/loss, PnL, melhor/pior, datas). false reduz altura do painel.

Relacionado

Estatísticas gravadas em GlobalVariables MO_ACC_<magic>_*. Independe de InpResetAcumulado (que zera na subida).

Exemplo

true: painel exibe «Ops: 47 | Win: 28 | Total: +$3 200». false: bloco oculto, dados continuam persistidos.

No MT5: OnInit zera stats persistidas

InpResetAcumulado

Se true ao iniciar o EA (OnInit), apaga estatísticas acumuladas gravadas antes de continuar. Deve voltar a false depois — senão zera a cada reload.

Relacionado

Afeta só o bloco ACUMULADO (InpMostrarAcumulado). Não zera posições abertas nem estado do painel (g_*).

Exemplo

InpResetAcumulado=true, reinicia EA → contador de ops volta a 0. Coloque false no .set seguinte para acumular de novo.

=== Telegram Alerts ===

Notificação remota via Telegram **antes do fechamento do candle START**, com botões inline para decidir (entrar/pular, risco, SL, perfil) pelo celular. O EA só fala com **um backend** (InpTgApiUrl); o bot token, o chat ID e os botões de risco/SL ficam **no servidor** — não há mais token/chat no EA. Desligado por padrão; quando InpTgAtivo=false, zero overhead. Sempre desligado no Strategy Tester.

No MT5: Ativa alertas Telegram (false = zero overhead)

InpTgAtivo

Master switch do módulo. Em false (nada de Telegram executa). Em true, a cada tick o EA verifica se deve disparar o alerta InpTgSegundosAntes antes do close, respeitando horário, modo e condição. Após enviar, faz polling no backend aguardando sua decisão até o candle fechar.

Relacionado

Requer InpTgApiUrl preenchida e na whitelist do MT5 (Tools → Options → Expert Advisors → Allow WebRequest). Filtros: InpTgHorarioNotificacao, InpTgModoFiltro, InpTgCondicaoEnvio. Desligado automaticamente no Tester.

Exemplo

InpTgAtivo=true + InpTgApiUrl válida → EA envia o alerta 120s antes do close com corpo, sombra, direção da reversão e a config que seria usada.

No MT5: Horas para notificar. "" = sem restrição. Ex: "10-12" ou "9|13|15-17|22"

InpTgHorarioNotificacao

Horas em que o EA pode notificar. Mesma sintaxe de InpHorarioOperacao: segmentos por |, cada um hora isolada ou range inclusivo (broker time). Vazio = sem restrição. Independente do horário operacional da estratégia — as duas são avaliadas separadamente.

Relacionado

Mesmo parser do horário operacional. Aplicado antes de InpTgCondicaoEnvio: fora da hora, não notifica seja qual for a condição.

Exemplo

InpTgHorarioNotificacao="1-21" (default) → notifica das 1h às 21h. "9|13|15-17" → só nessas horas.

No MT5: Filtrar por modo operacional

InpTgModoFiltro

Enum ENUM_TG_MODE_FILTER restringe em quais modos o EA notifica: TG_MODE_TODOS = qualquer modo; TG_MODE_MANUAL = só MANUAL; TG_MODE_AUTO = só AUTO PERFIL; TG_MODE_FIXED = só FIXED.

Relacionado

Avaliado contra g_profileMode. Modo fora do filtro → notificação suprimida em silêncio.

Exemplo

TG_MODE_AUTO → só recebe alertas quando o EA está em AUTO PERFIL.

No MT5: Quando enviar: horário+corpo OK (estratégia) ou todos

InpTgCondicaoEnvio

Enum ENUM_TG_SEND_CONDITION: TG_COND_STRATEGY = só quando o candle START se enquadra em alguma estratégia (horário + corpo qualificam, perfil casa); TG_COND_TODOS = notifica em qualquer candle dentro do horário de notificação.

Relacionado

Mesmo em TG_COND_TODOS, InpTgHorarioNotificacao se aplica primeiro. TG_COND_STRATEGY exige adicionalmente que o START passe nos filtros de corpo/hora.

Exemplo

TG_COND_STRATEGY: só manda quando corpo ≥ mínimo e hora bate. TG_COND_TODOS: manda em qualquer candle dentro do horário.

No MT5: Sem resposta = ENTRAR com config ativa (ou PULAR)

InpTgDefaultAction

Enum ENUM_TG_DEFAULT_ACTION — o que fazer se você não responder até o candle fechar: TG_DEFAULT_ENTRAR (default) = opera normalmente com a config ativa; TG_DEFAULT_PULAR = ignora o candle e não entra.

Relacionado

A janela de decisão é definida por InpTgSegundosAntes. Sua resposta (entrar/pular, risco, SL, perfil) chega pelo polling e sobrepõe a config no momento da entrada.

Exemplo

TG_DEFAULT_ENTRAR: não respondeu a tempo → EA entra com a config normal. TG_DEFAULT_PULAR: não respondeu → pula.

No MT5: Segundos antes do close para alertar

InpTgSegundosAntes

Quantos segundos antes do fechamento do candle o EA dispara o alerta. A cada tick checa TimeCurrent + InpTgSegundosAntes >= próxima abertura. Esse é o tamanho da sua janela para decidir pelo celular.

Relacionado

Após enviar, o EA faz polling GET no backend até o candle fechar, lendo a decisão. Combina com InpTgDefaultAction (o que vale se a janela expirar sem resposta).

Exemplo

InpTgSegundosAntes=120 → alerta 2 min antes do close do H1; você tem ~2 min para responder.

No MT5: URL do backend (callback do Telegram)

InpTgApiUrl

Endpoint do backend que recebe o alerta (POST) e devolve sua decisão (GET polling). Bot token, chat ID e os botões de risco/SL ficam no servidor, não no EA — por isso aqui só há a URL. Precisa estar na whitelist do MT5.

Relacionado

Obrigatório com InpTgAtivo=true. Default aponta para …/alerts/telegram-callback. Mesmo backend serve a API de STATS (InpStatsApiUrl).

Exemplo

InpTgApiUrl=https://api-forex.lcmti.com.br/alerts/telegram-callback.

=== Performance (Strategy Tester nativo MT5) ===

Input ignorado em **conta live** — só afeta o Strategy Tester. Otimização em massa: use **InpModoHeadless=true** (default).

No MT5: true: desliga painel/labels/debug visual no Strategy Tester (motor puro). Ignorado em live.

InpModoHeadless

Quando true no Tester, desliga painel, labels, cards de debug e indicadores visuais — roda só o motor de regras (Strategy + Risk + Tracking + Closing). Performance significativamente melhor em otimização. Ignorado em live (painel e indicadores sempre disponíveis). Default true desde v1.200.

Relacionado

Desliga automaticamente InpMostrarDebugCandleStart e objetos do painel no Tester. Perfis JSON e a lógica de score continuam funcionando internamente mesmo em headless (para log JSON). Cards de debug STUDY_ não existem no Tester.

Exemplo

Otimização com 10 000 passes: InpModoHeadless=true → sem objetos gráficos, foco em PnL. Backtest visual único: troque para false para ver cards e painel.

Placar 1 — timer + 3 colunas (Candle Start · Operação · Candle Anterior)

O placar principal de leitura. No topo direito, o **timer** (TF | countdown até o candle fechar). Abaixo, **3 colunas** lado a lado: **Candle Start** (esquerda), **Candle Operação** com zonas (centro) e **Candle Anterior** (direita). Embaixo, a **barra de status** com o estado do sinal e o motivo de bloqueio. Tudo somente leitura — serve para ler o setup em tempo real, não para configurar.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Timer — `TF | hh:mm:ss` (LBL_AUTO_CANDLE_CLOSE)

Timeframe do gráfico + contagem regressiva até o candle atual fechar. É o relógio que define quando o candle em formação vira o «candle fechado» e tudo recalcula (Candle Anterior, linhas de reversão, novo START qualificável).

Relacionado

Mesmo instante em que a estratégia reavalia a barra 1 (ver lógica operacional). Quando zera, nasce um novo candle.

Exemplo

H1 | 00:14:48 → faltam ~15 min para o candle de 1h fechar.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Coluna 1 — Candle Start (tot / corpo / sombra / sw_h / sw_l + badges)

Anatomia do candle de gatilho com valor + % do range e um badge verde/vermelho por linha indicando se passa no filtro ativo. candle tot. = range (high−low); corpo = |close−open|; sombra = range−corpo; sw_h = pavio superior; sw_l = pavio inferior. Quando ocioso mostra o candle em formação (bar 0); quando há sinal armado/posição, congela no candle START. Leitura: corpo grande com % alto = vela esticada (bom para reversão); pavio grande na direção da reversão = sinal de exaustão.

Relacionado

Mesmas fórmulas dos filtros (InpRangeBodyPontos, InpMinCorpoPercentualRange/Max, InpFiltroSombraReversao*). Badge usa o perfil casado (AUTO) ou os globais (MANUAL/FIXED). Badge ▲ BUY / ▼ SELL = direção da reversão.

Exemplo

corpo 1500 p [78%], sw_h 250 p [13%] num candle de alta → corpo esticado e pavio superior moderado = setup de venda na reversão.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Coluna 2 — Candle Operação (reversão) + barra de confirmação + zonas

Mostra o candle onde a entrada aconteceria e o progresso da confirmação: a barra vertical enche conforme o preço anda contra o corpo do START em direção ao gatilho (g_signalConfirmacaoPontos). Abaixo, as 3 zonas do candle (LOW→HIGH) com o tempo que o preço passou em cada faixa — ver InpZonasCandlePct. Leitura: barra quase cheia = confirmação iminente; tempo concentrado no topo/base revela onde o preço foi aceito.

Relacionado

Reflete g_signalActive, g_signalConfirmacaoPontos, progresso tick a tick vs open[0] e o tracking de zonas (LiveJson tempo_por_zona). Cores da barra mudam com o estado (longe / neutro / quase entrando).

Exemplo

Sinal de venda, conf=200 pts: barra a 80% = bid já caiu 160 pts abaixo do open[0]. Zonas topo 65% · meio 25% · base 10% = preço passou a maior parte do tempo no alto.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Coluna 3 — Candle Anterior (candle FECHADO, sempre bar 1)

Histórico do último candle fechado, independente de estar armado ou em operação. Linhas: título Candle Ant. [data] (com ↑/↓ da direção do candle); Modo: (Manual / Fixo·perfil / Auto·perfil ou «sem match»); depois tot / corpo / sombra / sw_h / sw_l com valor, % e badge de filtro; e a última linha de status (aprovado em verde ou rejeitado - <motivo> em vermelho, truncada para caber no painel). Leitura: revisão pós-fechamento — por que aquele candle entrou ou foi descartado, e sob qual perfil.

Relacionado

Filtros recalculados contra o perfil candidato (AUTO via ProfileEngine_PreviewMatch, não-destrutivo) ou os globais (MANUAL/FIXED). É a versão em painel do mesmo cálculo das linhas de reversão no gráfico (InpMostrarLinhasReversao).

Exemplo

Candle Ant. ↑ [29/05 18:00] · Modo: Auto - sem match · corpo 701 p [19%] · rejeitado - nenhum perfil compativel → candle de alta com corpo fraco, nenhum perfil pegaria.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Barra de status (rodapé do Placar 1)

Faixa abaixo das colunas com o estado do ciclo à esquerda (sem sinal / aguardando confirmação / armado / em operação) e o motivo do bloqueio quando há (spread alto, posição aberta, já entrou neste candle, fora do horário, timeout armado, sem perfil compatível, etc.).

Relacionado

Reflete g_lastBlockReason, g_signalActive e HasOpenPositionByMagic(). Os scores e indicadores detalhados ficam no painel INDICADORES (toggle próprio).

Exemplo

«Sinal armado · venda» à esquerda; «Bloqueio: spread alto» quando o spread passa InpSpreadMaxPontos.

Modo ESTUDO — simulação no gráfico (sem ordens)

Simula uma cesta nos **mesmos moldes da estratégia** (preço de entrada na confirmação, SL como no `OpenBasketAuto`, pesos/`g_ordAtiva`, TP por perna no **preço de trigger**) e faz **walk-forward barra a barra** até fechar todas as pernas em TP ou SL. Desenhos OBJ com prefixo **STUDY_**.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Gatilho — duplo clique no fundo

Com ESTUDO ON, duplo clique no fundo do gráfico (não em botões/objetos) seleciona o candle START. Primeiro clique regista o tempo da vela; segundo clique na mesma vela dentro de 500 ms dispara DrawStudy.

Relacionado

Requer botão ESTUDO ON (g_estudoOn), AUTO OFF, sem sinal armado e sem posição. Precisa de candle seguinte ao START para simular entrada.

Exemplo

H1, ESTUDO ON: duplo clique no candle das 9h → retângulo laranja no START; simulação tenta entrada no candle das 10h se trigger for tocado.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

START · direção · confirmação

O candle clicado vira START (retângulo laranja). Direção = reversa ao corpo (alta → venda; baixa → compra). Confirmação usa GetConfirmacaoPontos — mesma regra do live. Candle de entrada (azul): high/low devem atravessar o trigger desde o open.

Relacionado

Usa InpConfirmacaoReversaoPontos / InpConfirmacaoPercentual (via globais do painel). Se trigger não tocado intrabar → texto «trigger não tocado», sem linha de entrada.

Exemplo

START de alta, corpo 2000 pts, conf 10% = 200 pts: trigger = open[entrada] − 200. Se low do candle de entrada não chega lá → simulação aborta entrada.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Preço entrada · SL · lotes

Preço de entrada simulado = preço do trigger. SL: modo fixo (g_slPontos) ou % candle (extremos do START). Lotes via CalculateLotsForBasket respeitando ordens O1–O5 ativas. TP por perna = trigger ± pontos de TP.

Relacionado

Espelha InpModoSL, InpSL_Pontos, InpSL_PercentualCandle, InpPesos, InpTP_Pontos e toggles O1–O5 do painel. Não envia ordens reais.

Exemplo

Trigger 2650.00, SL fixo 3000 pts, TP=50-75-150-0-0 compra → O1 TP 2650.50, O2 2650.75, O3 2651.50; lotes proporcionais aos pesos.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Walk-forward TP/SL

Do candle de entrada até a barra 0, testa a cada vela se high/low tocaram SL ou TP de cada perna aberta. Se ambos na mesma vela → SL primeiro (conservador). Calcula PnL em pts e $.

Relacionado

Usa mesmos TP/SL da abertura simulada. Independe de trailing live (simulação não replica trailing dinâmico barra a barra salvo extensão futura).

Exemplo

O1 aberta, candle com high no TP e low no SL → conta SL. Triângulos marcam saídas; balão resume TP/SL/ abertas e total $.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Resumo visual

Balão no gráfico com direção, corpo/conf/SL em pts, contagem de pernas fechadas em TP vs SL vs ainda abertas, e PnL total simulado em dólares. Print no terminal espelha o resumo.

Relacionado

Objetos prefixo STUDY_ removidos ao desligar ESTUDO ou ao ligar novo estudo (ClearAllStudies).

Exemplo

Balão: «SELL | body 1800 conf 180 sl 3000 | TP:2 SL:1 open:2 | +$340 sim».

Placar 2 — botões (comportamento de clique)

No **Strategy Tester** nativo UI read-only para cliques efetivos. Conta real: **tracking global** (`Btn_TrackClick`) — **só um botão por vez**. Janelas: **500 ms** (padrão) ou **2000 ms** para **SAIR POSITIVO**. **Threshold** atual: **2 cliques** para toggles principais **e** para ações COMPRAR/VENDER/FECHAR (constantes `THRESHOLD_TOGGLE` / `THRESHOLD_ACTION` ambas = 2). **TP+/−/SL+/−**: **um clique** imediato, só **com operação aberta**. Botão **INDICADORES** abre o painel de indicadores visuais e score.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

PERFIS

Abre o painel lateral de perfis JSON (PP_*): lista perfis carregados, modos MANUAL / AUTO PERFIL, toggle ON/OFF por perfil, RECARREGAR JSON. Duplo-clique no nome = FIXED.

Relacionado

Estado g_profilesPanelOn, g_profileMode, g_profileFixedIdx. Editor web de perfis em /perfil (exporta perfis.json). Ver seção Sistema de Perfis.

Exemplo

2 cliques PERFIS → painel lateral; duplo-clique em moderado → FIXED com SL/risco do perfil read-only no painel principal.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

AUTO

Botão principal que liga/desliga a estratégia automática em runtime (g_autoTradeOn). Estado persiste entre sessões via GlobalVariables.

Relacionado

Espelha InpAtivarAutoTrade no init. ARMAR OPER. pode qualificar START mesmo com AUTO off (uma vez). ESTUDO ON força AUTO off.

Exemplo

2 cliques rápidos → AUTO OFF → EA para de armar novos sinais (posição aberta continua sendo gerida).

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Estudo (botão ESTUDO ON/OFF)

Ativa modo simulação no gráfico sem enviar ordens. Duplo clique no botão alterna g_estudoOn. Ao ligar, limpa estudos anteriores e desliga AUTO.

Relacionado

Só liga com AUTO OFF, sem sinal armado (g_signalActive) e sem posição. Duplo clique no gráfico dispara simulação — ver Modo ESTUDO.

Exemplo

2 cliques → ESTUDO ON → duplo clique num candle H1 passado → desenho STUDY_ com TP/SL simulados.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Op: AMBOS / COMPRA / VENDA

Cicla direções permitidas para a estratégia automática: ambas, só compra ou só venda (sempre na lógica reversa ao START).

Relacionado

Espelha InpTipoOperacaog_tipoOperacao. Não bloqueia COMPRAR/VENDER manual diretamente.

Exemplo

2 cliques: AMBOS → COMPRA → VENDA → AMBOS. Em COMPRA, START de alta (venda) é ignorado.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

SL: FIXO / PERC

Alterna modo de cálculo do stop loss entre pontos fixos e percentual ancorado no candle START.

Relacionado

Espelha InpModoSLg_modoSL. Valores numéricos em EDT_SL_FIXO e EDT_SL_PERC.

Exemplo

2 cliques: FIXO → PERC. Próxima entrada usa SL % com InpSL_PercentualCandle / g_slPercCandle.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Filtro corpo (range)

Liga/desliga filtro que exige corpo do START entre min% e max% do range (high − low).

Relacionado

Espelha InpUsarFiltroCorpoPercentualRangeg_filtroRangeOn. Limites em EDT_FILTRO_RANGE.

Exemplo

2 cliques OFF → STARTs passam sem checar 70–95% range. ON → filtro volta a valer.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Prot.Cesta

Toggle da proteção automática de SL após TPs parciais (O3/O4).

Relacionado

Espelha InpAtivarProtecaoCestag_protCestaOn. Valores em EDT_PROT_DOL / EDT_PROT_PTS.

Exemplo

2 cliques OFF → após TP da O3, SL de O4/O5 não é rescalonado automaticamente.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

ARMAR OPER.

Arma flag para forçar o próximo candle fechado como START válido, ignorando filtros de corpo, sombra, range e corpo mínimo. Consumido em uma tacada.

Relacionado

Funciona mesmo com AUTO OFF (bypass pontual). Requer sem posição aberta. Zera ao ligar ESTUDO.

Exemplo

AUTO off, 2 cliques ARMAR OPER. → na próxima abertura de vela, candle anterior vira START mesmo com corpo 500 pts (< mínimo).

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

O1 … O5 (ativar ordem)

Ativa/desativa cada perna da cesta. Ordens OFF não recebem lote; risco é redistribuído às ativas.

Relacionado

Afeta InpPesos efetivo e InpTP_Pontos / trailing por índice. Se todas OFF, OpenBasketAuto aborta.

Exemplo

O3 OFF, pesos 5-4-3-2-1 → risco de O3 vai para O1,O2,O4,O5 proporcionalmente. 2 cliques em O3 alterna estado.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

COMPRAR / VENDER

Abre cesta manual imediatamente na direção escolhida, sem esperar confirmação tick-a-tick. Mesma lógica de lotes/SL/TP da automática.

Relacionado

Bloqueado se já há posição do magic (InpBloquearNovaEntradaComPosicaoAberta também bloqueia auto, não manual se false). 2 cliques em 500 ms.

Exemplo

2 cliques COMPRAR sem posição → abre até 5 ordens com SL/TP/pesos atuais do painel.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

FECHAR TODAS

Fecha todas as posições abertas do magic neste símbolo (ExecutarFechamentoManual).

Relacionado

Só com posição aberta. 2 cliques em 500 ms. Independe de encerramento automático (InpFechamentoHora, etc.).

Exemplo

Cesta com O1–O3 abertas → 2 cliques FECHAR TODAS → todas as pernas encerradas a mercado.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

SAIR POSITIVO (+ EDT valor $)

Ajusta TPs das pernas abertas para atingir lucro flutuante mínimo em dólares (g_sairPositivoValor), se ainda abaixo do alvo.

Relacionado

Valor alvo em EDT_SAIR_POSITIVO. Janela longa 2000 ms, 2 cliques. Respeita stops level do símbolo.

Exemplo

EDT=300, lucro flutuante $180 → 2 cliques SAIR POSITIVO → TPs puxados para somar ~$300 se possível.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

TP+ TP− SL+ SL−

Desloca TPs ou SLs de todas as posições abertas em ±g_tpStep ou ±g_slStep pontos.

Relacionado

Requer posição aberta. 1 clique imediato. Passos em EDT_TP_STEP / EDT_SL_STEP.

Exemplo

TP+ com step 10 → cada TP sobe 10 pts. SL− com step 50 → SLs descem 50 pts (compra).

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

AJUSTE ▶ / ◀

Mostra ou esconde o painel lateral com toggles e campos extras (spread, trailing, fechamento, etc.).

Relacionado

Controla g_sidePanelOn. Não altera parâmetros — só visibilidade do Painel lateral (AJUSTE).

Exemplo

2 cliques ▶ → painel lateral expande com Bloquear com posição, EDT_SP_SPREAD, etc.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

INDICADORES

Abre o painel lateral de indicadores visuais e score. Contém toggles para ligar/desligar cada indicador no gráfico (S/R D1, ATR Band, EMA 20, EMA 50, Sessões, VWAP + botão TODOS) e uma guia completa documentando o sistema de score em duas colunas.

Relacionado

Controla g_indicadoresPanelOn. Posiciona-se à direita do painel principal (ou do painel de perfis/ajuste se estiverem abertos). 2 cliques. Ver seção Painel de Indicadores para detalhes.

Exemplo

2 cliques INDICADORES → painel 840px abre com botões ON/OFF + guia explicando Entry/Context/Risk/Final Score, Pullback, Exaustão, Multi-TF, decisão textual.

Placar 2 — campos de texto OBJ_EDIT

Ao terminar edição (**EndEdit**) validam e gravam nos **g_*** correspondentes `SavePanelState()`. Inválidos revertem ao valor anterior quando o repaint aplica.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_SL_FIXO · EDT_SL_PERC

Campos numéricos do SL fixo em pontos e do percentual do corpo START para modo SL %.

Relacionado

g_slPontos e g_slPercCandle. Usados conforme SL: FIXO / PERC (g_modoSL). Espelham InpSL_Pontos e InpSL_PercentualCandle.

Exemplo

EDT_SL_FIXO=3000, EDT_SL_PERC=10. Com SL FIXO ativo, novas entradas usam 3000 pts.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_RISCO_DOL · EDT_RISCO_PCT

Risco em dólares fixos ou percentual do saldo por operação.

Relacionado

g_riscoDolar [0..1e6] e g_riscoPct [0..100]. Se g_riscoPct > 0, ignora dólar — espelha InpRiscoPercentual / InpRiscoDolar.

Exemplo

EDT_RISCO_PCT=1, EDT_RISCO_DOL=500 → usa 1% do saldo. Zerar PCT → passa a usar $500.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_PESOS

Cinco pesos inteiros positivos separados por hífen para repartir risco entre O1–O5.

Relacionado

g_pesos. Espelha InpPesos. Ordens OFF redistribuem peso — ver toggles O1–O5.

Exemplo

Digite 5-4-3-2-1 → válido. 5-4-0-2-1 → inválido (zero), reverte.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_TP_PONTOS

Cinco TPs em pontos por perna; 0 = sem TP naquela ordem.

Relacionado

g_tpPontos. Espelha InpTP_Pontos. TP+/- ajusta posições abertas; este campo define default na abertura.

Exemplo

50-75-150-0-0 → O4 e O5 sem TP na abertura.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_RANGE_BODY

Corpo do candle START em pontos — string "1000" (só mín.) ou "700-1000" (range min-max). Desde v1.145 espelha InpRangeBodyPontos via g_rangeBodyRaw.

Relacionado

ApplyRangeBodyStringg_rangeBodyPontos / g_rangeBodyMax. Bypassado por ARMAR OPER. Read-only quando perfil ativo (AUTO/FIXED). String inválida bloqueia entradas.

Exemplo

EDT_RANGE_BODY=1200-2500 → START com 1100 pts rejeitado; 1300 pts ok. Inválido 2500-1200 → reverte e log de erro.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_CONF_PTS · EDT_CONF_PCT

Confirmação em pontos fixos ou percentual do corpo do START. Os dois campos têm exclusão mútua: preencher um torna o outro read-only. Zerar ambos libera os dois para edição. Quando PTS > 0, tem prioridade sobre % em runtime.

Relacionado

g_confPontos / g_confPercentual. Readonly mútuo: confPtsActive = (g_confPercentual <= 0), confPctActive = (g_confPontos <= 0). Ambos zero = ambos editáveis. Perfil ativo trava ambos.

Exemplo

CONF_PCT=10 → campo PTS fica readonly. Zere CONF_PCT → ambos ficam editáveis → digite 300 em PTS → campo PCT fica readonly.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_FILTRO_RANGE

Limites min-max do filtro corpo/range em percentual (0–100).

Relacionado

g_filtroMinPct / g_filtroMaxPct. Só aplica se toggle Filtro corpo (range) ON.

Exemplo

70-95 válido. 95-70 inválido (min ≥ max).

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_PROT_PTS · EDT_PROT_DOL

Parâmetros da proteção da cesta: pontos de buffer na O5 pós-O4 e dólares reservados pós-O3.

Relacionado

g_protO4Pontos / g_protO3Dolar. Requer Prot.Cesta ON (InpAtivarProtecaoCesta).

Exemplo

PROT_DOL=200, PROT_PTS=50 → valores usados nas fases O3 e O4 da proteção.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_TP_STEP · EDT_SL_STEP

Incremento em pontos dos botões TP± e SL±.

Relacionado

g_tpStep / g_slStep. Ints 1..100000. Só afetam posições já abertas via nudge.

Exemplo

EDT_TP_STEP=25 → cada TP+ move 25 pts.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_SAIR_POSITIVO

Alvo em dólares de lucro flutuante para o botão SAIR POSITIVO.

Relacionado

g_sairPositivoValor. Usado só pela ação SAIR POSITIVO (2 cliques, 2000 ms).

Exemplo

EDT_SAIR_POSITIVO=500 → botão tenta configurar TPs para ~$500 de lucro flutuante.

Painel lateral (AJUSTE) — toggles e EDT

Todos os toggles **2 cliques** (500 ms). Estado persiste nas mesmas GV que o painel principal.

No MT5: BTN_SP_BLOQ · UMA_CDL · CDL_FECH

Bloquear com posição / Uma entrada por vela / Só candle fechado

Três toggles de regras operacionais: bloquear nova entrada com posição aberta, limitar uma entrada por candle, e preferência por candle START fechado.

Relacionado

g_bloquearNovaEntrada, g_umaEntradaPorCandle, g_usarApenasCandleFechado. Espelham InpBloquearNovaEntradaComPosicaoAberta, InpUmaEntradaPorCandle, InpUsarApenasCandleFechado.

Exemplo

Bloquear ON + posição aberta → novo sinal confirmado não abre segunda cesta. Uma entrada ON → no máximo 1 entrada por vela.

No MT5: BTN_SP_SOMBRA

Sombra reversão

Liga/desliga filtro de sombra na direção da reversão esperada.

Relacionado

g_filtroSombraOn. Limites em EDT_SP_SOMBRA_RANGE. Espelha InpUsarFiltroSombraReversao.

Exemplo

2 cliques ON → STARTs passam a validar a sombra de reversão (% do total do candle) entre min/max configurados.

No MT5: BTN_SP_FECH_HORA_F · BTN_SP_FECH_MIN_F

Filtro encerramento (hora / minutos)

Cicla o enum de filtro (ENUM_FECHAR_FILTRO) aplicado ao fechamento por hora e por minutos — ex.: todas, só positivas, aguardar positivo.

Relacionado

g_fechamentoHoraFiltro / g_fechamentoMinutosFiltro. Valores de hora/min em EDT_SP_FECH_HORA / EDT_SP_FECH_MIN (ou equivalente minutos).

Exemplo

2 cliques no filtro de hora: TODAS → POSITIVAS → NEGATIVAS → …

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_SP_SPREAD

Spread máximo permitido para nova entrada, em pontos.

Relacionado

g_spreadMaxPontos. Espelha InpSpreadMaxPontos. Checado em IsSpreadOk().

Exemplo

EDT_SP_SPREAD=80 → spread 100 pts bloqueia entrada.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_SP_SOMBRA_RANGE

Limites min-max da sombra de reversão em % do TOTAL do candle, formato a-b.

Relacionado

g_filtroSombraMinPct / g_filtroSombraMaxPct. Requer toggle Sombra reversão ON.

Exemplo

5-30 → sombra de reversão entre 5% e 30% do total do candle START.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_SP_FECH_HORA · EDT_SP_FECH_MIN

Hora do dia (0–23, 25=off) e minutos após entrada para encerramento automático.

Relacionado

g_fechamentoHora / g_fechamentoMinutos. Filtros via botões de ciclo. Espelham InpFechamentoHora / InpFechamentoMinutos.

Exemplo

FECH_HORA=17, FECH_MIN=120 → às 17h ou 2 h após entrada (conforme gatilho), aplica filtro configurado.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_SP_EXIT_MIN

Minutos para exit-by-time da cesta inteira (fecha todas as pernas após N min da entrada). EDT_SP_BE_PTS (break-even) e EDT_SP_MAX_BODY foram removidos — o break-even por perna saiu do EA e o teto de corpo agora é via range min-max em InpRangeBodyPontos (no painel ou em perfil JSON).

Relacionado

g_exitByTimeMinutos. Espelha InpExitByTimeMinutos. Trava (read-only) quando um perfil JSON está ativo. Para teto de corpo, use "InpRangeBodyPontos": "1000-5000".

Exemplo

EXIT_MIN=60 → cesta fecha após 60 min independente de lucro/prejuízo.

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

EDT_SP_TRAIL_GAT · DIST · STEP

Três strings com cinco inteiros cada — gatilho, distância e passo de trailing por O1–O5.

Relacionado

g_trailingGatilhos, g_trailingDistancia, g_trailingStep. Espelham InpTrailingGatilhos / dist / step.

Exemplo

GAT=0-0-0-150-200, DIST=0-0-0-80-80, STEP=0-0-0-10-10 → trailing só O4/O5 após lucros 150/200 pts.

Mover o painel

No MT5 costuma aparecer só o nome da variável abaixo (sem texto descritivo longo).

Barra superior (header)

Arrastar a barra superior do painel reposiciona todos os objetos gráficos do EA no chart. Posição salva via SavePanelPosition.

Relacionado

Não altera parâmetros de estratégia — só layout UI. Posição inicial padrão definida no código (~50 px esquerda, ~200 px topo).

Exemplo

Clique e arraste o header para canto inferior direito → painel permanece lá após reiniciar EA (se GV de posição existir).

Convenções

Convenções

  • Strings v1-v2-v3-v4-v5: ordem O1–O5 (pesos, TP, gatilhos, distância e passo de trailing). Desde v1.145, distância e passo também são strings por perna.
  • 0 em TP, gatilho, distância ou passo = desligado/ignorado naquela perna.
  • InpRangeBodyPontos: string "1000" (min) ou "min-max" no F7, painel e perfil JSON.
  • InpPerfilModo: 0=MANUAL, 1=AUTO (default), 2=FIXED (+ InpPerfilFixoNome).
  • InpHorarioOperacao: filtro global de horas (broker time). Vazio = sem restrição. Formato: "10-12" ou "9|13|15-17|22".
  • InpPointScale: 0=auto (3/5 dígitos→10×), 1=raw, 10=forçar. Afeta todos os cálculos em pontos.
  • Indicadores visuais: 6 toggles (InpInd*) definem estado inicial; painel INDICADORES persiste. Cálculos internos rodam sempre (scores dependem deles).
  • Tendência Multi-TF: bid vs open do candle atual de cada TF (H4/D1/W1/MN). Badges mostram direção (C/V) + % distância. Threshold 50 pts para neutro.
  • Scores: Entry (0–100) × 0.4 + Context (0–100) × 0.4 − Risk (0–100) × 0.3 → Final Score → decisão textual (PREMIUM / BOA / PODE ENTRAR / AGUARDAR / EVITAR).
  • Telegram Alerts (InpTg*): master switch InpTgAtivo (default false = zero overhead). Filtros: horários, modo do EA, condição de envio. Botões inline de risco/SL via backend FastAPI.
  • Confirmação reversão: campos PTS e PCT têm exclusão mútua — preencher um trava o outro; zerar ambos libera os dois.
  • Runtime: muitos g_ espelham Inp no init e depois são alimentados pelo painel + SavePanelState.