Indicadores-parte3: Programação de robôs de trade (videoaula)

Na terceira e última parte da programação de indicadores (nos próximos falaremos sobre o EA – Expert Advisor), veremos uma versão evoluída do exemplo anterior (baseado na Média Móvel), incluindo controles de tradenúmero de operações com ganho, número máximo de trades, prejuízo máximo, estimativa de ganho e etc.

A base para escolha de uma posição (comprada ou vendida) é bastante semelhante, mas incluímos algumas opções mais avançadas.

O exemplo demonstrado está disponíveis através da url:
http://aprendizfinanceiro.com.br/indicador-aulas3.zip

Conforme exposto no vídeo, a primeira diferença foi a codificação de um controle de trade (basicamente um controle de risco):

// Controle de risco para novas aberturas de posição - por isto !trade_open ou trade_open==0
if (!trade_open){
   //--- Critérios principais e globais
   // 1. Encerra ao atingir 20 pts
   if (trade_sum>20) close_trades=1;
   // 2. Encerra ao atingir o limite diário de trades
   else if (trade_ct>max_daytrades-1) close_trades=1;
   // 3. Encerra ao atingir o prejuízo diário máximo
   else if (trade_sum<=max_tradeloss) close_trades=1;
   //--- Critérios a partir de 3 pts
   else if (trade_ct>=3) {
      if (trade_ct>fail_trades-1 && gain_ct<1) close_trades=1;
      else if (trade_ct>gain_ct && trade_sum>=5) close_trades=1;
      else if (trade_ct==3 && gain_ct==3) close_trades=1;
   }
}

Em seguida, a base do código está na identificação do momento “ideal” para abertura ou fechamento de posição…

Este controle foi implementado através da variável trade_open. Quando trade_open for 0, verificaremos a possibilidade de abrir uma nova posição. Por outro lado, caso seja 1, avaliaremos as possibilidades de fechar a posição (desviando o processamento para o bloco else).

Também limitamos a capacidade de abrir novas operações através da variável close_trades – ao atribuir o valor 1, encerramos as operações no dia e fechamos qualquer posição em aberto.

//--- Verifica se existe um trade em aberto (trade_open):
// 1. Caso não exista operação em aberto, verifica se a próxima barra está prestes a ser desenha e libera o processamento (isNewBar)
// 2. Caso exista, verifica a possibilidade de fechar a posição (desviará para o bloco "else")
if (!trade_open && !close_trades) { 
    // Código para abertura de posição
    if (isNewBar(time[i], start, LM_OPEN)==true) {
       trade_dir=0;
       bars_trade=0;
       buf_color_line[i]=0;
       ...

       //--- Coloque aqui seu código para abertura de posição

    }
}
else {
    // Código para fechamento de posição
              
    // atualiza buf_color_line pelo último valor de trade_dir
    buf_color_line[i]=trade_dir;
    ...
    if (isNewBar(time[i], start, LM_CLOSE)==true && buf_color_line[i]>0) {
        ...

        //--- Coloque aqui os critérios para fechar a posição

        // 1. Fecha posição depois de 5 barras sem ganho superior a 2 pts
        // 2. Atualiza buf_color_line pelo valor de trade_dir
        if (close_trades) trade_dir=0;
        else if (bars_trade>5 && trade_maxgain<2) trade_dir=0;
        buf_color_line[i]=trade_dir;
        ...
    } // encerramento isNewBar
} // encerramento do bloco else (tenta fechar o trade)

Para facilitar no entendimento, coloquei vários comentários em todo código. Acredito que qualquer ajuste possa ser feito sem grandes dificuldades.

Caso você perceba algum bug ou tenha alguma ideia para acrescentar, por favor entre em contato!

Tenham consciência de que poucos *investidores* sobrevivem aos trades. Vende-se muita ilusão na Internet. Seja qual for a sua escolha, faça consciente!

4 thoughts on “Indicadores-parte3: Programação de robôs de trade (videoaula)

  1. Gostei do seu código estou acompanhado seu Blog agora, parabéns pelo conteúdo, estou começando agora estudar robôs e gostaria de manjar do seu, quero quem sabe fazer um pramin mais pra frente… Abraço

  2. Betolj, Boa tarde, já está testando seu robô em conta real? Tentei realizar alguns back testes com alguns robôs grátis que achei pra ver se eu entendo a estrutura de programação mais tomei um pau kkkk, eu conheço Linguagem C, já mexi com arduino e com pic, mais esta linguagem do Metatrade to apanhando ainda. Pelo oque entendi sobre sua programação é só o indicador que você compartilhou com a gente neah ? O robô seria feito de outra forma? Abraço vlw

    • Opa, boa tarde

      Sim, já ativei o robô em minha conta real. Ainda estou terminando de afinar. No mês retrasado tive resultado positivo e no mês passado tive um pequeno prejuízo (R$ 15). No começo do mês comecei mal, mas identifiquei um pequeno bug.

      Então, como estou trocando de desktop, parei de operar na semana passada para revisar o código do robô. Eu separei toda a lógica em duas partes de propósito. Primeiro, criei o indicador para enxergar rapidamente os momentos de operação. E também facilita para analisar rápidamente se algum novo ajuste será para melhor ou pior.

      Feito isto, comecei a desenvolver o Expert Advisor (é o robô). Assim como comentei sobre o iMA e o iSAR, usei o iCustom para carregar o indicador que desenvolvi e programei as ordens em função da mudança de cor. Tomei como base um exemplo gratuito de cruzamento de duas médias móveis simples – foi “fácil” ajustar.

      Em breve gravarei outros vídeos explicando o processo de codificação do EA – acabei de finalizar o desktop só agora!

      Mas, realmente, a codificação no MQL5 é mais complexa que parece porque você precisa tomar cuidado com o momento que faz as comparações.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *