Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Facebook!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Experts

Session Reality Auditor - expert para MetaTrader 5

Quoc Dat Quach
Quoc Dat Quach
Software engineer with 8 years in fintech and mobile, writing MQL4/MQL5 since 2017. I build Expert Advisors, indicators, trade and risk-management panels and utilities for MT4/MT5, and I trade forex and gold on MT5 myself.
| Portuguese English Русский 中文 Español Deutsch 日本語 한국어 Français Italiano Türkçe
Visualizações:
13
Avaliação:
(1)
Publicado:
Freelance MQL5 Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

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.

sra-panel

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.

  • Tabela efetiva. Um minuto é real quando existem barras em pelo menos InpLivePct por cento de suas datas (padrão 50). Minutos reais consecutivos de um dia da semana formam as sessões efetivas exibidas ao lado das declaradas.
  • Minutos declarados inativos (C1). Um minuto declarado com barras em, no máximo, InpDeadPct por cento de suas datas (padrão: 25). Cada sequência de minutos inativos consecutivos em um dia da semana é uma constatação.
  • Barras fora da tabela (C2). Um minuto que a tabela considera fechado, mas que possui uma barra em pelo menos uma data. Cada sequência constitui uma ocorrência, com o número de barras nela contidas.
  • Tabela de negociação versus tabela de cotação (C3). Minutos em uma sessão de negociação, mas em nenhuma sessão de cotação (ordens aceitas, sem preço esperado), e minutos em uma sessão de cotação, mas em nenhuma sessão de negociação (preços exibidos, ordens recusadas). Cada sequência é uma ocorrência. InpCheckTrade=false desativa a verificação.
  • Interrupções pontuais (C4). Na linha do tempo real, minuto a minuto: um minuto declarado que não está inativo e não possui barra. Séquências desses minutos, que podem ultrapassar a meia-noite, com duração de pelo menos InpOutageMinutes minutos (padrão 5) são consideradas interrupções; cada uma delas é um resultado com sua data. Minutos inativos são excluídos propositalmente: um minuto que fica vazio na maior parte do tempo é um padrão e pertence a C1; um minuto vazio que normalmente é preenchido é um evento e pertence a esta categoria.

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.

sra-real-vs-tabela

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.

  • …_<símbolo>_summary.csv — uma linha: a janela, os limites e cada contador acima.
  • …_<símbolo>_sessions.csv — todos os registros de cotações e sessões de negociação da tabela.
  • …_<símbolo>_map.csv — 10.080 linhas, uma por minuto da semana: cotação declarada, negociação declarada, ocorrências, datas.
  • …_<símbolo>_effective.csv — as sessões efetivas, uma linha por janela.
  • …_findings.csv — uma linha por resultado de cada símbolo, com dia da semana, início, fim, duração e valor.

Limites, explicados de forma clara

  • A presença é lida a partir das barras M1: um minuto com uma barra conta como cotado. Uma barra existe quando o minuto tem pelo menos um tick; portanto, um silêncio de 30 segundos dentro de um minuto não é considerado aqui; para silêncios em segundos, use uma ferramenta de tick.
  • A ferramenta lê a tabela de sessões tal como está agora. Se a corretora alterou seu horário dentro da janela, os dias mais antigos são avaliados com base na nova tabela.
  • As datas são contadas no calendário; portanto, um feriado reduz a proporção de cada minuto de seus dias úteis em uma data. Isso é intencional: é exatamente o que a tabela não informou.
  • Hora do servidor em toda a análise. Uma mudança no horário de verão dentro da janela desloca a renovação em uma hora para parte das datas, e as proporções desses minutos diminuem de acordo.
  • A profundidade da auditoria é limitada pelo histórico M1 que o terminal mantém para o símbolo (a configuração de barras máximas por gráfico); um histórico mais curto reduz a janela, com uma única linha no diário.
  • Os números acima referem-se a um servidor de demonstração ao longo de cinco semanas. Eles descrevem esse feed, não as contas reais da corretora nem qualquer outro servidor.

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 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 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 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 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.