English Русский 中文 Español Deutsch 日本語
Exibição simultânea dos sinais de vários indicadores dos quatro calendários

Exibição simultânea dos sinais de vários indicadores dos quatro calendários

MetaTrader 4Exemplos | 19 fevereiro 2016, 14:18
1 288 0
Pavel Chigirev
Pavel Chigirev


Introdução

No trading manual você tem que ficar de olho nos valores de vários indicadores. É um pouco diferente do trading mecânico. Se você tiver dois ou três indicadores e tiver escolhido somente um calendário para trading, não é uma tarefa complicada. Mas o que você faria se tivesse cinco ou seis indicadores e sua estratégia de trading necessitasse considerar os sinais em vários prazos? Além disso, o que vai acontecer, se você negociar simultaneamente com vários pares de moedas? A tarefa parece ser bastante complicada e, na maioria dos casos, conduz a erros e, consequentemente, a perdas.


Real_Time_MultiIndicator_v1 é especialmente criado para resolver essas tarefas. Este indicador calcula simultaneamente os sinais dos indicadores escolhidos nos quatro calendários e converte os sinais em uma tabelo na sub janela do gráfico principal. Nos parênteses, após o sinal do indicador, você pode ver o número das últimas barras pertencentes ao calendário escolhido, que demonstram o sinal.

Você pode alterar os parâmetros dos indicadores e adicionar seus próprios indicadores. Agora, para tomar uma decisão você só tem que dar uma olhada na tabela onde os sinais dos quatro calendários são coletados.



Real_Time_MultiIndicator_v1

O indicador mostra os dados na sub janela separada do gráfico. Essa é a visão externa dos indicadores:



Na coluna INDICADOR você pode ver os nomes dos indicadores que estão sendo utilizados, nos parênteses estão seus parâmetros. Nas colunas M15, M30, H1 e H4 os sinais dos indicadores dos calendários correspondentes são exibidos. Também é exibido o número das barras que demonstram o sinal. Se os dados do histórico estiverem sendo carregados ou faltando, você verá a mensagem Esperando dados para o calendário correspondente. Se o terminal estiver conectado à Internet, os dados necessários serão carregados em poucos segundos.

Por favor, preste atenção que o preço médio (Alto + Baixo)/2 é utilizado para todos os indicadores. Ele pode ser diferente dos valores padrão. Se você anexar o indicador para o gráfico ou se você alterar o zoom do gráfico principal, a tabela com os dados pode espalhar ou diminuir. Não se confunda. A tabela vai ter uma visualização normal após a vinda do novo crédito. Se o terminal não estiver conectado à Internet, após o zoom do gráfico faça o seguinte: altere o calendário, por exemplo, H1 a H4 e vice-versa, e a tabela terá uma visualização normal.

Para usar o indicador que você tem que baixar o arquivo Real_Time_MultiIndicator_v1.mq4 na pasta \ folder with the terminal\experts\indicators e reiniciar o terminal. Para anexar o indicador escolha a seção "Indicadores do usuário" no "Navegador", em seguida vá para Real_Time_MultiIndicator_v1. Depois para o menu



Você pode escolher a cor da tabela (Tcolor), a cor do texto (txt color), e também os parâmetros dos indicadores que serão utilizados. Se você deseja alterar os parâmetros dos indicadores, você tem que fazer o seguinte: dê um clique direito no gráfico principal e escolha a opção de comando "Lista de indicadores" ou use Ctrl + I,



depois escolha Real_Time_MultiIndicator_v1 e clique no botão "Propriedades". A mudança dos parâmetros dos indicadores não é muito difícil, enquanto que a adição de um novo indicador precisa de algum esforço e conhecimento básico de MQL4.



Adicionando um novo indicador na Tabela

Eu não preenchi as três últimas linhas da tabela do indicador para que você possa adicionar os indicadores que você usa ou aqueles que você mesmo escreveu. Eu tentei deixar o algoritmo de cálculo e a conversão dos dados na tabela o mais fácil possível. Além disso, eu deixei as peças do código com comentários no programa de origem para que qualquer pessoa iniciante em MQL4 possa adicionar os indicadores na tabela sem se aprofundar em detalhes sobre o funcionamento do algoritmo.

