Ajuda para o MetaTrader 5Trading algorítmico, robôs comerciaisComo o testador carrega os dados históricos

Como o testador carrega os dados históricos

Carregamento do histórico, preparação para testes e ajuste da data de início do teste

Testador de estratégias cria uma simulação de ambiente de mercado o mais realista possível. Para isso, ele prepara antecipadamente um volume suficiente de dados históricos para o símbolo em teste.

Antes de executar qualquer teste, a plataforma sincroniza o histórico:

  • Do servidor de negociação para o terminal são baixadas barras M1 e ticks do símbolo selecionado. Ao iniciar o testador pela primeira vez, o terminal carrega todo o histórico disponível do símbolo em teste.
  • Do terminal para o agente de teste o histórico é copiado em formato compactado. O agente opera localmente, gerando ticks por conta própria ou usando dados de ticks reais (se disponíveis).
  • Em testes multimoeda, ao acessar pela primeira vez um símbolo novo ou um timeframe, o teste é interrompido para completar o histórico faltante. Além disso, é carregada uma reserva "além do mínimo", para que os indicadores possam ser calculados desde a primeira barra.

Requisitos mínimos para a profundidade do histórico

O testador sempre carrega o "buffer de histórico antes do início" para garantir a estabilidade dos cálculos:

  • D1 e abaixo – desde o início do ano anterior. Isso garante um mínimo de 1 ano de histórico. Por exemplo, se a data de início do teste for 01.03.2023, o testador baixará do terminal o histórico a partir de 01.01.2022. Ou seja, 14 meses antes da data de início do teste.
  • W1 – 100 barras semanais (\~2 anos).
  • MN1 – 100 barras mensais (\~8 anos).

Se houver menos dados, o testador desloca a data real de início para a data disponível mais próxima onde as condições são atendidas.

Por causa desses requisitos, às vezes ocorre que o teste comece não na data indicada, mas em uma data posterior. No registro do testador isso vem acompanhado da mensagem:

start time changed to 2024.03.15 00:00 to provide data at beginning

Isso não é um erro, e sim um mecanismo interno para garantir a correção.

Em testes multimoeda, quando a estratégia acessa pela primeira vez um símbolo "alheio" ou um timeframe, o testador para para completar o histórico faltante. Além disso, é sempre carregada uma reserva "além do mínimo" – para haver dados suficientes para os indicadores e para o recálculo da margem.

O testador de estratégias armazena o histórico de cada símbolo de forma centralizada para todos os agentes locais na estrutura seguinte (exemplo para EURUSD):

\Program Files\MetaTrader 5 Strategy Tester\Tester\bases<nome_do_servidor_de_negociação>\history\EURUSD

O histórico de ticks do símbolo EURUSD é armazenado de forma análoga:

\Program Files\MetaTrader 5 Strategy Tester\Tester\bases<nome_do_servidor_de_negociação>\ticks\EURUSD

Como reduzir ou evitar o deslocamento da data de início do teste

Use um timeframe menor.

O testador sempre verifica que, antes do início da simulação, no timeframe selecionado haja pelo menos 100 barras.

Esta é a profundidade mínima necessária para o cálculo estável dos indicadores e o início correto.

  • Se você executar o teste em D1, são necessários no mínimo 100 barras diárias (≈ 5 meses).
  • Se escolher H1 ou M15, então são necessários 100 barras horárias ou de 15 minutos. Esse volume geralmente está disponível, mesmo quando o histórico é limitado.
  • Portanto, quando faltar histórico, o deslocamento da data de início do teste será menor em timeframes mais baixos do que em timeframes mais altos.

alert_icon No entanto, o EA deve funcionar corretamente no timeframe selecionado. Se a estratégia foi originalmente projetada para D1, então ao testá-la em M15/H1 é preciso garantir que ela sincronize corretamente seus cálculos e não comece a "recalcular" sinais com frequência excessiva.

Histórico mínimo para diferentes timeframes e possível deslocamento da data de início do teste

Timeframe de teste

Mínimo que o testador carrega

Deslocamento provável do início do teste

M1

≥100 barras (≈1 h 40 min)        

Praticamente nenhum deslocamento

M15

100 barras (~25 horas)

Deslocamento mínimo

H1

≥100 barras (~4 dias)        

Deslocamento mínimo

D1

≥100 barras (~5 meses)        

Pode deslocar o início em 5 meses

W1

≥100 semanas (~2 anos)        

Deslocamento de até 2 anos

MN1

≥100 meses (~8 anos)        

Deslocamento de até 8 anos, se o histórico for limitado

Como ler a tabela

  • Ao testar em D1, o testador obrigatoriamente avançará a data até que haja pelo menos 100 barras diárias acumuladas.
  • Se mudar para H1 ou M15, o testador exigirá apenas alguns dias de dados, que normalmente estão disponíveis – o teste iniciará mais próximo da data escolhida.
  • Em timeframes maiores (W1, MN1) o deslocamento pode ser muito grande, pois são necessários anos de histórico.

Características adicionais do testador

  • Modos de geração de ticks:
    • Every Tick – a geração de ticks com base no timeframe M1 proporciona o máximo realismo. Alta carga nos recursos do computador e o tipo de teste mais custoso em tempo.
    • 1 Minute OHLC – mais rápido, mas menos realista. A sequência de ticks é construída apenas com base nos preços OHLC das barras de minuto, o número de pontos de controle gerados diminui substancialmente, consequentemente, reduz-se o tempo de teste. A execução da função OnTick() ocorre em todos os pontos de controle que são construídos a partir dos preços OHLC das barras de minuto.
    • Open Prices Only – apenas os preços de abertura das barras no timeframe selecionado para o teste. Exige cautela em testes multimoeda. A função do EA OnTick() é executada apenas no início da barra, pelo preço Open. Por causa dessa característica, níveis de stop e ordens pendentes podem disparar em preços diferentes dos esperados (especialmente ao testar em timeframes maiores). Em troca, ganhamos a possibilidade de realizar rapidamente um teste avaliativo do EA. É o tipo de teste mais rápido e menos preciso.
    • Every Tick based on real ticks – máxima precisão no teste. Em vez de ticks gerados a partir de dados de minuto, são usados ticks reais acumulados para os instrumentos financeiros pela corretora. No modo de ticks reais também são usados os barras de minuto. Por eles os dados de ticks são verificados e corrigidos. Isso também permite evitar divergências nos gráficos entre o testador e o terminal cliente.
  • Simulação de tempo:
    • No teste, TimeLocal(), TimeTradeServer() e TimeGMT() retornam valores idênticos.
  • OnTimer e Sleep:
    • Funcionam também nos testes. Temporizadores desaceleram a simulação, Sleep() modela pausas, mas em um laço infinito ocorre um erro.
  • Cache de agentes:
    • O histórico é salvo em formato compactado e reaproveitado se o intervalo e outras configurações de teste permanecerem inalterados desde o último teste.

Simulação de tempo

  • Os tempos Local, TradeServer e GMT coincidem no teste.
  • Objetos visuais não são exibidos (exceto no modo visual).
  • OnTimer() e Sleep() funcionam no testador: os temporizadores desaceleram o teste, Sleep() modela pausas temporais (mas pode causar erros em laço infinito).

Organização de agentes e cache

  • O histórico é mantido em formato compactado e é cacheado entre os testes.
  • O processo do agente local não é descarregado por cerca de 5 minutos após o término do teste, para garantir um início rápido do próximo teste.