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

History Integrity 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:
17
Avaliação:
(1)
Publicado:
Freelance MQL5 Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

Cada backtest, cada indicador e cada resultado de otimização depende do histórico de barras que o terminal por acaso possui, e quase ninguém verifica esse histórico. Esta ferramenta faz isso: ela lê as barras que seu terminal passaria para um Expert Advisor e identifica seis tipos de falhas nelas — valores OHLC impossíveis, horários de barras incorretos, barras ausentes enquanto a corretora afirma que estava cotando, barras sem ticks ou sem variação alguma, barras que não condizem com a própria série M1 da corretora e spreads iguais a zero ou acima de um limite definido por você.

hia-marketwatch-panel

Cinco símbolos do Market Watch, M15, 5.000 barras fechadas cada; a análise leva cerca de um segundo. Sess% é a coluna a ser lida — 99,80 para o XAUUSD contra 100,00 para os outros quatro — enquanto Grid% varia entre 68 e 100 e indica, basicamente, quanto tempo de fim de semana cada símbolo possui. Esta é a mesma auditoria do bloco de registro mais abaixo, repetida dois minutos depois em um segundo gráfico para a captura de tela, razão pela qual o prefixo do arquivo difere; todos os números são idênticos. O arquivo de resultados foi desativado para isso, e “csv rows” conta as linhas desse arquivo, razão pela qual aparece 0 ao lado de 85 resultados. O painel fornecido apresenta texto claro sobre um fundo escuro e foi recolorido aqui para preto sobre branco.

O problema

Uma barra ausente fica invisível. As velas ficam lado a lado no gráfico, seja o intervalo entre elas de um período ou de três horas; portanto, uma lacuna no histórico se parece exatamente com um mercado tranquilo. O Testador de Estratégias também não alerta sobre isso: ele modela o que lhe é fornecido, e uma estratégia testada em uma lacuna é testada em um mercado que pulou a hora em que teria gerado prejuízo.

Os defeitos que importam não são exóticos. Uma barra cujo fechamento fica acima de sua própria alta faz com que um teste de stop-loss seja aprovado, quando na realidade ele teria falhado. Um horário de barra duplicado faz com que todos os cálculos de “barras anteriores” apontem para a barra errada. Uma barra com tick zero é um preço que o mercado nunca cotou. Um período de tempo cujas barras não correspondem às próprias barras M1 da corretora significa que dois de seus indicadores estão interpretando dois passados diferentes.

O teste usual para tudo isso é rolar o gráfico e ver se algo parece estranho. Esse teste não encontra nada, e não encontra nada de forma convincente.

O que ele mede

