English Русский 中文 Español Deutsch 日本語
Comentador do sistema do expert. Uso prático dos indicadores integrados a um programa MQL4

Comentador do sistema do expert. Uso prático dos indicadores integrados a um programa MQL4

MetaTrader 4Negociação | 18 fevereiro 2016, 11:48
795 0
Andrey Opeyda
Andrey Opeyda


Um trader experiente nunca abriria uma posição caso nenhum indicador técnico confirmasse essa decisão. Por exemplo, o trader realizou análises técnicas e concluiu que é possível abrir uma posição longa para uma segurança, digamos EURUSD. Para entrar no mercado com o preço atual (ver figura 1 abaixo), um trader experiente verifica os resultados obtidos por um indicador, por exemplo, o oscilador estocástico, e espera até que ele forneça um sinal de confirmação. O indicador e os seus sinais são descritos aqui: https://www.metatrader5.com/en/terminal/help/indicators/oscillators/so. No caso do nosso exemplo, vamos usar um sinal que é descrito lá.

"...Comprar quando a linha %K se elevar acima da linha %D e vender quando a linha %K cair abaixo da linha %D."



Figura 1. Preços para EURUSD

%K é a linha principal, %D (tracejada) é a linha de sinal. O MQL4 permite o uso de funções integradas para o cálculo de indicadores. A lista completa dessas funções é apresentada no final deste artigo e na documentação do MQL4. O oscilador estocástico do indicador também está entre elas. Para calcular os valores da linha principal e da linha de sinal, usamos a função abaixo:


double iStochastic( string symbol, int timeframe, int %Kperiod, 
                    int %Dperiod, int slowing, int method, 
                    int price_field, int mode, int shift)


A função é descrita em maiores detalhes na documentação do MQL4.

Abaixo temos o cálculo do valor da linha principal do oscilador estocástico do indicador no MQL4:


iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, i)


Aqui, os parâmetros 3,5,5 são valores dos períodos das médias do indicador, MODE_SMA é o método de cálculo da média móvel, i – é o número do candlestick, para o qual o valor é calculado, o parâmetro MODE_MAIN informa que a linha principal (%K) deve ser calculada. Abaixo temos, respectivamente, o cálculo da linha de sinal:


iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL, i)


Ao usar as funções integradas do cálculo do indicador, é necessário especificar o cronograma e o símbolo do gráfico. No nosso caso, são considerados o símbolo atual e o cronograma atual do gráfico (parâmetros NULL e 0). É necessário lembrar que cálculos podem ser feitos em relação a quaisquer símbolos, e para quaisquer cronogramas. Pode-se observar no gráfico do oscilador estocástico que o valor da linha principal é igual a 54.4444 e o valor da linha de sinal é 46.1238, ou seja:


iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, i) > 
iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL, i)


Para nós será fácil automatizar os cálculos do indicador. Seria conveniente que o indicador não consumisse espaço no gráfico de preços. A melhor solução seria eliminar o diagrama do indicador do gráfico e exibir apenas o sinal calculado acima. O método mais popular de exibir sinais é colocar caracteres "Wingdings" no gráfico. Nós discutiremos esse método mais tarde. Por enquanto, vamos tentar usar outro recurso do MQL4. Trata-se do operador chamado Comment().


void Comment( ...)


Ele ajuda a exibir quaisquer comentários no gráfico de preços.


//STOCH
 
      double valSTOCH=0; 
      string commentSTOCH = "Stoch:         ";
      string commentSTOCHAdd = "   No data ";
      if(iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0)
>iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0))
        commentSTOCHAdd =  "    Buy is possible";
               
      if(iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0)
<iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0))
        commentSTOCHAdd =  "    Sell is possible";   
        
      commentSTOCH =  commentSTOCH + commentSTOCHAdd;


O código fonte acima traduz o sinal em um texto, que é exibido no gráfico.


Comment(commentSTOCH + "\n");


O comentário é conveniente, pois o usuário pode usar o caractere de avanço de linha para visualizar os comentários linha a linha. Usando o código acima, um trader pode eliminar o diagrama do oscilador estocástico. Ele terá um sistema de alarme que irá exibir os acontecimentos atuais do mercado em forma de texto.



Figura 2. Comprar é possível

Agora vamos considerar, por exemplo, o índice do canal Commodity (CCI).

"...mede o desvio no preço das commodities em relação ao seu preço estatístico médio. Valores altos do índice indicam que o preço está excepcionalmente alto em relação à média, e valores baixos mostram que o preço está demasiadamente baixo. Apesar do seu nome, o índice do canal Commodity pode ser aplicado a qualquer instrumento financeiro, e não apenas a mercadorias."

