Um EA pode descarregar dados de uma API em demo e não receber respostas equivalentes no tester. Isso não demonstra que o servidor esteja indisponível. Primeiro confira se a função existe nesse ambiente. Descarregar o valor de hoje e atribuí-lo a decisões antigas muda a experiência; um ficheiro histórico pode conter revisões que só ficaram conhecidas mais tarde.

WebRequest disponível e arquivo correto são verificações distintas

A documentação MQL5 informa que WebRequest não pode executar no Strategy Tester. Adicionar um endpoint às URLs permitidas do terminal não remove essa restrição. Distinga função indisponível em teste, problema de rede, autenticação recusada e resposta obtida durante funcionamento normal. Não transforme um pedido falhado em zero: zero pode ser um valor válido e falha significa ausência de input.

Se uma regra necessita de uma observação económica externa, defina observação, versão, valor e instante de disponibilidade antes de ligar a decisão ao HTTP. Trocar o pedido por um ficheiro não resolve uma cronologia incorreta. O guia de EA separa dados, decisão e execução; aqui a pergunta é o que a camada de dados sabia naquele momento.

Separar adaptadores sem mudar o significado do dado

O adaptador online interpreta uma resposta do fornecedor; o de teste seleciona um registo preservado que já estivesse disponível na decisão. Ambos devem comunicar um valor válido, indisponibilidade explícita ou erro. Esta é uma organização proposta de código, não um robô completo nem compatibilidade garantida com qualquer API.

Guarde respostas brutas separadas dos registos preparados para teste, com fonte, versão do esquema, recolha e evidência de disponibilidade. O período a que uma observação diz respeito é diferente do momento em que ficou conhecida. Uma data de vintage não fornece automaticamente hora UTC exata de publicação; se só conhece o dia, não invente precisão intradiária.

FRED distingue informação disponível hoje sobre o passado daquela conhecida num período anterior. É exemplo de dados versionados, não uma API cambial universal. Antes de transformar um arquivo diário em input intradiário, documente a cronologia do fornecedor. No MQL5, FileOpen usa uma área de ficheiros definida, incluindo diretório do agente durante testes. Caminho relativo não implica a pasta normal do terminal; confira abertura e leitura, sem tratar uma tabela vazia como histórico completo.

Modelo próprio: três versões disponíveis em instantes distintos

Declare a observação fictícia GDP-model no dia 1 de outubro de 2026, sempre em UTC. Não são divulgações de PIB reais. O campo availableAt define acesso no nosso modelo, não execução de uma ordem.

Disponibilidade UTCVersãoValor
2026-10-01T12:00:00ZInicial"1.0"
2026-10-01T13:00:00ZRevista"1.4"
2026-10-01T14:00:00ZIndisponívelnull
Versão disponível então, não o valor de hojeGDP-model fictício em 1 de outubro de 2026. Todos os instantes UTC são declarados; não são horas de um fornecedor real.EXEMPLO DE CÁLCULO12:00: 1.012:30 → 1,013:00: 1.413:30 → 1,414:00: null14:30 → indisponível
Versão disponível então, não o valor de hoje. GDP-model fictício em 1 de outubro de 2026. Todos os instantes UTC são declarados; não são horas de um fornecedor real.

Revisão posterior não muda conhecimento anterior; null bloqueia o novo sinal na política explícita deste modelo.

12:00: 1.0
12:30 → 1,0 – Última versão elegível.
13:00: 1.4
13:30 → 1,4 – Revisão só disponível depois.
14:00: null
14:30 → indisponível – Sem zero ou fallback silencioso.

Às 12:30 a última versão elegível é 1,0; às 13:30 é 1,4; às 14:30 o registo mais recente contém null, logo fica indisponível. Não recuperamos automaticamente 1,4 nem substituímos por zero. Uma regra fictícia «valor maior que 1,2» é falsa às 12:30. Inserir a revisão posterior inverteria a decisão mesmo mantendo os preços. A ferramenta seleciona versões, não calcula sinais ou retornos.

A fronteira exata também faz parte da regra