Seis verificações independentes nas últimas N barras fechadas de um intervalo de tempo, para um símbolo, uma lista ou tudo no Market Watch. Cada verificação tem uma definição que pode ser recalculada manualmente, e cada resultado é gravado em um CSV com a hora da barra, para que o relatório possa ser auditado em vez de simplesmente acreditado.

  • Consistência OHLC. alta < baixa, abertura ou fechamento fora do intervalo [baixa, alta], ou qualquer um dos quatro preços igual ou inferior a zero. Um resultado por barra por predicado violado: uma barra invertida produz legitimamente vários resultados, pois a abertura e o fechamento ficam, nesse caso, acima da alta e abaixo da baixa ao mesmo tempo.
  • Horários das barras. Um horário que não aumenta de uma barra para a seguinte (uma duplicata ou uma barra fora de ordem) e uma barra cujo horário de abertura não está na grade do período — time % PeriodSeconds() != 0 —, o que é típico de um histórico gerado por uma importação incorreta ou uma sessão de servidor com falha.
  • Barras ausentes, em relação às próprias sessões do símbolo. Para cada par de barras consecutivas, a ferramenta calcula quantas aberturas da grade estão ausentes entre elas. Em seguida — e essa é a parte que torna o número utilizável —, ela consulta o SymbolInfoSessionQuote para saber se o mercado deveria estar cotando em cada abertura ausente. As aberturas ausentes fora de todas as sessões de cotação são *explicadas* (noites, fins de semana, feriados na tabela de sessões); as aberturas ausentes dentro de uma sessão são inexplicadas e contadas separadamente. Um símbolo sem nenhum registro de sessão é relatado como não classificado — nunca silenciosamente como explicado. Nem esse caso nem uma janela M1 vazia ocorreram na corretora analisada abaixo; eles são tratados, mas não demonstrados.
  • Barras vazias e planas. tick_volume == 0 é uma barra construída a partir de nenhum tick. open == high == low == close com ticks nela é uma barra plana: válida em um horário sem movimentação, suspeita em um horário de alta liquidez e algo que vale a pena saber antes que um indicador divida pelo intervalo da barra.
  • Verificação cruzada M1. Cada barra auditada é reconstruída a partir das barras M1 dentro de sua própria janela — primeira abertura, máxima mais alta, mínima mais baixa, último fechamento, volume total de ticks — e comparada com a barra que a corretora fornece para o período de tempo superior. Apenas as janelas que o histórico M1 realmente abrange são comparadas; janelas além da cobertura do M1 são relatadas como fora da cobertura, e janelas dentro da cobertura que não possuem nenhuma barra M1 recebem seu próprio contador. Os desvios são medidos em pontos, com uma tolerância opcional.
  • Válido spread. O número de barras cujo spread armazenado é zero, o número acima de um limite definido por você e o spread máximo e médio nas barras auditadas. Um histórico repleto de spreads zero é um histórico que não pode responder a nenhuma questão de custo.

O número principal é a cobertura da sessão: a proporção das aberturas que, segundo a própria tabela de sessões da corretora, deveriam existir e que, de fato, possuem uma barra. A cobertura da grade — a mesma proporção em todos os horários, incluindo noites e fins de semana — é exibida ao lado, pois, por si só, ela indica principalmente quantos fins de semana você auditou.

Exemplo medido

Cinco símbolos do Market Watch de um terminal de demonstração da Exness (build 6230), M15, as últimas 5.000 barras fechadas de cada um, auditadas em cerca de um segundo em 02/10/2026 às 08h07, horário do servidor.

símbolo barras intervalo, dias lacunas aberturas ausentes ausência durante a sessão OHLC defeitos de tempo vazio / estável M1 comparado / incompatível / desvio máximo cobertura da grade cobertura da sessão
XAUUSD 5.000 76,5 55 2.342 10 0 0 0 / 0 5.000 / 0 / 0,0000 pontos 68,10 % 99,80 %
EURUSD 5.000 72,1 10 1.920 0 0 0 0 / 0 5.000 / 0 / 0,0000 pts 72,25 % 100,00 %
BTCUSD 5.000 52,1 0 0 0 0 0 0 / 0 5.000 / 0 / 0,0000 pontos 100,00 % 100,00 %
GBPUSD 5.000 72,1 10 1.920 0 0 0 0 / 0 5.000 / 0 / 0,0000 pts 72,25 % 100,00 %
USDJPY 5.000 72,1 10 1.920 0 0 0 0 / 0 5.000 / 0 / 0,0000 pts 72,25 % 100,00 %

Compare as duas colunas de cobertura, pois esse é todo o argumento para separá-las. A cobertura da grade indica 68-72 % para cada símbolo de câmbio e 100 % para o BTCUSD, o que não significa nada, exceto que o mercado de câmbio fecha no fim de semana e o de criptomoedas não. A cobertura de sessão — a mesma proporção calculada apenas com base nas aberturas indicadas pela própria tabela de sessões da corretora — indica 100,00% em quatro ocasiões e 99,80% para o XAUUSD. Um dos números nesse par de colunas é um erro; o restante se deve ao calendário.

