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ção | O que acontece no EA | |
|---|---|---|
| Não clicar em nada | Açã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ção | Equivale 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. | |
| ❌ Pular | Aborta 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 proposta —
SELLouBUY: 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 candle —
DD/MM HH:MMdo 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_ptsatual 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ótulo | Regra (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):
- Score EA —
final≥ 65 = ok, ≥ 50 = médio. - Tendência —
favor=true= ok;aligned≥ 2/4 = médio; senão ruim. - Heatmap — win rate da faixa de corpo × hora (≥ 5 ops).
- Body — win rate só da faixa de corpo.
- Hora — win rate da hora do candle.
- Dia — win rate do dia da semana.
- 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ão — g_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 / CONTRA —
favor=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.
| Linha | Significado | |
|---|---|---|
| Heatmap faixa×hora | Win 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 × hora | WR histórico da direção do alerta naquela hora. | |
| Body faixa | WR só pelo tamanho do corpo (bucket). | |
| Hora | WR agregado da hora (todas faixas). | |
| Dia | WR 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):
| Campo | Cálculo / origem | |
|---|---|---|
| PULL % | g_indRetracePct — retrace do movimento recente. Rótulo FORTE ≥50%, MÉDIO ≥30%, FRACO ≥15%, MÍN abaixo. | |
| vel | Velocidade recente (pull_bounce.velocity / M5). | |
| BNC a/b | bounce_count / bounce_total — toques/contagem de bounce em M5. | |
| S/R | Nível mais próximo (nearest_label) e distância em pts; proximidade MUITO PERTO ≤200, PERTO ≤500, etc. | |
| STR | atr_stretch — distância do preço ao open do dia em múltiplos de ATR D1. | |
| Z | z_score — desvio em relação à média recente. | |
| corpo Xx média | body_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):
| Linha | O que valida | Faixa exibida | |
|---|---|---|---|
| total | Range high−low em pts | — | |
| corpo | Corpo em pts vs InpRangeBodyPontos / max do perfil | ex. 2001-3000 | |
| sombra | % corpo/range vs InpMin/MaxCorpoPercentualRange | ex. 59-96 | |
| sw_h | Pavio superior (% do range) vs filtro sombra — só ativo se reversão for SELL (candle bullish) | ex. 4-21 | |
| sw_l | Pavio inferior — só ativo se reversão for BUY | ex. 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
InpResetAcumuladono 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ão | callback_data | Efeito no banco / EA | |
|---|---|---|---|
| 🟡 Armar operação | alert:{id}:arm | action=arm, decided_by=user → polling seta g_armarProxOper | |
| ❌ Pular | alert:{id}:skip | action=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
| Camada | Função | |
|---|---|---|
| Banco | Tabela backtest_stats_operations — cada linha é uma operação fechada do estudo/backtest (corpo, direção, hora, dia, MFE, MAE, PnL, etc.). | |
| Backend | GET /stats/candle-snapshot agrega SQL (médias, percentis, breakdown). | |
| EA | StatsApi_Fetch() em CS_StatsApi.mqh — polling HTTP a cada InpStatsPollSec (padrão 60 s). | |
| Painel | UpdateStatsBadges() (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:
- body_pts — |close − open| / PointValue() do bar 1. Candles < 50 pts são ignorados.
- direction — direção da reversão: candle de alta →
SELL; candle de baixa →BUY. - hora — hora do bar 1 (0–23).
- dia_semana — 0=Seg … 6=Dom (conversão do
day_of_weekdo MT5). - Opcionais (refinam o veredito no servidor):
trend_aligned(0–4),atr_stretch,score_final.
O backend classifica body_pts em faixas fixas (buckets): <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 +:
| Elemento | Na tela | Significado | |||
|---|---|---|---|---|---|
| WR | Ex.: WR 85 | Win rate % da amostra filtrada principal. | |||
| M | Ex.: M 420 | MFE médio em pontos (movimento favorável médio). | |||
| D | Ex.: D 890 | MAE médio em pontos (magnitude do drawdown; valor exibido é | MAE | ). | |
| Linha amarela/verde/vermelha | Ex.: amostra pequena, cuidado (n=0) | Frase verdict + n = tamanho da amostra da query principal. | |||
| [+] | Botão azul | Abre/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 < 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.:
<400 x BUYou2000-3000 x SELL x 20h x Qui). - amostra total —
COUNT(*)de toda a tabela (ex.: 5150 ops). - n — operações que entraram na query principal (após filtros).
- confiança —
alta(n≥50),media(n≥10),baixa(n<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)
| Card | Cá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):
- by_body_hour — mesma faixa de corpo e mesma hora (ex.:
<400 x 20h). - by_direction_hour — mesma direção e hora (ex.:
BUY x 20h). - by_body — só faixa de corpo.
- by_hour — só hora do dia.
- 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; <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 <400; reversão BUY; 20h; quinta → label <400 x BUY x 20h x Qui.
Passo 2 — Fallback se n < 5
Se a combinação exata tiver poucas ops, relaxa para:
body_range + direction apenas (label ex.: <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ção | Tendência | |
|---|---|---|
| n < 10 | Sempre 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 < 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)
| Input | Padrão | Efeito | |
|---|---|---|---|
| InpStatsApiUrl | https://api-forex.lcmti.com.br | Base da API. Vazio = STATS desligado. | |
| InpStatsPollSec | 60 | Intervalo 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
| Origem | O 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órico | Mesma 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 EA | Placar 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çõesinput),CS_State(globaisg_*+ 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(structCSProfile+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ão há
g_autoTradeOne não hág_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)
- Lê OHLC do START.
- Se não for modo armar forçado:
EvaluateStartCandle— corpo em pontos vs g_rangeBodyPontos (piso); teto vem do perfil FIXED ativo viaProfileEngine_ActiveBodyMax()quandohasBodyMaxFromRangefor true (em MANUAL/AUTO PERFIL não há teto nesse ponto — AUTO valida teto dentro do_CSP_CandleFiltersPassno Match); filtro corpo/range se g_filtroRangeOn, direção reversa do corpo, g_tipoOperacao, g_filtroSombraOn com limites, extremos gravados para SL %. - Primeiro candle do dia civil no período atual: bloqueio — não arma sinal.
- Se aprovado: arma — g_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
- Uma entrada por vela: g_umaEntradaPorCandle + já entrou nesta barra.
- Posição aberta: g_bloquearNovaEntrada + já existe magic no símbolo.
- Spread: > g_spreadMaxPontos → para.
- Confirmação em preço usando Open[0] e distância em pontos igual à calculada em Fase 1 (bid/ask vs open0 ± N×Point).
- Novamente bloqueio 1.º candle do dia antes de enviar.
- Resolve perfil via
ProfileEngine_ResolveForEntry(body, corpoPctRange, sombraRevPct, candleStartTime). MANUAL/FIXED retornam true direto (g_ já refletem o que vai operar). AUTO PERFIL fazMatchagora: pode retornar idx (aplica perfil em g_) ou bloquear com razãono_profile_match,profile_conflictouhorario_active_candle_rejected. Razão é gravada emg_lastBlockReasone o sinal é abortado. 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 emg_liveCurrentpara 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).
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
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 / ParseRangeBodyString → g_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
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
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
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).
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_SPREAD → g_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
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).
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_BLOQ → g_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).
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_CDL → g_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).
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).
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
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
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
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
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
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)
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
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)
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
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
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"
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"
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: 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: 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
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
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)
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
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
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)
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)
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_DOL → g_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)
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_FIXO → g_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
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_PESOS → g_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
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_PONTOS → g_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
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
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
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).
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
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_DOL → g_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
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_PTS → g_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
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
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
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
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
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
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
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)
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
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)
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)
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
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
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)
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
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
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)
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
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\)
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)
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).
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).
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).
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).
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).
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).
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).
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).
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).
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).
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)
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 PERFIS → RECARREGAR 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
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)
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 //)
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).
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).
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 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
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"
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).
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).
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
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/painel → g_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
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
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)
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"
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
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
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)
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
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)
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.
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).
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).
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).
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).
Histórico do último candle fechado, independente de estar armado ou em operação. Linhas: 1ª título Candle Ant. [data] (com ↑/↓ da direção do candle); 2ª 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).
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).
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).
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 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).
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).
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).
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).
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).
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).
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 InpTipoOperacao → g_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).
Alterna modo de cálculo do stop loss entre pontos fixos e percentual ancorado no candle START.
Relacionado
Espelha InpModoSL → g_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).
Liga/desliga filtro que exige corpo do START entre min% e max% do range (high − low).
Relacionado
Espelha InpUsarFiltroCorpoPercentualRange → g_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).
Toggle da proteção automática de SL após TPs parciais (O3/O4).
Relacionado
Espelha InpAtivarProtecaoCesta → g_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).
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).
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).
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).
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).
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).
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).
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).
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).
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).
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).
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).
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).
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
→ ApplyRangeBodyString → g_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).
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).
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).
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).
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).
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
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
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
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).
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).
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).
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).
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).
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).
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 switchInpTgAtivo(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
Inpno init e depois são alimentados pelo painel +SavePanelState.