Contraprova própria: às 12:59:59 ainda é elegível 1,0; às 13:00:00 a comparação inclusiva de disponibilidade permite 1,4. A diferença de um segundo muda o conhecimento estipulado, não demonstra capacidade real de executar instantaneamente. Antes de 12:00 não há valor. Dois registos da mesma observação com o mesmo availableAt são ambíguos, mesmo que estejam em ordens de colagem diferentes.

Uma estratégia pode querer conservar o último valor conhecido, mas isso exige outra política: idade permitida e motivo da ausência devem ser definidos antes de avaliar resultados. O nosso caso com null bloqueia a avaliação de novo sinal. Não acrescente fallback depois de encontrar uma curva mais agradável e apresente o novo ensaio como se nada tivesse mudado.

Inspecionar versões no reprodutor local

O objeto JSON tem version numérico igual a 1 e array events. Cada evento contém exatamente availableAt, observation, value e revision. O instante exige YYYY-MM-DDTHH:mm:ssZ, sem frações de segundo nem outros offsets. observation e revision são texto; value é texto numérico com ponto decimal ou null, sem conversão para Number.

Limites do modelo: 1–200 eventos, JSON até 64 KiB, oito níveis e 2000 valores; observação e valor até 128 caracteres, revisão até 64. Introduza o instante da decisão separadamente no mesmo formato UTC. A etiqueta da revisão não é contador cronológico: seleciona-se a disponibilidade mais recente não posterior à decisão.

Reproduzir informação disponível no instante da decisão

Este exemplo didático funciona localmente no navegador: não se liga a uma conta ou API, não envia as entradas nem as guarda persistentemente. Não introduza palavras-passe ou dados pessoais.

Formato e limites do modelo

version: 1; events: 1–200 objetos com exatamente os campos availableAt, observation, value, revision. availableAt: YYYY-MM-DDTHH:mm:ssZ. observation: texto até 128 caracteres; revision: texto até 64 caracteres; value: texto numérico com ponto decimal (até 128 caracteres) ou null. Ausência não é zero.

Seleciona-se a última versão cujo availableAt não é posterior ao instante da decisão. Dois registos com a mesma observation e availableAt são ambíguos e bloqueiam a análise. Limites JSON: 64 KiB, oito níveis e 2000 valores. Os instantes são declarações: a página não verifica a hora real de divulgação.

O exercício previsto é local no navegador: não consulta API, não usa credenciais, não se liga à conta nem envia ou guarda persistentemente os dados introduzidos. Não introduza palavras-passe ou dados pessoais. JSON válido não comprova um arquivo genuíno. O algoritmo não consegue saber se atribuiu indevidamente a uma revisão a hora inicial ou inventou datas; guarde documentação de proveniência.

Preservar input não reproduz execução

Agentes do tester têm ambientes e pastas próprios. Para corridas paralelas, use uma cópia fixa do dataset em vez de a sobrescrever com respostas online durante o estudo. Registe a versão efetivamente preservada no manifesto da corrida, não apenas o nome do endpoint.

Como controlo EUR próprio, dois arquivos poderiam produzir exatamente a mesma seleção de valores e, ainda assim, uma corrida ter 3 EUR de encargos e outra 5 EUR para bruto hipotético de 10 EUR: líquidos 7 e 5 EUR. O replay do input não resolve essa divergência de custos. Bid/Ask, quantidade, respostas e estado são camadas separadas. Comece por conferir decisões sem enviar ordens antes de atribuir diferenças à estratégia.

Três ações antes de avaliar resultados

  1. Especifique o contrato do dado, separe adaptadores e preserve respostas e evidência temporal; marque versões históricas ausentes.
  2. Siga uma observação antes da primeira versão, entre publicação e revisão e após indisponibilidade explícita. Teste fronteira exata e conflito de timestamps.
  3. Confirme o ficheiro lido pelo agente, conserve dataset e relatório e só depois confira sinais, quantidades, execução e custos.

O backtest em Python aprofunda junções temporais e o calendário ajuda a investigar revisões. Uma seleção correta sob timestamps fornecidos explica essa parte do teste; não estabelece realismo de todas as operações, vantagem da estratégia ou rentabilidade futura.