Esses 0,20% correspondem a uma única lacuna, e são pequenos o suficiente para serem verificados manualmente. O arquivo de resultados contém uma linha para isso:

símbolo;período;verificação;índice_da_barra;hora_da_barra;campo;detalhe;valor XAUUSD;M15;C3_GAP;3304;07/09/2026 18:30:00;lacuna;classe=inexplicável in_session=10;14

Em uma linha C3_GAP, bar_time é a primeira abertura que está faltando e bar_index é o índice — contado a partir de zero na barra mais antiga auditada — da barra que se segue à lacuna; portanto, essa linha indica: na segunda-feira, 07/09/2026, a barra que abriu às 18:15 é seguida pela barra que abriu às 22:00, e as quatorze aberturas das 18:30 às 21:45 estão ausentes. Os horários de cotação do ouro para uma segunda-feira, conforme declarados por essa corretora, são das 00h00 às 20h58 e das 22h00 às 24h00. Dez das aberturas ausentes, das 18h30 às 20h45, caem dentro do primeiro horário; as quatro restantes, das 21h00 às 21h45, caem no intervalo declarado. Dez sem explicação, quatro explicadas, que é o que a linha indica. Duas horas e meia de uma noite de segunda-feira com alta liquidez que todos os backtests neste terminal silenciosamente ignoram, e no gráfico são duas velas lado a lado.

As outras 2.332 aberturas ausentes do XAUUSD correspondem ao calendário: onze fins de semana com 196 aberturas cada, 43 intervalos diários de quatro e as quatro aberturas de intervalo dentro daquele vazio da segunda-feira — 2.156 + 172 + 4. As 1.920 de cada par de câmbio correspondem a dez fins de semana, e nada mais: 10 x 192 aberturas de 15 minutos somam exatamente 1.920. Esses são os números que tornam a cobertura da grade inútil, e ainda assim vale a pena registrá-los, pois um símbolo cujas aberturas “explicadas” não se alinham com sua tabela de sessões está indicando que a tabela de sessões está errada.

O restante da auditoria não encontrou nada, o que também é um resultado: em 25.000 barras, não houve nenhum valor OHLC impossível, nenhum horário de barra duplicado ou fora da grade, nenhuma barra vazia e nenhuma barra plana, e todas as 25.000 barras corresponderam à própria série M1 da corretora até o último dígito — 0,0000 pontos de desvio máximo. O BTCUSD merece mais uma observação: zero lacunas ao longo de 52 dias e um spread exatamente de 700 pontos em todas as 5.000 barras. Um spread fixo não é um defeito, mas também não é uma medida, e uma estratégia ajustada com base nele é ajustada com base em uma constante.

hia-ausência-por-hora

XAUUSD M15, 5.000 barras: cada abertura de barra ausente por hora do dia do servidor, dividida de acordo com o que a tabela de sessões da própria corretora indica para essa hora. As barras hachuradas representam as aberturas fora dos horários de cotação — onze fins de semana, razão pela qual cobrem todas as horas, além do intervalo diário às 21h. As dez barras sólidas são as únicas aberturas em 25.000 barras que a tabela de sessões não consegue explicar, todas em uma única noite de segunda-feira. Extraído do dump de barras e do dump de sessões desta execução; a própria ferramenta gera os números, não a figura.

Os mesmos cinco símbolos no M1, com o limite de spread definido em 20 pontos, representam o tipo oposto de página e merecem um parágrafo, pois mostram como são as verificações quando são acionadas: 10.613 resultados, barras planas 20 / 22 / 40 no EURUSD / GBPUSD / USDJPY, um spread acima de 20 pontos em todas as 5.000 barras de ouro e BTCUSD, e 25 / 28 / 20 aberturas ausentes dentro de uma sessão nos três pares que não apresentaram nenhuma no M15. O último número não é uma contradição: 5.000 barras M1 abrangem três dias e meio de uma semana, uma janela totalmente diferente, e uma lacuna de um minuto dentro de uma sessão é muito mais comum do que uma de quinze minutos. No M1, as duas colunas de cobertura também convergem — 99,44 e 99,44 para o GBPUSD — porque uma janela tão curta não contém fim de semana para que o número da grade seja inflado.