Utilizando o exemplo do indicador do Índice de Canal de Commodities, eu vou mostrar o algoritmo para adicionar um novo indicador na tabela. Por favor, preste atenção, vou interpretar os sinais desse indicador da seguinte forma: o valor do indicador 0 - sinal para comprar, e vice-versa. Esta interpretação é um pouco diferente da interpretação clássica, mas faço isso de propósito para tornar a explicação do algoritmo mais fácil. Além disso, você pode interpretar os sinais conforme própria conveniência.

Escolha a seção “indicadores do Usuário” na seção “Navegador” e vá para o Real_Time_MultiIndicator_v1 e clique no botão "Alterar".


Depois faremos mudanças no código fonte:

//----The parameters of the indicators
extern string p1 = "SAR parameters";
extern double SAR_Step = 0.01;
extern double SAR_Max = 0.1;
extern string p2 = "MACD parameters";
extern int Fast_EMA = 12;
extern int Slow_EMA = 26;
extern int MACD_SMA = 9;
extern string p3 = "Moving Average parameters";
extern int Fast_MA = 5;
extern int Slow_MA = 10;
extern string p4 = "ADX parameters";
extern int ADX_Period = 14;
//extern string p5 = "The parameters of the indicator 1";
//extern string p6 = "The parameters of the indicator 2";
//extern string p7 = "The parameters of the indicator 3";


Nesta peça você tem que apagar os comentários na linha com o texto "Os parâmetros do indicador 1" e adicionar o nome do CCI. Como resultado você terá:

extern string p5 = "CCI parameters";

Em seguida, adicione o parâmetro do indicador CCI - o período:

extern string p5 = "CCI parameters";
extern int Period_CCI = 14;


Nesta linha

string name[] = {"Parabolic SAR","MACD","Сrossing MA","ADX","","",""};


adicione o nome do indicador para exibi-lo na tabela:

string name[] = {"Parabolic SAR","MACD","Сrossing MA","ADX","CCI","",""};


Em seguida, no bloco de inicialização do indicador

  int init()
    {
     string sn = "Real_Time_MultiIndicator_v1";
     IndicatorShortName(sn);
     SetIndexLabel(0, sn);
     name[0] = name[0] + "(" + DoubleToStr(SAR_Step, 2) + ", " +
               DoubleToStr(SAR_Max, 2) + ")";
     name[1] = name[1] + "(" + DoubleToStr(Fast_EMA, 0) + ", " +
               DoubleToStr(Slow_EMA, 0) + ", " + 
               DoubleToStr(MACD_SMA, 0) + ")";
     name[2] = name[2] + "(" + DoubleToStr(Fast_MA, 0) + ", " +
               DoubleToStr(Slow_MA, 0) + ")";
     name[3] = name[3] + "(" + DoubleToStr(ADX_Period, 0) + ")";
     //name[4] = name[4] + "(" + 
     //          DoubleToStr(1st parameter of the indicator 1, 0) +
     //          ", " + DoubleToStr(2nd parameter of the indicator 1, 0) + ")";
     //name[5] = name[5] + "(" + 
     //          DoubleToStr(1st parameter of the indicator 2, 0) +
     //          ", " + DoubleToStr(2nd parameter of the indicator 2, 0) + ")";
     //name[6] = name[6] + "(" + 
     //          DoubleToStr(1st parameter of the indicator 3, 0) +
     //          ", " + DoubleToStr(2nd parameter of the indicator 3, 0) + ")";
     return(0);
    }

deletamos os comentários na linha

//name[4] = name[4] + "(" + 

//          DoubleToStr(1st paramater of the indicator 1, 0) +

//          ", " + DoubleToStr(2nd parameter of the indicator 1, 0) + ")";

e fazemos as seguintes alterações:

name[4] = name[4] + "(" + DoubleToStr(Period_CCI, 0) + ")";

Depois, deletamos os comentários deste bloco;

/*

//+------------------------------------------------------------------+

//| Function 1                                                                       |
//+------------------------------------------------------------------+

string Function(int p)

 {
  int ii  = 1;
  if (C=Condition for the indicator - true - sell, false - buy)
    {
      while (Conditionc for sell)
          ii++;
      if (Error(p,ii+1) == 1) return("Waiting data");
      return("Sell(" + DoubleToStr(ii, 0) + ")");
    }
  else
    {
      while (Condition for buy)
          ii++;
      if (Error(p,ii+1) == 1) return("Waiting data");
      return("Buy(" + DoubleToStr(ii, 0) + ")");
    }
  }*/

Ao invés da palavra "Função", escreva o nome da função, por exemplo, CCI:

