Indicadores de teste de EA não comercial

Sergey Kravchuk | 8 fevereiro, 2016

Introdução

Todos os indicadores podem ser divididos em dois grupos: indicadores estáticos, a exibição deles, uma vez que aparece, sempre permanece a mesma no histórico e não muda com as novas cotações recebidas e indicadores dinâmicos que exibem seus status somente para o momento atual e são totalmente reelaborados quando um novo preço chega. A eficiência de um indicador estático é diretamente visível no gráfico. Mas como podemos verificar se um indicador dinâmico funciona bem? É para essa questão que o artigo se dedica.

A maioria esmagadora de indicadores usados na análise técnica são estáticos. Vamos tomar o MACD como exemplo. A chegada de uma nova cotação irá, na melhor das hipóteses, se preocupar somente em exibir o último período ou, para ser mais exato, seu estágio final. Entretanto, seu gráfico continua "invencível" no histórico. Para verificar se um indicador estático funciona bem ou não, seria suficiente apenas investigar suas indicações nos dados históricos. Se existem vários indicadores disponíveis e você quer escolher o melhor para o seu trading - também não é problema: Apenas anexe todos os indicadores ao gráfico e então selecione um deles que produz indicações "mais corretas".

No caso de indicadores dinâmicos, a situação se torna mais complicada e até mesmo próxima de "não acontecer". Quase todos os indicadores de canal podem ser usados como exemplo de tais indicadores. Como regra, esses indicadores desenham uma ou mais linhas que exibem a faixa de movimentos de preço. Essas linhas são construídas para o momento atual, claro. Assim, a chegada de novos preços que diferem significantemente dos recentes pode modificar a disposição das linhas no gráfico para uma absolutamente diferente dentro de alguns segundos. É simplesmente impossível estimar a correção do funcionamento do indicador para todas as disposições de preço possíveis, julgando apenas pelo último ponto do preço atual. Você pode ver que seu indicador funciona corretamente por várias horas e considerar que ele funcione bem. Entretanto, exatamente quando você decidir começar o trading, pode ocorrer tal situação de mercado, na qual ele funcione de forma incorreta (um exemplo de Canais de Movimento de Barishpolets erroneamente construído por um dos indicadores é dado abaixo), e você pode abrir seu trade em um direção adversa. O próprio indicador irá "corrigir" suas indicações em apenas algumas das barras. Mas será tarde demais para você, uma vez que sua posição será perdida!

Indicadores de teste no Testador

O propósito primário do Testador de Estratégia é testar Expert Advisors. Uma vez que alguns EA usam indicadores em suas operações, o Testador também deveria ser capaz de testá-los. Usaremos essa característica!

Um Expert Advisor pode ser testado de duas formas: padrão e visual. No modo padrão, o Testador processa todos os comandos de EA no seu processamento de histórico e para dar resultados finais assim que não tenha mais dados históricos disponíveis do par cambial em teste. No modo visual, além do que foi dito acima, o Testador adicionalmente desenha cada barra/tick do gráfico, emulando o trabalho de mercado no modo de tempo real. No Testador, você pode acelerar, reduzir ou até mesmo parar o tempo, o que será de grande valia para nós ao testar indicadores.

Expert Advisor não comercial com captura de tela

Entretanto, antes de iniciarmos os indicadores de teste, teremos que preparar um EA um pouco mais incomum. Para nossos propósitos, esse EA não deve operar trades. Suas operações não devem nos afastar do teste de indicadores e, o que é ainda mais importante, o depósito perdido anteriormente devido a erros de trading não deve parar nosso teste de indicador. Então criaremos um EA que não faz nada.

Sua única função será capturar a tela do estado atual do trading. Serão muito úteis quando começarmos a analisar, passo a passo, as operações de indicador. Abaixo está o código do EA:


//+-----------------------------------------------------------------------------+
//|                                                         IndicatorTester.mq4 |
//|                                      Copyright © 2006-2008, Sergey Kravchuk |
//|                                                    http://forextools.com.ua |
//+-----------------------------------------------------------------------------+
 
#property copyright "Copyright © 2006-2008, Sergey Kravchuk. http://forextools.com.ua"
#property link      "http://forextools.com.ua"
 
//+-----------------------------------------------------------------------------+
 
extern datetime ScreenShotStart=0; // date and time of the first screenshotting
extern int ScreenShotMax=100;      // how many screenshots should be made
extern int ScreenShotStep=0;       // screenshotting step: <=0-not applicable, N-on each Nth bar
extern string FilesPrefix="_";     // prefix for screenshot filenames
 
//+-----------------------------------------------------------------------------+
 
datetime   NextScreenShot=0;       // date and time for making the next screenshot
double ScreenShotCnt=0;            // prepare a screenshot counter
double ScreenShotCur=0.001;        // number of the initial screenshot
string FileName;                   // filename to save the next screenshot
 