hia-m1-painel-de-divulgação

A mesma ferramenta no M1 com o limite de spread em 20 pontos: Flat e SprHi agora apresentam valores, InSess identifica lacunas em pares que estavam limpos no M15, e a coluna M1bad é exibida — pois no M1 não há nada abaixo do período auditado, de modo que a verificação cruzada se reporta como ausente — a tabela de resultados nunca mostra um zero para algo que não foi medido.

Verificando o relatório de forma independente

Os contadores acima são verificados por algo que não compartilha nenhum código com a ferramenta. Um script em Python lê apenas o material bruto — o dump de barras e o dump de sessão que o EA grava —, recalcula cada contador das verificações de OHLC, tempo, gap, vazio/estável e spread a partir das definições acima e compara o resultado com o próprio arquivo de resumo do EA.

Ao longo das execuções por trás deste artigo — 15 auditorias de símbolos/períodos nos tempos M1, M15 e W1 —, ele comparou 215 contadores e relatou 0 discrepâncias, incluindo as dez aberturas de gap durante a sessão mencionadas acima, recontadas apenas a partir dos tempos das barras e da tabela de sessão.

Há dois aspectos que essa recontagem não abrange. A verificação cruzada em M1 não está incluída nesses 215 contadores: o script pode extrair a série M1 do próprio terminal e reconstruir as barras, mas esse caminho não foi executado para os números aqui apresentados; portanto, a comparação de 5.000 / 0 discrepâncias baseia-se na contagem do próprio EA. E um contador que é zero em ambos os lados é confirmado apenas como zero — em todas as execuções não houve nenhum valor OHLC impossível, nenhum tempo não crescente ou fora da grade, nenhuma lacuna que não fosse um número inteiro de períodos, nenhuma barra vazia, nenhuma incompatibilidade no M1, nenhuma janela dentro da cobertura do M1 sem uma barra M1 nela e nenhum desvio que a tolerância pudesse absorver. Essas ramificações nunca foram observadas sendo acionadas nos dados medidos aqui.

O que define as características dos defeitos que essa corretora nunca produz é um segundo teste, menor, do próprio script de recontagem: um histórico sintético de 12 barras com os defeitos inseridos manualmente e as contagens esperadas escritas ao lado deles — 29 asserções, sem envolvimento de terminal. O EA aplica os mesmos predicados na mesma ordem, e o que ele faz é uma leitura das duas fontes lado a lado, em vez de uma medição. A estrutura ainda é a origem de duas das decisões desta ferramenta: que uma barra invertida deve produzir cinco resultados em vez de um, pois, com o intervalo invertido, a abertura e o fechamento estão, cada um, acima da máxima e abaixo da mínima; e que um único valor de cobertura não dividido era praticamente sem sentido.

A ferramenta também verifica sua própria aritmética e exibe ambos os lados de cada identidade, de modo que o relatório pode ser verificado sem precisar de nenhum Python:

auditoria 1        : barras 25000 + ausências 8102 = 33102, aberturas esperadas 33102 -> OK
auditoria 1        : aberturas esperadas 33.102, aberturas na grade nos intervalos auditados 33.102 -> OK (5 símbolos OK, 0 não)
auditoria 2        : C1 0 + C2 0 + C3 85 + C4 0 + C5 0 + C6 0 = 85, total de constatações 85 -> OK
auditoria 2        : constatações incluídas no relatório 85, linhas no arquivo de constatações 85, descartadas pelo filtro 0 -> OK

Entradas

Entrada Padrão O que faz
Símbolos: vazio = símbolo do gráfico, * = Market Watch, caso contrário, uma lista separada por , ou ; vazio Um símbolo que o terminal não reconhece é ignorado com uma linha no diário em nível normal e não recebe nenhuma linha de contador; portanto, uma recontagem nunca poderá associar um despejo de barras a uma linha que não registrou nada.
Intervalo de tempo a ser auditado (0 = período atual do gráfico) Atual Qualquer intervalo de tempo da lista. A verificação de grade se desativa a partir de D1, onde as aberturas não ocorrem em uma grade fixa de segundos, e a verificação de lacunas se desativa em MN1, onde a distância entre duas aberturas não é constante.
Barras a serem auditadas por símbolo (barras fechadas, as mais recentes primeiro) 5.000 Apenas barras fechadas. A barra em formação muda por definição e seria relatada como um defeito do mercado, e não do histórico.
C1: verificar a consistência de OHLC verdadeiro máximo < mínimo, abertura ou fechamento fora do próprio intervalo da barra, qualquer um dos quatro preços igual ou inferior a zero. Uma ocorrência por barra por predicado violado.
C2: verificar horários de abertura das barras (ordem, duplicatas, grade) verdadeiro Um horário que não aumenta de uma barra para a seguinte e uma abertura que não é um múltiplo do período.
C3: verificar barras ausentes em relação às sessões de cotação verdadeiro A verificação que gera o número principal. Ela requer a tabela de sessões do símbolo; sem ela, as lacunas são relatadas como “não classificadas” em vez de “explicadas”.
C4: contagem de barras vazias (sem cotações) e planas verdadeiro tick_volume == 0, e onde abertura == alta == baixa == fechamento apresentem ticks.
C5: reconstruir cada barra a partir de M1 e comparar verdadeiro Essa verificação é pesada e merece um aviso: no M15, com mais de 5.000 barras, leva cerca de um segundo para cinco símbolos, mas no W1, com um histórico de 55 anos, é necessária uma solicitação M1 a cada quatro barras e levou mais de sete minutos para quatro símbolos, quase todo esse tempo gasto nas próprias solicitações de histórico do terminal. Desative-a para uma primeira análise de um histórico longo.
C5: ignore desvios de até este número de pontos 0,0 Uma tolerância para uma corretora cujos intervalos de tempo mais longos são construídos com arredondamento. O valor 0 relata todas as diferenças.
C6: sinalizar barras com spread acima deste valor (0 = desativado) 0 Conta as barras acima do limite. A contagem de spread zero, o spread máximo e o spread médio são relatados, independentemente de um limite ter sido definido ou não.
Diário: exemplos de resultados impressos por verificação 5 Quantas linhas reais de cada verificação são impressas na íntegra, de modo que o diário mostre os próprios defeitos e não apenas seu número.
Gravar uma linha CSV por resultado verdadeiro O arquivo de resultados: uma linha por defeito com o tempo de produção, para que o relatório possa ser auditado em vez de simplesmente aceito como verdadeiro.
Além disso, exporte todas as barras auditadas (para uma recontagem independente) false Grava as barras exatamente como o terminal as processou, além da tabela de sessão, o que torna possível uma recontagem independente. Desativar essa opção exclui o dump de uma execução anterior, com uma linha de diário por arquivo: um dump de 5.000 barras ao lado de uma linha de contador de 500 barras é exatamente o erro silencioso que esta ferramenta existe para detectar.
Desenhe a tabela de resultados no gráfico true Em um testador não visual, a opção se desativa automaticamente com uma linha de diário, em vez de apresentar falha.
Canto do painel Canto superior esquerdo Canto de referência da tabela.
Tamanho da fonte do painel 8 A tabela é mais larga do que uma única legenda do gráfico pode exibir, por isso é desenhada como várias colunas de legenda; reduza o tamanho em um gráfico pequeno.
Deslocamento X do painel, px 10 Posição.
Deslocamento do painel Y, px 18 Posição.
Reavaliar a cada N minutos (0 = avaliar uma vez) 0 Para deixar no gráfico. Utiliza o relógio do próprio terminal, portanto, a mesma configuração funciona no Testador de Estratégias.

