Cada filtro de tempo em um Expert Advisor, cada regra do tipo “fechar antes do rollover” e cada caixa de sessão em um gráfico se baseia em uma coisa: a tabela de sessões do símbolo, ou seja, os horários que a corretora declara por meio das funções SymbolInfoSessionQuote e SymbolInfoSessionTrade. Esta ferramenta verifica essa tabela em relação ao histórico. Nos últimos N dias inteiros, ela conta, para cada minuto da semana, em quantos desses dias o símbolo possui uma barra M1 e compara o resultado com o que a tabela declara: minutos declarados que geralmente estão vazios, barras em minutos que a tabela considera fechadas, minutos em que as tabelas de negociação e cotação divergem e interrupções pontuais em minutos declarados que normalmente não estão vazios.

Cinco símbolos do Market Watch, com 35 dias inteiros cada (01/09/2026 a 06/10/2026, horário do servidor), uma execução em 62 ms. As colunas “h/wk” da tabela e “Real h/wk” representam as horas por semana declaradas pela tabela de sessão e as horas em que existem barras em pelo menos metade das datas daquele dia da semana. “Dead min/wk” conta os minutos declarados com barras em, no máximo, um quarto de suas datas; “Outages” conta lacunas de cinco minutos ou mais nos minutos declarados que não estão inativos. Apresentado no tamanho de fonte 4 do painel para caber na página; o padrão é 8.
O problema
Uma tabela de sessão é uma declaração, não uma medição. O terminal a exibe na especificação do símbolo e um EA pode lê-la, mas nada a verifica em relação aos preços que realmente chegam. No servidor de demonstração medido abaixo, EURUSD, GBPUSD e USDJPY são declarados como cotados das 00:00 às 24:00 de segunda a quinta-feira. O histórico M1 indica que, logo após as 21h00, horário do servidor, muitas vezes não há preço algum. O ouro, no mesmo servidor, declara uma pausa das 20h58 às 22h00, e suas barras coincidem com a tabela ao minuto — exceto na segunda-feira, 7 de setembro de 2026, feriado nos EUA, quando a última barra antes da interrupção é às 18h27 e duas horas e meia de uma sessão declarada ficam vazias.
Nada disso é visível na tabela, e tudo isso é relevante para a negociação automatizada. Um filtro de tempo criado a partir da tabela tentará negociar em minutos que, muitas vezes, não apresentam preço. O Testador de Estratégias também não possui ticks nesse intervalo, portanto, uma regra que seja acionada “às 21h01” pode simplesmente nunca ser acionada na maioria dos dias. E uma entrada de “horário de negociação” que alguém copiou da especificação está correta apenas na medida em que a especificação estiver correta.
O que ele mede
A janela é [D0, D1): D1 é 00:00, horário do servidor, do dia da barra M1 mais recente do símbolo; assim, o dia de hoje, ainda não concluído, é deixado de fora, e D0 fica InpDays dias inteiros antes (adiado para o primeiro dia inteiro se o histórico M1 começar mais tarde). Para cada minuto da semana, a ferramenta conta as datas daquele dia da semana na janela — no calendário, de modo que um feriado sem nenhuma barra conta como uma data com todos os minutos ausentes — e os ocorrências, ou seja, as datas que possuem uma barra M1 naquele minuto. Um minuto é declarado quando seu início se encontra dentro de uma sessão de cotação do respectivo dia da semana, com o mesmo teste de sessão que o Tick Integrity Auditor utiliza.
O diário imprime a equação aritmética como uma identidade por símbolo: findings_rows == dead_windows + outside_windows + trade_no_quote_windows + quote_no_trade_windows + outages. Uma verificação que não foi medida é deixada em branco no CSV e exibida como - no painel, nunca como 0.
Exemplo medido
Servidor de demonstração da Exness, hora do servidor = UTC, cinco símbolos no Market Watch, InpDays=35, todas as outras entradas em seus valores padrão.
| símbolo | tabela h/semana | real h/semana | minutos inativos / janelas | min. fora | min. de negociação ≠ cotação | interrupções | interrupção mais longa |
|---|---|---|---|---|---|---|---|
| XAUUSD | 114,82 | 114,82 | 0 / 0 | 0 | 0 | 1 | 150 min, seg 07/09/2026 18:28 |
| EURUSD | 119,90 | 119,70 | 7 / 5 | 0 | 0 | 4 | 7 min, quarta-feira, 02/09/2026, 11h39 |
| BTCUSD | 168,00 | 168,00 | 0 / 0 | 0 | 0 | 1 | 13 min, dom, 13/09/2026, 07:16 |
| GBPUSD | 119,90 | 119,62 | 9 / 6 | 0 | 0 | 5 | 9 min, qui 01/10/2026 21:03 |
| USDJPY | 119,90 | 119,57 | 14 / 5 | 0 | 0 | 9 | 10 min, Dom 04/10/2026 21h05 |
O rollover é um intervalo que a tabela não indica. Em todas as 20 noites de segunda a quinta-feira do período, a última barra antes do rollover ocorre às 20h59. Depois disso, pelo menos um minuto entre 21h00 e 21h19 fica sem barra em 16 noites para o EURUSD, 19 para o GBPUSD e 20 para o USDJPY, e quatro ou mais desses minutos estão faltando em 10, 10 e 14 dessas noites, respectivamente. A duração varia de noite para noite, por isso isso se manifesta de duas maneiras: como minutos sem dados, em que a maioria das noites coincide (USDJPY na segunda e na terça-feira, das 21h às 21h05, com barras em, no máximo, uma das cinco datas) e como interrupções, nas quais apenas algumas noites apresentam essa característica (GBPUSD em três noites, contadas a partir das 21h03, quando terminam seus “minutos mortos”, com duração de sete a nove minutos cada). Vinte e oito dos 36 resultados começam entre 21h e 21h15; dois deles são a abertura do USDJPY no domingo, em que a primeira barra surgiu 6 e 10 minutos após as 21h05 declaradas.