//+-----------------------------------------------------------------------------+
//| expert start function                                                       |
//+-----------------------------------------------------------------------------+
 
int start()
{
  if(ScreenShotStep>0                       // is it necessary to make screenshots?      
    && ScreenShotStart<=Time[0]             // is it time for screenshotting?
    && NextScreenShot<=Time[0]              // is it time to make the next screenshot?
    && ScreenShotCur*1000<=ScreenShotMax+1) // have all screenshots not been made?
  {
    // compose the filename and save the screenshot under it
    FileName=FilesPrefix+StringSubstr(DoubleToStr(ScreenShotCur,3),2)+".gif";   
    WindowScreenShot(FileName,800,600);
   
    // give a prompt
    Comment("Saved file "+FileName+
    "\nThere are "+DoubleToStr((ScreenShotMax-ScreenShotCur*1000),0) +" pcs. left");
   
    // shift the data and the counter to the next screenshot
    ScreenShotCur+=0.001;
    NextScreenShot=Time[0]+ScreenShotStep*Period()*60;   
  }
 
  if(ScreenShotCur*1000>ScreenShotMax+1) Comment("All screenshots are saved");
 
  return(0);
}
//+-----------------------------------------------------------------------------+

O algoritmo de captura de tela é bem simples: Aguardamos o momento certo que queremos começar a fazer uma série de capturas de tela (ScreenShotStart) e então fazemos ScreenShotMax capturas de tela em cada ScreenShotStep barra. Cada captura de tela é salva em um arquivo, o nome do arquivo começa com o prefixo predefinido, FilesPrefix, com o número de captura de tela adicionado ao nome.

Para formar um número com zeros à esquerda (isso é necessário para a escolha correta das capturas de tela para que _1.gif não seja imediatamente seguido por _10.gif, enquanto _2.gif), usamos um método um pouco mais incomum. A numeração começa com ScreenShotCur=0.001; e então segue um passo de 0,001 (ScreenShotCur+=0.001;). O próprio número é obtido a partir da modificação de um número decimal em um string de caracteres do qual um substring é selecionado como um número, começando com o terceiro caractere. Assim, cortamos os "0" iniciais e obtemos zeros à esquerda antes dos dígitos dos números. Esse método nos permite acumular até mil capturas de tela o que é mais do que suficiente para nossa análise. Entretanto, se não for suficiente para você, aumente a "granulação" do número inicial e a do passo para 0,0001. Então você será capaz de acumular até 10.000 capturas de tela.

Entrar no teste

Agora que temos tudo pronto e o EA foi compilado sem erros, vamos começar o teste. Abra o Testador usando o menu View/Tester ou a combinação de chaves Ctrl+R. No campo "Expert Advisor" selecione nosso EA IndicatorTester. Então selecione um símbolo e um período para ser testado. Se necessário, você pode selecionar a faixa de teste verificando o campo "Use date" ("data de uso") e especificando as datas "From" ("a partir de") e "To" ('para"). Para ativar o modo de teste visual, verifique o campo "Visual mode". Agora podemos pressionar o botão "Expert properties" ("propriedades do Expert") e especificar todas as entradas necessárias para a captura de tela.

Bem, quase tudo está pronto. Pressione o botão "Start" e, imediatamente após, o botão "||" localizado à direita do controle deslizante de visualização de ajuste de velocidade. O EA vai parar o teste. Agora, você pode anexar o indicador a ser testado ao gráfico e, após soltar o botão "||" , continuar testando o EA. Como lembramos, o EA não realiza trades. Mas o Testador não sabe disso e processa cotações escrupulosamente, tick após tick, barra após barra. Uma vez que apenas um ou alguns indicadores são anexados ao gráfico, o Testador tem que recalculá-los e reelaborá-los, uma vez que um EA normal certamente usaria os dados obtidos desses indicadores.

Isso é tudo. Agora, como alguns programadores escrevem nas caixas de diálogo, "sente e assista" como seu indicador está trabalhando. Você pode pausar o teste (pressionando o botão "||" ) a qualquer momento ou você pode acelerar ou desacelerar sua velocidade. Assim que o Tester alcança a data e o tempo predefinidos por você como ScreenShotStart, ele vai começar a fazer capturas de tela com a periodicidade predefinida e armazenar as capturas de tela prontas no diretório de c:\Program Files\MetaTrader 4\tester\files. Se você não precisar de nenhuma captura de tela e apenas quiser ver como seu indicador trabalha, configure o parâmetro do EA ScreenShotStep como igual ou menor do que zero antes de pressionar o botão "Start" e então a captura de tela será desabilitada.

Uso de exemplo

Realizei essa tarefa pela primeira vez para mim mesmo quando queria encontrar o indicador de Canais de Movimento de Barishpolets "mais corretos" para minha pesquisa. Na descrição de como construir canais, há alguns pontos que resultam em possíveis construções erradas de um canal. Em primeiro lugar, isso se refere à situação de quando dois extremos, através dos quais uma das linhas de canal deveria ser elaborada, estão localizados próximos um do outro. Em tais casos, alguns indicadores começam a “jogar” o canal de 45 graus abaixo para 45 graus acima e depois de volta, do topo para baixo - bem, essa coisa toda. Infelizmente, os desenvolvedores de indicadores, confiando implicitamente na autoridade de Barishpolets, só percebem seu conjunto de regras por hábito (deve ser observado que as regras funcionam bem, na grande maioria dos casos). Entretanto, esquecem que o mercado pode nos mostrar todas as surpresas possíveis. Em tais casos, o indicador de “top” começa a ser "inchado" e os indicadores se tornam a razão da perda em vez de ser uma ferramenta útil para obter lucros.

Para comparar métodos diferentes de construir Canais de Movimento de Barishpolets, escrevi meu próprio indicador que constrói canais também, mas "mais objetivamente" - pela linha de movimento de preço médio. É muito similar à forma como a ferramenta padrão Equidistant Channel faz, mas as fronteiras do canal são construídas por um algoritmo um pouco diferente (você pode encontrar mais detalhes no meu website Two-Channel Method - em Russo). Agora vamos ver como um dos indicadores de Canais de Movimento de Barishpolets ((SHI_Channel_true) localizados na CodeBase vai se comportar para o "correto" canal de preço médio As linhas do indicador em teste são desenhadas em verde, as linhas do canal longo (semanal) do indicador de dois canais são laranja, aquelas do canal curto (33 horas) são desenhadas em azul-claro. Elas se tornam vermelhas assim que se aproximam das fronteiras do canal.


Bem, filme é filme, mas vamos observar de perto algumas capturas de tela realizadas.

Para o período de 04 a 07 de dezembro de 2007 (EURUSD M30), podemos ver quantas vezes o indicador de Canais de Movimento de Barishpolets "se inverte" e retorna à linha de movimento de preço médio.


É possível aqui que um canal seja quebrado (o canal simplesmente não é desenhado corretamente e o preço alcança a fronteira de preço semanal, na verdade). Você pode ver como o indicador de comporta. O canal se inverte na próxima barra e praticamente se iguala ao canal semanal:


Isso aconteceu, pois um novo extremo foi formado e o indicador estava, de forma justa, o processando. Entretanto, apenas algumas barras passam - e se invertem novamente retornando para sua posição incorreta.


Isso aconteceu, pois uma nova cotação transformou o ponto extremo em um ponto interno normal e o indicador processou aquela modificação de novo. Uma nova inversão acontece na próxima barra:


Mais duas ou três barras e - uma inversão de novo:


Nesse gráfico podemos ver outro "extremo" de construção de Canais de Movimento de Barishpolets - dois extremos próximos configuram uma das fronteiras do canal, embora um quadro bastante óbvio possa ser visto nesse gráfico: o preço dentro do canal curto de 33 horas está bem no seu caminho para as fronteiras do canal semanal, e isso provavelmente irá refletir no canal semanal e fazê-lo voltar. Na verdade, acontece da seguinte forma - observamos nosso quadro "previsto" dentro do próximo dia:


Então, usando nosso EA não comercial com captura de tela, trazemos um veredito sensato do indicador SHI_Channel_true: É uma ferramenta muito "desconfiada". Hesitei em confiar no meu depósito sem uma adaptação séria (essa foi uma das razões pelas quais criei os Métodos de dois canais).


Conclusão

O campo de aplicação do código considerado não se limita a testar indicadores. Você pode inserir o mesmo mecanismo em um EA comercial. Nesse caso, você será capaz de "selar" o código depurado e acumular o histórico de comportamento do seu EA e indicadores trabalhando com esse EA para analisar os resultados de trading do EA para os indicadores usados para calcular os sinais do EA. Isso pode acelerar a depuração de um trading de EA em uma conta real.

Uma caraterística importante do método de teste de indicadores proposto é a possibilidade da captura de tela. Muitos visualizadores de imagem (por exemplo, o IrfanView grátis) podem exibir arquivos no modo de páginas. Pressionando PageDown você vai para a próxima captura de tela, como você faria manualmente quando vai para a próxima barra no Testador. O que você não pode fazer no Tester, mas pode facilmente fazer no IrfanView é ir para a barra anterior. Apenas pressione PageUp - e você irá "paginar o histórico de volta" Pressione mais uma vez - e você vai mais a fundo no histórico. Isso permite que você veja o comportamento dos indicadores e os estude e descubra as razões pelas quais funcionam incorretamente.