English Русский 中文 Español Deutsch 日本語
Testando Expert Advisors em períodos de tempo fora do padrão

Testando Expert Advisors em períodos de tempo fora do padrão

MetaTrader 4Testador | 4 fevereiro 2016, 09:30
978 0
Dmitry Fedoseev
Dmitry Fedoseev

Introdução


O preço de mercado flutua muito frequentemente para usar convenientemente a tabela de mudança de preço, a tabela chamada de tick, em análises técnicas. Para facilitar a percepção das mudanças de preço e permitir o uso de períodos de tempo maiores ao analisar, utilizamos as tabelas de barra ou de candelabro. Cada barra demonstra o valor de preço como no início e fim de um determinado período de tempo, bem como o valor máximo e mínimo de preço sobre aquele período. É costumeiro usar os seguintes períodos ou períodos de tempo: 1 minuto, 5 minutos, 15 minutos, 30 minutos, 1 hora, 4 horas, diário, semanal e mensal. Estes períodos de tempo podem ser encontrados na barra de ferramentas do terminal do MetaTrader 4.


Embora os períodos de tempo comumente usados já tenham se tornado padrão, não há razão técnica de porque não usarmos qualquer outro período de tempo para exibir as mudanças de preços. Do ponto de vista prático, o terminal fornece um script (period_converter) que permite que os usuários do terminal criem tabelas de período de tempo fora do padrão, por exemplo, 2 minutos, 7 minutos, 45 minutos, 2 horas e basicamente qualquer outro, bem como também anexar indicadores a estes. Entretanto, o Testador de Estratégias do terminal permite que você selecione somente períodos padrões para testes.

Tão próximo e ainda tão distante - podemos criar uma tabela de período de tempo fora do padrão, mas não há maneira de usá-la para testar os Expert Advisors. De fato, a situação é muito melhor do que parece. Testar os Expert Advisors em períodos de tempo fora do padrão é possível! Tudo que precisamos é substituir os dados de período de tempo padrão com dados de período de tempo fora do padrão. Adicionalmente, podemos até mesmo testar os Expert Advisors que usam dados de vários períodos de tempo fora do padrão.

Pontos principais


Nosso plano de ação é como a seguir:

1. Preparar um terminal adicional para funcionar desconectado de modo que novos dados de períodos de tempo padrão não sejam adicionados a tabelas de períodos de tempo fora do padrão.

2. Preparar dados de período de tempo fora do padrão usando o script period_converter no terminal, com arquivos de dados de minutos suficientes disponíveis.

3. Importar os dados preparados ao terminal preparado para testes.

Vamos agora dar uma olhada melhor:

1. Preparar o terminal para testes em períodos de tempo fora do padrão

Instalar um terminal adicional. Execute o terminal, abra uma conta de demonstração e espere até que a lista de símbolos apareça na janela de Observação do Mercado:

Desative a opção para salvar informação da conta: clique com o botão esquerdo no ícone de estado da conexão no canto inferior direito do terminal e selecione Entrar (Login). Desmarque a opção "Salvar informações da conta", clique em Entrar e espere o terminal conectar na conta.

Isso é necessário para que o terminal não se conecte à conta automaticamente e evite que novos dados sejam adicionados ao arquivo de histórico. Desligue o terminal.

Na pasta do histórico, abra uma pasta com o nome correspondente ao nome da central de distribuição em que a conta de demonstração foi aberta e delete todos arquivos *.hst dela.

2. Preparar dados de período de tempo fora do padrão 

Usando o script period_converter (disponível na entrega do terminal padrão do MetaTrader 4), crie períodos de tempo fora do padrão, por exemplo, M2 e M7, em algum outro terminal que possua uma quantidade suficiente de dados M1 para o símbolo necessário, por exemplo, EURUSD. Para esse propósito, abra a tabela M1 EURUSD e execute o script period_converter nela. Antes de executar o script, defina ExtPeriodMultiplier como 2 na janela de propriedades. Uma vez que o script terminar a conversão de dados, uma mensagem no número de entradas feitas no arquivo deve aparecer na aba “Expert Advisors” na janela do terminal, por exemplo:

“19.03.2009 18:28:09 period_converter EURUSD,M1: 25378 registro(s) escritos"