string CCI(int p)

Agora, ao invés "Condição para o indicador - verdadeiro - vender, falso - comprar" escreva a condição para o sinal comprar para o barra (zero) atual:

iCCI(NULL, p, Period_CCI, PRICE_MEDIAN, 0) < 0

Em seguida, em vez da linha "Condições para venda" escrever a condição para o sinal comprar e para calcular o número das barras processadas demonstrando este sinal:

while(iCCI(NULL, p, Period_CCI, PRICE_MEDIAN, ii) < 0)

ii—é uma mudança na referência da barra atual. Da mesma forma alterar a linha "Enquanto" (Condição de compra) para

while(iCCI(NULL, p, Period_CCI, PRICE_MEDIAN, ii) > 0)

Como resultado, vemos:

string CCI(int p)
  {
    int ii = 1;
    if(iCCI(NULL, p, Period_CCI, PRICE_MEDIAN, 0) < 0)
     {
       while(iCCI(NULL, p, Period_CCI, PRICE_MEDIAN, ii) < 0)       
ii++;
      if(Error(p, ii + 1) == 1) 
          return("Waiting data");
      return("Sell(" + DoubleToStr(ii, 0) + ")");
    }
  else
    {
      while(iCCI(NULL, p, Period_CCI, PRICE_MEDIAN, ii) > 0)
          ii++;
      if(Error(p, ii + 1) == 1) 
          return("Waiting data");
      return("Buy(" + DoubleToStr(ii, 0) + ")");
    }
  }
Se você deseja contar os sinais dos níveis 100 e -100, e não para interpretar a faixa (-100;100) como um sinal para comprar ou vender, você tem que mudar 0 para -100 e 100 para vender e comprar , respectivamente, e para adicionar a próxima linha para indicar o dado de incerteza na tabela:

if(iCCI(NULL, p, Period_CCI, PRICE_MEDIAN, 0) > -100) &&   
iCCI(NULL, p, Period_CCI, PRICE_MEDIAN, 0) < 100))
    return("N/A");

Agora, temos:

string CCI(int p)
   {  
int ii = 1;
    if((iCCI(NULL, p, Period_CCI, PRICE_MEDIAN, 0) > -100) && 
       (iCCI(NULL, p, Period_CCI, PRICE_MEDIAN, 0) < 100) )
        return("N/A");
    if(iCCI(NULL, p, Period_CCI, PRICE_MEDIAN, 0) < -100)
      {
        while(iCCI(NULL, p, Period_CCI, PRICE_MEDIAN, ii) < -100)
            ii++;
        if(Error(p, ii + 1) == 1) 
            return("Waiting data");
        return("Sell(" + DoubleToStr(ii, 0) + ")");
      }
    else
      {
        while(iCCI(NULL, p, Period_CCI, PRICE_MEDIAN, ii) > 100)
            ii++;
        if(Error(p, ii + 1) == 1) 
            return("Waiting data");
        return("Buy(" + DoubleToStr(ii, 0) + ")");
      }
   }

Agora, temos de converter os resultados do cálculo para a tabela. Faremos o seguinte: encontraremos o pedaço do código no texto do programa

/*//----------Пятая строка   
  for (i = 1; i <= 4; i++)
     {
       ObjectDelete("6" + DoubleToStr(i, 0));
       ObjectCreate("6" + DoubleToStr(i, 0), OBJ_TEXT, 
                           WindowFind("Real_Time_MultiIndicator_v1"), textT[i+1], textC[6]);
       ObjectSetText("6" + DoubleToStr(i, 0), Функция(per[i-1]), 13, "Tahoma", TxtColor);
    }*/

e deletaremos os comentários. À medida que as coordenadas de exibição do texto são calculadas separadamente, torna-se possível preencher a tabela usando o ciclo. Você tem que definir a função que calcula os resultados. Em seguida, escrever o nome da função ao invés da palavra "Função". Agora, temos:

 //----------Fifth line   
 for (i=1;i<=4;i++)
   {
     ObjectDelete("6" + DoubleToStr(i, 0));
     ObjectCreate("6" + DoubleToStr(i, 0), OBJ_TEXT,
                  WindowFind("Real_Time_MultiIndicator_v1"),
                  textT[i+1], textC[5]);
     ObjectSetText("6" + DoubleToStr(i, 0), CCI(per[i-1]), 13, 
                   "Tahoma", TxtColor);
   }

