English Русский 中文 Español Deutsch 日本語
Um assistente de investidores com base em análise MACD estendida

Um assistente de investidores com base em análise MACD estendida

MetaTrader 4Exemplos | 5 fevereiro 2016, 06:39
530 0
Genkov
Genkov

Introdução

O histograma MACD é reconhecido como um dos melhores indicadores de tendências de valores. Como recomendado pelo Dr. A. Elder, a tendência dos valores é determinada pelas duas últimas barras no período de tempo correspondente. Entretanto, não podemos afirmar nada mais usando estas duas barras. Naturalmente, um investidor experiente analisando um histograma pode imaginar um pouco mais, com base em sua própria intuição. Bem, se tomarmos as três últimas barras para nossa análise, a quantidade e qualidade das nossas informações será estendida consideravelmente.

O algoritmo do script é baseado na comparação de diferenças entre os incrementos do zero, da primeira e da segunda barra do histograma MACD. Por exemplo, se o valor da diferença entre a barra atual e a barra anterior excedem o valor da diferença entre os valores da barra anterior e da barra antes desta barra, então a tendência está crescendo com aceleração positiva. Se a diferença é menor do que isso, significa que a tendência está diminuindo seu crescimento (damping trend) e você deve pensar em fechar sua posição longa.

Uma observação do script:

Você pode usar o script em pelo menos duas direções.

Primeiro, ele pode ser usado como um assistente para definir os pontos de entrada/saída de mercado, bem como decidir sobre a quantidade de lotes negociados (volume) de acordo com a posição, a direção e a aceleração positiva/negativa do volume do histograma.

Segundo, você pode usar o script ao analisar dados históricos. Se você anexar o script à tabela de modo a analisar os dados, a janela de propriedades aparecerá, onde você pode especificar (alterar) o número da barra inicial e qualquer período de tempo a ser analisado. Se você usar o script em negociações em tempo real, você deve definir o número da barra inicial para zero (a última barra atual) ou para um (de acordo com a preferência do usuário), e você deve especificar o período de tempo que você usa para abrir ou manter suas posições.

//+------------------------------------------------------------------+
//|                                                 TrendMACD v5.mq4 |
//|MACD histogram analysis by the last three bars             Genkov |
//|                                                     genkov@bk.ru |
//+------------------------------------------------------------------+
#property copyright "Genkov"
#property link      "genkov@bk.ru"
//if you comment on the below line, the properties window will not be displayed
#property show_inputs   
extern int a = 0;            // here you can specify any initial bar to be analyzed
//extern int period = 1;     //  1 minute 
//extern int period = 5;     //  5 minutes 
//extern int period = 15;    // 15 minutes 
extern int period = 30;      //  30 minutes
//extern int period = 60;    // comment on the timeframe you need
//extern int period = 240;   // 4 hours
//extern int period = 1440;  // day
//extern int period = 10080; // week
//extern int period = 43200; // month
//+------------------------------------------------------------------+

Colocaremos a variável principal 'a' para o número da barra inicial e a variável 'period' para períodos de tempo nas variáveis globais do script. A variável interna para cálculos e comparações será colocada após a função de lançamento:

int start()
  {
    int b,c;
    b=a+1; c=b+1;
//----
double Macd_h1_a= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,a);
double Macd_h1_b= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,b);
double Macd_h1_c= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,c);

Para o controle visual dos cálculos, você pode colocar aqui o operador Print() que pode ser útil ao analisar os eventos anteriores (no histórico). O multiplicador "*1000" (ou você pode usar qualquer outro) é usado para uma leitura melhor dos resultados obtidos.

Print("   Macd_h1_c= ",Macd_h1_c*1000,"   Macd_h1_b= ",
          Macd_h1_b*1000,"   Macd_h1_a= ",Macd_h1_a*1000);

Se precisar desativar as mensagens (alertas), você deve substituir com zero no operador "int Message = 1;". Ao mesmo tempo, para exibir a informação em outro lugar, você deve comentar sobre os operadores "int Message = 1;" e "Message == 1;" e substituir todos os operadores posteriores Alert() com operadores Print(), então você será capaz de visualizar toda a informação na aba "Expert Advisors" no terminal do cliente.