O script pode então ser removido da tabela (clique com o botão direito na tabela onde o script foi executado e selecione "Remover Script"). Abra a tabela resultante: Menu Principal - Arquivo - Abrir Offline (procure EURUSD,M2 na coluna Dados do Histórico). Similarmente, crie um período de tempo M7 (defina ExtPeriodMultiplier para 7 antes de executar o script period_converter).

Escreva um script para salvar os dados da tabela para um arquivo *.csv (s_ExportChartToCSV_v1.mq4 em anexo):

int start(){
   int h=FileOpen(Symbol()+Period()+".csv",FILE_WRITE|FILE_CSV,",");
      for(int i=Bars-1;i>=0;i--){
         FileWrite(h,TimeToStr(Time[i],TIME_DATE),TimeToStr(Time[i],TIME_MINUTES),Open[i],High[i],Low[i],Close[i],Volume[i]);
      }
   FileClose(i);
   return(0);
}

Execute o script nas tabelas de período de tempo fora do padrão. Como resultado, obteremos arquivos *.csv com dados de período de tempo fora do padrão na pasta experts/arquivos.

3. Importar dados

Abra o terminal preparado no passo 1 acima e a Central de Histórico (Menu Principal - Ferramentas - Central de Histórico ou tecla F2). Expanda a lista de períodos de tempo para o símbolo importado na lista de símbolos no lado esquerdo e selecione M1 (dê um clique duplo nela para que o texto correspondente apareça na barra de títulos da janela):


Clique em "Importar" na janela aberta da Central de Histórico, selecione o EURUSD2.csv gerado no passo 2 acima e clique em "OK". Similarmente, importe os dados de EURUSD7.csv para M5 e feche a janela da Central de Histórico. É isso!

Abra a tabela M1 EURUSD e você será capaz de ver os dados M2:

O mesmo se aplica ao EURUSD M5 - ao invés de M5, você verá os dados M7 sendo exibidos.

Para testar um Expert Advisor no Testador de Estratégias, você terá que selecionar o M1 para testes nos dados M2 e M5 para testes em dados M7. Para acessar os indicadores de dados M7 chamados a partir de um Expert Advisor testado, você precisa especificar o período de tempo M5.

4. Verificando

Usaremos um Expert Advisor simples que abre e fecha pedidos na interseção de dois MAs (2MA.mq4 em anexo). Atenção! Esse Expert Advisor tem o propósito de operar somente no Testador de Estratégia.

extern int TimeFrame=0;
extern double Lots=0.1;
extern int FastMAPeriod=13;
extern int FastMAMethod=0;
extern int FastMAPrice=0;
extern int SlowMAPeriod=21;
extern int SlowMAMethod=0;
extern int SlowMAPrice=0;

int start(){
      double fast_ma_1=iMA(NULL,TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);
      double slow_ma_1=iMA(NULL,TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
      double fast_ma_2=iMA(NULL,TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,2);
      double slow_ma_2=iMA(NULL,TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2);
      static int bt=0;
      static int st=0;
         if(fast_ma_1>slow_ma_1){
            if(fast_ma_2<=slow_ma_2){
               if(st>0)OrderClose(st,Lots,Ask,0,CLR_NONE);
               st=0;
               if(OrdersTotal()==0)bt=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0,"",0,0,CLR_NONE);
            }
         }
         if(fast_ma_1<slow_ma_1){
            if(fast_ma_2>=slow_ma_2){
               if(bt>0)OrderClose(bt,Lots,Bid,0,CLR_NONE);
               bt=0;            
               if(OrdersTotal()==0)st=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0,"",0,0,CLR_NONE);
            }
         }         
   return(0);
}

4.1. Expert Advisor em um período de tempo fora do padrão 

Abra o Testador de Estratégia (Menu Principal - Visualizar - Testador de Estratégia ou Ctrl+R). Selecione o Expert Advisor - 2MA, símbolo - EURUSD, período de tempo - M1, abra a janela de propriedades do Expert Advisor (botão "Propriedades do Expert" no Testador de Estratégia) e defina o valor da variável TimeFrame para 1 ou 0. Inicie os testes e uma vez que termine, abra a tabela (botão "Abrir Tabela" no Testador de Estratégia) para se certificar de que os testes foram feitos corretamente.

4.2. Expert Advisor em um único período de tempo diferente do período de tempo diferente do Testador de Estratégia

Na janela de propriedades do Expert Advisor, defina a variável TimeFrame como igual a 5 e inicie os testes. Abra a tabela, mude o período de tempo da tabela para M5 e defina dois MAs simples com períodos de 13 e 21 com base nos preços de fechamento para se certificar de que os testes foram feitos corretamente.

4.3. Expert Advisor em dois períodos de tempo

O Expert Advisor que vamos usar abre pedidos na interseção de dois MAs em um período de tempo, confirmado pela posição de dois MAs em um período de tempo maior (2MA2TF.mq4 em anexo). Atenção! Esse Expert Advisor tem o propósito de operar somente no Testador de Estratégia.

extern int TimeFrame=0;
extern double Lots=0.1;
extern int FastMAPeriod=13;
extern int FastMAMethod=0;
extern int FastMAPrice=0;
extern int SlowMAPeriod=21;
extern int SlowMAMethod=0;
extern int SlowMAPrice=0;

int start(){
      double fast_ma_1=iMA(NULL,TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);
      double slow_ma_1=iMA(NULL,TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
      double fast_ma_2=iMA(NULL,TimeFrame,FastMAPeriod,0,FastMAMethod,FastMAPrice,2);
      double slow_ma_2=iMA(NULL,TimeFrame,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2);
      static int bt=0;
      static int st=0;
         if(fast_ma_1>slow_ma_1){
            if(fast_ma_2<=slow_ma_2){
               if(st>0)OrderClose(st,Lots,Ask,0,CLR_NONE);
               st=0;
               if(OrdersTotal()==0)bt=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0,"",0,0,CLR_NONE);
            }
         }
         if(fast_ma_1<slow_ma_1){
            if(fast_ma_2>=slow_ma_2){
               if(bt>0)OrderClose(bt,Lots,Bid,0,CLR_NONE);
               bt=0;            
               if(OrdersTotal()==0)st=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0,"",0,0,CLR_NONE);
            }
         }         
   return(0);
}

Os seguintes valores são definidos por padrão: TimeFrame - 1, MA2TimeFrame - 5. Selecione o período de tempo M1 no Testador de Estratégia e inicie os testes. Depois abra a tabela e use as linhas verticais nos pontos de abertura dos pedidos e pontos de interseção de MAs que não resultaram em abertura de pedidos, enquanto muda de M1 para M5, para se certificar de que os testes foram feitos corretamente.



Conclusão

Estas simples manipulações ampliam os horizontes dos testes nos Expert Advisors! O único porém é a falta de atualizações automáticas. Repetindo isso de tempos em tempos, como uma vez por semana, as ações descritas nas etapas 1 a 3: deletar todos os dados do terminal para propósitos de teste, bem como exportar e importar períodos de tempo fora do padrão para o terminal para fazer os testes, essas ações são vistas como um só instante de trabalho em troca de uma grande melhoria das capacidades do Testador de Estratégia.

Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/1368

Arquivos anexados |
2MA.mq4 (1.29 KB)
2MA2TF.mq4 (1.64 KB)
Desenhando níveis de ultrapassagem horizontal utilizando fractais Desenhando níveis de ultrapassagem horizontal utilizando fractais
O artigo descreve a criação de um indicador que exibirá os níveis de suporte/resistência utilizando fractais para cima/para baixo.
Gerenciamento de dinheiro revisitado Gerenciamento de dinheiro revisitado
O artigo lida com algumas questões que surgem quando investidores aplicam vários sistemas de gerenciamento de dinheiro nas negociações Forex. Dados experimentais obtidos de realizações de negócios usando diferentes métodos de gerenciamento de dinheiro (MM) são também descritos.
Mapeamento de equivolumes revisitado Mapeamento de equivolumes revisitado
O artigo trata do método de construir tabelas, onde cada barra consiste de um número igual de ticks.
Manipulação de Arquivos ZIP em Linguagem MQL5 Pura Manipulação de Arquivos ZIP em Linguagem MQL5 Pura
A linguagem MQL5 se mantém em evolução e novos recursos para trabalhar com dados estão constantemente sendo adicionados. Devido as inovações recentes, se tornou possível manipular arquivos ZIP usando ferramentas MQL5 nativas, sem envolver bibliotecas DLL de terceiros. Este artigo foca em como isso é realizado e implementa a classe CZip, que é uma ferramenta universal para ler, criar e modificar arquivos ZIP, como um exemplo.