Esquerda: proporção das 20 noites de segunda a quinta-feira do período em que o EURUSD apresenta uma barra M1, minuto a minuto das 20h50 às 21h15; a tabela da sessão declara cada um desses minutos como de abertura. À direita: o XAUUSD na segunda-feira, 07/09/2026, comparado às outras quatro segundas-feiras do período; a faixa sombreada representa a quebra declarada pela tabela. Dados extraídos das barras M1 lidas pela interface MCP do terminal, e não da própria saída da ferramenta.
A tabela do ouro está correta, exceto no feriado. As sessões efetivas e declaradas do XAUUSD coincidem em todos os dias úteis, ao minuto: das 00:00 às 20:58 e das 22:00 às 24:00 de segunda a quinta-feira, das 22:01 às 24:00 no domingo e das 00:00 às 20:58 na sexta-feira. Sua única constatação é 07/09/2026, Dia do Trabalho nos EUA, sem nenhuma barra das 18h28 até o intervalo às 20h58, 150 minutos. A tabela não tem como indicar “fechamento antecipado hoje”; o histórico, sim.
Duas interrupções durante o dia afetaram os três pares de moedas ao mesmo tempo. Quarta-feira, 02/09/2026, a partir das 11h39, e quarta-feira, 09/09/2026, a partir das 10h37: sete minutos cada, os mesmos minutos no EURUSD, GBPUSD e USDJPY, enquanto o XAUUSD e o BTCUSD apresentam uma barra em cada um desses minutos. Seja qual for a causa, ela afetou os três pares de moedas ao mesmo tempo e deixou o ouro e o bitcoin ilesos, e é o tipo de evento que um backtest desses dias reproduz sem dizer uma palavra.
O que está correto. Nenhum símbolo possui uma única barra em um minuto que sua tabela indique como fechado, e a tabela de negociação coincide com a tabela de cotações em todos os cinco, portanto, C2 e C3 não encontraram nada aqui. O BTCUSD, declarado como 24/7, é realmente 24/7; sua única interrupção foi de 13 minutos no domingo, 13/09/2026, a partir das 07h16.
Verificando o relatório de forma independente
O relatório pode ser recontado fora do MetaTrader. O script usado para esta página lê apenas o que o Python não consegue obter sozinho — a janela, os três limites, se a verificação de negociação estava ativada e as tabelas de sessão dos arquivos de resumo e de sessões — extrai os horários das barras M1 por meio da interface MCP do terminal e recalcula as 22 colunas de resultados do resumo, todas as 10.080 células do mapa de cada símbolo, as sessões efetivas e as linhas de resultados das definições acima. Na execução mostrada aqui, ele coincide com a ferramenta em todos os valores dos cinco símbolos. Dois erros inseridos manualmente em uma cópia dos arquivos (um contador, uma célula do mapa) foram ambos relatados. Suas próprias definições foram verificadas primeiro em duas semanas sintéticas elaboradas manualmente.
Como usá-lo
Anexe o Expert Advisor a qualquer gráfico. Com InpSymbols vazio, ele audita o símbolo do gráfico; * audita todo o Market Watch; uma lista separada por vírgulas audita esses símbolos. A auditoria é executada uma vez (ou a cada InpRefreshMinutes), imprime a comparação por dia da semana e as interrupções no diário do Expert, desenha a tabela no gráfico e grava os arquivos CSV. Ele lê apenas as tabelas de histórico e de sessão: não há função de negociação no código, nem DLL, nem acesso à rede. Com *, ele analisa apenas os símbolos já presentes no Market Watch; um símbolo mencionado na lista que ainda não esteja lá é selecionado pelo terminal quando seu histórico é lido, como em qualquer solicitação de histórico.
Leia primeiro as linhas do diário. Uma linha como
USDJPY Seg tabela 00:00-24:00 | real 00:00-21:00 21:05-24:00 | inativo 21:00-21:05 (1/5) | fora nenhum
indica que, às segundas-feiras, a tabela declara o dia inteiro; há barras das 00:00 às 21:00 e a partir das 21:05; e cada minuto das 21:00 às 21:05 teve uma barra ativa em, no máximo, uma das cinco segundas-feiras. Use as sessões reais, e não as declaradas, para os filtros de tempo; amplie o InpDays para ver mais semanas e diminua o InpOutageMinutes para ver intervalos mais curtos.
Entradas
| entrada | padrão | significado |
|---|---|---|
| InpSymbols | "" | Símbolos: vazio = símbolo do gráfico, * = Market Watch, caso contrário, lista em CSV |
| InpDays | 28 | Número total de dias do servidor com histórico em M1 a ser auditado (terminando antes de hoje) |
| InpLivePct | 50 | Um minuto é considerado válido quando há barras em pelo menos essa porcentagem dos dias úteis da semana |
| InpDeadPct | 25 | Um minuto declarado é considerado inativo quando há barras em, no máximo, essa porcentagem deles |
| InpOutageMinutes | 5 | Relatar intervalos pontuais nos minutos declarados normalmente ativos a partir dessa duração |
| InpCheckTrade | true | Comparar a tabela da sessão de negociação com a tabela da sessão de cotação |
| InpMaxExamples | 5 | Diário: interrupções impressas por símbolo |
| InpWriteCsv | true | Gravar arquivos CSV de resumo, sessões, mapa, dados efetivos e resultados |
| InpShowPanel | true | Desenhar a tabela de resultados no gráfico |
| InpPanelCorner | CORNER_LEFT_UPPER | Canto do painel |
| InpPanelFontSize | 8 | Tamanho da fonte do painel |
| InpPanelX | 10 | Deslocamento X do painel, px |
| InpPanelY | 18 | Deslocamento do painel Y, px |
| InpRefreshMinutes | 0 | Reauditar a cada N minutos (0 = auditar uma vez) |
Valores fora do intervalo das entradas de auditoria são limitados com uma linha de diário cada (o painel não exibe nenhuma mensagem); o Expert Advisor nunca recusa a inicialização.
Arquivos de saída
Todos os arquivos são salvos em MQL5\Files\SessionRealityAuditor\, separados por ponto-e-vírgula com uma linha de cabeçalho, nomeados <símbolos>_<dias>d_<ID do gráfico>_… para que dois gráficos nunca se sobrescrevam.
Limites, explicados de forma clara
Traduzido do inglês pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/en/code/78079
ATS Trade Management Library - break-even, trailing stop and partial closes for any EA
Monitore as posições abertas em um Expert Advisor: ponto de equilíbrio, trailing stop, dois fechamentos parciais e um stop e uma meta para as posições que não os possuem. Ele nunca abre uma operação.
ATS Prop Rules Monitor - prop firm challenge scoreboard with the room left on every rule
Um painel com as regras de um desafio de prop firm: perda diária, perda máxima (estática ou móvel), meta de lucro, número mínimo de dias de negociação e a regra do “melhor dia” (consistência). Para cada uma delas, ele mostra quanto já foi utilizado e quanto ainda resta, em dinheiro. A opção “Mais uma operação” indica o maior tamanho de lote que ainda mantém um stop-out dentro da margem disponível hoje e da margem de perda máxima. Somente leitura: nunca abre, altera ou encerra uma operação. As predefinições contêm valores típicos; as corretoras alteram suas regras, portanto, verifique as suas e use a predefinição “Personalizada”. Desenvolvido com base na Biblioteca de Risco ATS (ATS_RiskLib.mqh, incluída).
CajasTF – Painel lateral integrado com vários intervalos de tempo para o MT5
Mini-gráfico no painel lateral em tempo real com vários intervalos de tempo, com combinação inteligente de cores, escala de preços independente e cronômetro de contagem regressiva das velas.
Advanced Prop-firm Trade Panel based on S-R
Um painel de negociação manual com um sistema integrado de proteção contra riscos para corretoras de capital próprio e um localizador oculto de níveis de suporte e resistência para o MetaTrader 5.