Após automatizar os cálculos do sinal do CCI, nós receberemos um comentário adicional, como: "O preço está presumivelmente alto demais". Usando, por exemplo, um indicador técnico chamado Acceleration/Deceleration (aceleração/desaceleração, AC), que mede a aceleração/desaceleração da tendência atual, o trader pode se informar ainda melhor. "...Se você entender que o Acceleration/Deceleration é um sinal de um aviso anterior, você terá vantagens claras."

Esta é a possível aparência do código exibindo sinais de vários indicadores:

//   Demarker
      double valDem=iDeMarker(NULL, 0, 13, 0);
      string commentDem = "DeMarker:    ";
      string commentDemAdd = "   No data";
     
      if (valDem < 0.30)
         commentDemAdd =  "   Prices are expected to go Up";
      
      if (valDem > 0.70)
         commentDemAdd =   "   Prices are expected to go Down";
      commentDem = commentDem + commentDemAdd;
 
//ATR
      double valATR=iATR(NULL, 0, 12, 0);
      string commentATR = "ATR:           ";
      commentATR=commentATR + "   Trend will probably change " + valATR;
            
//CCI
      double valCCI=iCCI(NULL,0,12,PRICE_MEDIAN,0);
      string commentCCI = "CCI:            ";
      string commentCCIAdd = "   No data ";
      if (valCCI > 100)
        commentCCIAdd =  "   Overbought " + 
                         "(a correcting down-trend is possible) ";
 
      if (valCCI < -100)
        commentCCIAdd =  "   Oversold " + 
                         "(a correcting up-trend is possible) ";
        
      commentCCI =  commentCCI + commentCCIAdd + valCCI;
 
 
 
//MFI
      double valMFI=iMFI(NULL,0,14,0);
      string commentMFI = "MFI:            ";
      string commentMFIAdd = "   No data ";
      if (valMFI > 80)
        commentMFIAdd =  "    a possible market peak ";
 
      if (valMFI < 20)
        commentMFIAdd =  "    a possible market trough ";
        
        commentMFI =  commentMFI + commentMFIAdd + valMFI;


Cálculos também podem ser feitos com matrizes. Funções que terminam com OnArray podem ser usadas para este fim. Por exemplo, a função iMAOnArray que calcula a média móvel na matriz de dados. É interessante notar que às vezes alguns indicadores tendem a fornecer sinais opostos. E, bem, para um trader, a ausência de sinais também é um sinal. A realização de transações não tem a ver apenas com tomar uma decisão sobre a direção de abrir uma posição, mas também sobre o tempo da abertura. O sistema do expert "comentador" apenas calcula sinais relativos ao cronograma atual, mas um trader pode adicionar cálculos relativos a cronogramas maiores ou menores ao código do programa. Também deve-se notar que o uso do MQL4 não limita o trader de forma alguma, mas eleva a mente e melhora a funcionalidade.

As funções dos cálculos do indicador integrado disponíveis no MQL4 são fornecidas abaixo:


iAC 
iAD 
iAlligator 
iADX 
iATR 
iAO 
iBearsPower 
iBands 
iBandsOnArray 
iBullsPower 
iCCI 
iCCIOnArray 
iCustom 
iDeMarker 
iEnvelopes 
iEnvelopesOnArray 
iForce 
iFractals 
iGator 
iIchimoku 
iBWMFI 
iMomentum 
iMomentumOnArray 
iMFI 
iMA 
iMAOnArray 
iOsMA 
iMACD 
iOBV 
iSAR 
iRSI 
iRSIOnArray 
iRVI 
iStdDev 
iStdDevOnArray 
iStochastic 
iWPR


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

Arquivos anexados |
Commentator.mq4 (7.03 KB)
Gráficos "sem buracos" Gráficos "sem buracos"
O artigo trata da realização de gráficos sem barras puladas.
Armazenamento e visualização de informações Armazenamento e visualização de informações
O artigo trata de métodos convenientes e eficientes de armazenamento e visualização de informações. São consideradas aqui alternativas ao arquivo log padrão do terminal e à função Comment().
Algoritmos genéticos: Matemática Algoritmos genéticos: Matemática
Algoritmos genéticos (evolucionários) são usados para fins de otimização. Um exemplo desse tipo de fim pode ser o aprendizado neuronet, ou seja, a seleção de valores de peso tais que permitam se chegar ao erro mínimo. Além disso, o algoritmo genético é baseado no método de busca aleatória.
Gerenciamento de pedidos - É simples Gerenciamento de pedidos - É simples
O artigo trata das várias formas de se controlar posições abertas e pedidos pendentes. Ele tem como objetivo simplificar a escrita de Expert Advisors.