O script fornece a possibilidade de calcular o tempo operacional do script usando a função GetTickCount(). Para esse propósito, coloque o seguinte operador no início do programa:


int start=GetTickCount();
//…
//…, and at the end of the program:
Alert("   Calculation time  ", GetTickCount()-start," millisec");

O código principal do script consiste de blocos comparando os estados (a posição e o tamanho das razões das diferenças entre os valores do histograma nas barras analisadas).

No script, os principais estados transientes possíveis relevantes (situações) são analisados. Por exemplo:



No total, existem 6 blocos de comparação no programa: blocos 1-2 para o MACD abaixo do eixo:

// ----------------------for MACD below the axis-------------------------1--&
  if(Macd_h1_c<0.0&&Macd_h1_a<0.0&&Macd_h1_a<0.0) 
   {
     //increment of bar "0" as related to the first one
     double r1=MathAbs(MathAbs(Macd_h1_a)-MathAbs(Macd_h1_b));
     //increment of bar "1" as related to bar "2" 
     double r2=MathAbs(MathAbs(Macd_h1_b)-MathAbs(Macd_h1_c));
// -- MACD is below - the trend is moving down
   if(Macd_h1_c>Macd_h1_b&&Macd_h1_b>Macd_h1_a)
    {
     if(r1>r2) 
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend is moving down with acceleration");
     }
    if(r1<r2) 
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend is moving down with slowing down");
     }
    if((r1==r2)||MathAbs(r1-r2)<0.000015)
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend is moving down with constant acceleration");
     }
    }
// -- MACD is below - the trend is moving up
   if(Macd_h1_c<Macd_h1_b&&Macd_h1_b<Macd_h1_a)
    {
    if(r1>r2) 
     {
     Alert("On bar ",a," MACD<0 =",Macd_h1_a,
           "  The trend is moving up with acceleration");
     }
    if(r1<r2) 
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend is moving up with slowing down");
     }
    if((r1==r2)||MathAbs(r1-r2)<0.000015)
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend is moving up with constant acceleration");
     }
    }
// --- MACD is below - the trend reverses down    
   if(Macd_h1_c<Macd_h1_b&&Macd_h1_b>Macd_h1_a)
    {
    if(r1>r2) 
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend reverses down with acceleration");
     }
    if(r1<r2)
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend reverses down with slowing down");
     }
    }
// --- MACD is below - the trend reverses up
   if(Macd_h1_c>Macd_h1_b&&Macd_h1_b<Macd_h1_a)
    {
    if(r1>r2)
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend reverses up with acceleration");
     }
     if(r1<r2) 
     {
     Alert("On bar ",a," MACD<0 = ",Macd_h1_a,
           "  The trend reverses up with slowing down");
     }
    }
   if(MathAbs(MathAbs(Macd_h1_a)-MathAbs(Macd_h1_b))<0.0002 && 
      MathAbs(MathAbs(Macd_h1_c)-MathAbs(Macd_h1_b))<0.0002)
    {
    Alert("On bar ",a,", it is Flat! within the range of:  ",Macd_h1_c,
          "   ",Macd_h1_b,"   ",Macd_h1_a);
    }
   }

Os blocos 2-3 são muito similares - para o MACD acima do eixo (consulte os arquivos em anexo).

Os blocos 3-4 são usados para referências acima no eixo:

// ------------for up-crossing the axis------------------3--&
   if(Macd_h1_c<0.0 && Macd_h1_b<0.0 && Macd_h1_a>0&&  // c<0 b<0
      Macd_h1_c<Macd_h1_b&&Macd_h1_b<Macd_h1_a)  
    {
     r1=MathAbs(Macd_h1_a)+MathAbs(Macd_h1_b);
     r2=MathAbs(Macd_h1_c)-MathAbs(Macd_h1_b);
    if(MathAbs(r1)>MathAbs(r2))
     {
     Alert("On bar ",a," the trend is up-crossing axis with acceleration ");
     }
    if(MathAbs(r1)<MathAbs(r2))
     {
     Alert("On bar ",a," the trend is up-crossing axis with slowing down ");
     }
    }