Em seguida, clique no botão "Compilar". Vá para o terminal e anexe o indicador ao gráfico. Como resultado, temos:


Se você deseja alterar os prazos em que os valores dos indicadores são contados, você tem que fazer o seguinte:
Na linha:

int per[] = {15,30,60,240};

insira a quantidade de minutos para o calendário que você escolheu, por exemplo:

int per[] = {5,30,60,240};


e na linha:

string nameS[] = {"INDICATOR","M15","M30","H1","H4"}

você tem que digitar seu nome:


string nameS[] = {"INDICATOR","M5","M30","H1","H4"};

e compilar. Finalmente, temos:



Depuração dos parâmetros do histórico

O indicador descrito pode ser usado apenas no modo online. A razão para isso é que o teste no modo de visualização do indicador mostrará os valores adequados apenas para calendário atual. É a característica do terminal e do verificador. Se você deseja depurar os parâmetros dos indicadores ou testar a sua própria estratégia ao testar visualização do histórico, sugiro que você use o Real_Time_MultiExpert_v1. As funções desempenhadas pelo Real_Time_MultiIndicator_v1 e Real_Time_MultiExpert_v1 são absolutamente idênticas. Os códigos fonte são idênticos, e fazer alterações no código do expert tem o mesmo algoritmo que fazer alterações no código do indicador. Para utilizar o expert você tem que baixar o arquivo Real_Time_MultiExpert_v1. mq4 na pasta terminal folder\experts\indicators e reiniciar o terminal.

Para utilizar o Real_Time_MultiExpert_v1 você tem que fazer um modelo com o nome "Real_Time_MultiExpert_v1" com o indicador “Real_Time_MultiIndicator_v2” anexado ao gráfico. A tarefa do indicador "Real_Time_MultiIndicator_v2" é fazer uma sub janela com zoom sob o gráfico principal. Depois disso, você tem que selecionar o Real_Time_MultiExpert_v1 no campo "Advisor" do verificador e selecionar a opção "Todos os créditos" no campo "Modelo", caso contrário as indicações do advisor sobre a barra (zero) atual podem ser diferentes do verdadeiro estado de coisas, mas em geral as indicações estarão corretas.


Não esqueça de clicar no botão de mudança automática:

Em seguida, escolha a opção "Visualização" e clique no botão "Iniciar".


Na janela do Real_Time_MultiIndicator_v2 você verá a tabela com os sinais dos indicadores. Você pode escolher qualquer calendário para o teste, desde que os valores dos indicadores não dependam dele. Não há grande diferença entre o expert descrito e o indicador, assim você pode escolher o que você preferir. Na minha opinião, é mais conveniente usar o indicador no modo online.


Conclusão

No artigo, discutimos um dos métodos de coleta e organização de informações importantes sobre a condição do mercado e, também, os sinais dos diversos indicadores dos quatro calendários. Este método pode ser utilizado para a resolução de uma ampla gama de funções. Usando os programas descritos é possível selecionar os parâmetros necessários para os indicadores que você utiliza ao testar o histórico de cotações. O indicador é destinado para ser utilizado no trading manual.


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

Como desenvolver no MQL4 um Robô Negociador seguro e confiável Como desenvolver no MQL4 um Robô Negociador seguro e confiável
O artigo lida com os erros mais comuns que ocorrem no desenvolvimento e na utilização de um Expert Advisor. Também é descrito um sistema automatizado de trading exemplar.
Um Expert Advisor feito sob encomenda Manual para um operador Um Expert Advisor feito sob encomenda Manual para um operador
Nem todos os operadores são programadores. E nem todos programadores são realmente bons. Então, o que deve ser feito para você automatizar seu sistema sem ter tempo e vontade de estudar o MQL4?
Transferência de um Código Indicador para um Código Expert Advisor. Conclusão Transferência de um Código Indicador para um Código Expert Advisor. Conclusão
Este é o artigo final, dedicado à Transferência de um Código Indicador para um Código Expert Advisor. Aqui o autor transforma em um determinado exemplo um código de um Expert Advisor para que esta área seja apresentada em um único arquivo sem chamar indicadores personalizados.
Terminal Service Client. Como tornar o Pocket PC um amigo do Big Brother Terminal Service Client. Como tornar o Pocket PC um amigo do Big Brother
O artigo descreve como conectar o PC remoto com o MT4 Client Terminal instalado via PDA.