O relatório

Tudo o que a ferramenta mediu vai para o diário como um único bloco, e os mesmos números são exportados para o CSV. Abaixo está esse bloco referente à execução na tabela acima, textualmente, com a parte por símbolo mostrada apenas para o XAUUSD — os outros quatro símbolos repetem as mesmas dez linhas.

=== Auditor de Integridade do Histórico ============================================ símbolos: 5 (Market Watch) período: M15 barras por símbolo: 5.000 (barras fechadas, as mais recentes primeiro) verificações: C1 em C2 em C3 em C4 em C5 em C6 limite 0 pontos tolerância C5: 0,00 pontos exemplos no diário por verificação: 5 atualização: uma vez prefixo do arquivo: HistoryIntegrityAuditor\MarketWatch_M15_62879570657522_*.csv símbolo 1 de 5: XAUUSD símbolo 2 de 5: EURUSD símbolo 3 de 5: BTCUSD símbolo 4 de 5: GBPUSD símbolo 5 de 5: USDJPY =================================================================== HistoryIntegrityAuditor: a primeira verificação é iniciada em 5 símbolos, M15, hora do servidor 02/10/2026 08:07:11 HistoryIntegrityAuditor: Exemplo C3_GAP 1 de 5: barra M15 do XAUUSD em 17/07/2026 às 21:00:00, classe de gap=explicada, in_session=0, 196 [... exemplos 2 a 5 da mesma verificação ...] === History Integrity Auditor - resultado da passagem 1 ======== Símbolo Barras % da grade % da sessão OHLC Hora Gaps InSess Vazio Flat M1bad SprHi XAUUSD 5.000 68,10 99,80 0 0 55 10 0 0 0 - EURUSD 5.000 72,25 100,00 0 0 10 0 0 0 0 - BTCUSD 5000 100,00 100,00 0 0 0 0 0 0 0 - GBPUSD 5000 72,25 100,00 0 0 10 0 0 0 0 - USDJPY 5.000 72,25 100,00 0 0 10 0 0 0 0 - XAUUSD M15: 5.000 barras de 17/07/2026 20:30:00 a 02/10/2026 07:45:00, 76,47 dias, 10 sessões, ponto 0,001, 0 abertura(s) atrasada(s) em relação ao horário do servidor XAUUSD M15: horário de cotação Dom 22h01-00h00 | Seg 00h00-20h58, 22h00–24h00 | Ter 00h00–20h58, 22h00–24h00 | Qua 00h00–20h58, 22h00–24h00 | Qui 00h00–20h58, 22h00–24h00 | Sex 00h00–20h58 XAUUSD M15: aberturas da grade 7.342 = barras 5.000 + faltantes 2.342, identidade OK, cobertura da grade 68,10%, cobertura da sessão 99,80% XAUUSD M15: C1 ativado, total 0 (máxima < mínima 0, abertura > máxima 0, abertura < mínima 0, fechamento > máxima 0, fechamento < mínima 0, não positivo 0) XAUUSD M15: C2 ativado, total 0 (não crescente 0, fora da grade 0), intervalos que não são um número inteiro de períodos 0 XAUUSD M15: C3 ativado, lacunas 55 (explicadas 54, inexplicadas 1, não classificadas 0), ausentes 2.342, na sessão 10, não classificados 0, maior lacuna 196 slots após 17/07/2026 às 20:45:00 XAUUSD M15: C4 ativado, vazio 0, plano 0 XAUUSD M15: C5 ativado, cobertura M1 de 23/06/2026 03:04:00 a 02/10/2026 08:07:00, comparados 5.000, incompatíveis 0, janela vazia 0, fora da cobertura 0, desvio máximo 0,0000 pontos XAUUSD M15: limite C6 desativado, spread zero 0, acima do limite -, máximo 238 pontos, média 175,1568 pontos XAUUSD M15: resultados deste símbolo 55 [... as mesmas dez linhas para EURUSD, BTCUSD, GBPUSD e USDJPY ...] símbolos: 5 auditados, 0 ignorados; totais: barras 25.000, ausentes 8.102, em sessão 10, resultados 85; auditoria 1: barras 25.000 + ausentes 8.102 = 33.102, aberturas esperadas 33.102 -> OK auditoria 1: aberturas esperadas 33.102, aberturas na grade nos intervalos auditados 33.102 -> OK (5 símbolos OK, 0 não) auditoria 2: C1 0 + C2 0 + C3 85 + C4 0 + C5 0 + C6 0 = 85, total de resultados 85 -> OK auditoria 2: resultados enviados ao relatório 85, linhas no arquivo de resultados 85, descartadas pelo filtro 0 -> OK visão geral do arquivo: HistoryIntegrityAuditor\MarketWatch_M15_62879570657522_overview.csv (5 linhas) resultados do arquivo: HistoryIntegrityAuditor\MarketWatch_M15_62879570657522_findings.csv (85 linhas) resumo dos arquivos: 5 arquivos, 5 linhas; sessões: 5 arquivos, 35 linhas; barras em 5 arquivos, 25.000 linhas; padrão do arquivo: HistoryIntegrityAuditor\MarketWatch_M15_62879570657522_<símbolo>_{summary,sessions,bars}.csv painel: 1.452 x 294 pixels, 16 rótulos, linha mais larga com 119 caracteres ===================================================================

Observe SprHi — na tabela — e acima do limite — na linha C6. O limite de spread era 0, o que significa que a verificação está desativada; portanto, a coluna exibe um traço em vez de um zero. A ferramenta aplica essa regra a todas as colunas da tabela de resultados e a todos os valores das linhas por símbolo: uma verificação que não foi executada imprime -, uma verificação que foi executada e não encontrou nada imprime 0, e os dois caracteres nunca são iguais. Isso é mais importante do que parece — com a verificação de lacunas desativada, um valor de cobertura calculado como barras / (barras + ausências) apresentaria um valor confiável de 100,00 %.

Cinco arquivos são gerados após uma execução, na pasta MQL5\Files\HistoryIntegrityAuditor\:

  • <prefixo>_overview.csv — uma linha por símbolo da lista, incluindo os símbolos que não puderam ser auditados, com seu status.
  • <prefix>_findings.csv — uma linha por defeito: símbolo;período;verificação;índice da barra;hora da barra;campo;detalhe;valor.
  • <prefix>_<símbolo>_summary.csv — todos os contadores de um símbolo, 62 colunas, incluindo a identidade aritmética.
  • <prefix>_<símbolo>_sessions.csv — as sessões de cotação do símbolo conforme declaradas pela corretora, que constituem a entrada que determina se uma lacuna é explicada.
  • <prefixo>_<símbolo>_bars.csv — opcional, as barras auditadas exatamente como foram apresentadas pelo terminal.

Os dois últimos são o que tornam o relatório verificável por outra ferramenta além desta, o que é o tema da seção acima. O prefixo contém a tag do símbolo, o período e o ID do gráfico, de modo que dois gráficos não possam sobrescrever as evidências um do outro, e uma execução do testador grave na própria área de teste do agente, em vez de sobrescrever os arquivos de uma execução ao vivo.

Como usar

  1. Anexe-o a um gráfico do símbolo e do intervalo de tempo em que você realmente realiza os testes, defina o número de barras para, no mínimo, o intervalo usado em seus backtests e leia o diário.
  2. Comece analisando a “cobertura da sessão ” e os “dados ausentes na sessão”. Esses dois números determinam se seus backtests foram executados no mercado real ou em uma simulação do mesmo.
  3. Classifique as linhas C3_GAP do arquivo de resultados por hora em bar_time. Lacunas concentradas em uma hora do dia geralmente indicam um problema no servidor ou na sessão; lacunas distribuídas uniformemente geralmente indicam um download incompleto.
  4. Clique em “Atualizar” na caixa de diálogo “Símbolos” do terminal (ou apague o histórico e deixe que ele seja baixado novamente) e execute a auditoria mais uma vez. A diferença entre as duas execuções é o que faltava localmente no seu terminal, e não o que falta na corretora.
  5. Ative a verificação cruzada M1 para o intervalo de tempo em que seu EA opera. Uma discrepância que ainda persiste após uma atualização do histórico merece uma consulta à corretora: isso significa que duas de suas próprias séries estão em desacordo.
  6. Execute novamente após alterar a corretora, o servidor ou qualquer aspecto relacionado à forma como o histórico é obtido. A qualidade dos dados é uma característica de um terminal específico em um determinado momento, não de um símbolo.

Limites, explicados de forma clara

  • A ferramenta audita o histórico mantido pelo seu terminal, que é o histórico usado pelos seus testes — e não o que o servidor da corretora ainda possa enviar. A atualização do histórico pode alterar todos os números aqui, e a etapa 4 acima existe exatamente por esse motivo.
  • Uma lacuna que a tabela de sessão indica como explicada ainda pode ser uma falha real, pois a tabela de sessão também representa a declaração do broker. A ferramenta mostra ambos os valores para que as duas afirmações possam ser comparadas, em vez de misturadas.
  • A verificação cruzada do M1 só pode se pronunciar até onde o histórico do M1 alcança. Por padrão, ela não se pronuncia sobre barras mais antigas, e a contagem de janelas que foram puladas é exibida ao lado da contagem com a qual foi comparada.
  • Os dados de ticks não são auditados. Os backtests com ticks reais possuem um segundo conjunto de dados com suas próprias falhas, e esta ferramenta não o analisa.
  • Ela apenas relata; não corrige. Nada aqui grava no histórico, e nenhuma constatação por si só prova que a corretora está em falta — um terminal que ficou offline por uma hora produz as mesmas barras ausentes que um feed que parou.
  • Sem funções de negociação, sem DLL, sem acesso à rede, sem arquivos externos: ela lê as barras e grava arquivos CSV na pasta MQL5\Files.

Traduzido do inglês pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/en/code/77919

Mirror Hedge EA (Same terminal and account only) Mirror Hedge EA (Same terminal and account only)

Espelha as operações abertas, modificadas e fechadas por outro EA na mesma conta de hedge, selecionado pelo número mágico. Por padrão, ele inverte a direção (Compra↔Venda, SL↔TP), para que você possa testar retrospectivamente o inverso de uma estratégia com spreads, slippage e execução reais.

Alpha Engine: Intrinsic-Time Coastline Trader Alpha Engine: Intrinsic-Time Coastline Trader

Uma adaptação do Alpha Engine do grupo Olsen: oito agentes de ordens com limite negociam mudanças direcionais no tempo intrínseco em uma conta de hedge. Eles aumentam as posições em casos de overshoot e reduzem as posições ao obter lucro em reversões.

WaveMaster Pro EA WaveMaster Pro EA

Automação orientada por sinais para o osciloscópio WaveMaster. Mecanismo de execução automatizada para o osciloscópio WaveMaster. Lê buffers de sinais em tempo real. Gerenciamento completo de riscos, trailing e ponto de equilíbrio integrados.

Closed Trades Exporter MAE MFE Closed Trades Exporter MAE MFE

O recurso “Exportações” exporta as operações para um arquivo CSV com a Desvio Adverso Máximo (MAE) e o Desvio Favorável Máximo (MFE) em pontos e valor monetário, calculados a partir do histórico do M1, além da porcentagem do movimento disponível que cada operação capturou.