//---     
   if(Macd_h1_c<0.0 && Macd_h1_b>0.0 && Macd_h1_a>0&&  // b>0 a>0
      Macd_h1_c<Macd_h1_b&&Macd_h1_b<Macd_h1_a)
    {
     r1=MathAbs(Macd_h1_a)-MathAbs(Macd_h1_b);
     r2=MathAbs(Macd_h1_c)+MathAbs(Macd_h1_b);
    if(MathAbs(r1)>MathAbs(r2))
     {
     Alert("On bar ",a," the trend is up-crossing axis with acceleration");
     }
    if(MathAbs(r1)<MathAbs(r2))
     {
     Alert("On bar ",a," the trend is up-crossing axis with slowing down");
     }
    }

Similarmente, os blocos 4-5 são usados para referências abaixo no eixo (consulte os arquivos em anexo).

Os blocos 5-6 são usados para a reversão abaixo do eixo, os blocos 6-7 são usados para a reversão acima do eixo. Os blocos são comentados e podem ser usados por quem desejar analisar os dados históricos (consulte os arquivos anexos).

Um exemplo do script funcionando no histórico:



Se você deseja usar o script para negociações, seu cabeçalho deve parecer como a seguir:

//+------------------------------------------------------------------+
//|                                                 TrendMACD v6.mq4 |
//|     for trading                                                  |
//+------------------------------------------------------------------+
 
#property copyright "Genkov"
#property link      "genkov@bk.ru"
extern int a = 0;      // here you can specify the initial bar to be analyzed
extern int period = 30;       // set the value of the period you need
//+------------------------------------------------------------------+
int start()
  { 
   int b,c; b=a+1; c=b+1;
//----
  double Macd_h1_a= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,a);
  double Macd_h1_b= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,b);
  double Macd_h1_c= iMACD(NULL,period,12,26,9,PRICE_CLOSE,MODE_MAIN,c);
…
….

Os outros blocos de comparação são os mesmos destes dados na versão básica.


Um exemplo de como o script funciona para a negociação:


Por favor, note que os valores das variáveis 'a' e 'period' devem ser definidos antes de que você comece a utilizar o script! Além do mais, seria mais razoável na versão da negociação definir a barra inicial para um, já que a barra zero pode se tornar incompleta no momento da requisição dos dados, por exemplo, no início ou no meio de um período.


Como uma conclusão, eu gostaria de expressar minhas esperanças de que o uso deste script ajudará tanto os investidores iniciantes quanto experientes nas negociações e também que ele diminua a quantidade de erros por pelo menos 10 por cento. Boas negociações para todos!

Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/1519

Arquivos anexados |
TrendMACD_v5.mq4 (11.36 KB)
TrendMACD_v6.mq4 (9.63 KB)
Expert Advisors baseado em sistemas de trading populares e alquimia da otimização de robô de trading (Parte III) Expert Advisors baseado em sistemas de trading populares e alquimia da otimização de robô de trading (Parte III)
Nesse artigo o autor continua a analisar algoritmos de implementação dos sistemas de negociação mais simples e introduz a automação de simulações. O artigo será útil para investidores iniciantes e desenvolvedores de EA.
Análise comparativa de 30 indicadores e osciladores Análise comparativa de 30 indicadores e osciladores
O artigo descreve um Expert Advisor que permite conduzir a análise comparativa de 30 indicadores e osciladores com foco na formação de um pacote eficaz de índices para negociações.
Diagnósticos de mercado por pulso Diagnósticos de mercado por pulso
Nesse artigo, faremos uma tentativa de visualizar a intensidade de mercados específicos e seus segmentos de tempo para detectar as regularidades e padrões de comportamento.
Expert Advisors baseado em sistemas de trading populares e alquimia da otimização de robô de trading (Parte II) Expert Advisors baseado em sistemas de trading populares e alquimia da otimização de robô de trading (Parte II)
Nesse artigo o autor continua a analisar algoritmos de implementação dos sistemas de negociação mais simples e descreve alguns detalhes relevantes da utilização dos resultados de otimização. O artigo será útil para investidores iniciantes e desenvolvedores de EA.