O MQL4 como uma ferramenta do trader, ou a análise técnica avançada

18 fevereiro 2016, 12:28
Andrey Opeyda
0
431

Introdução

As transações comerciais são, antes de tudo, um cálculo de probabilidades. O proverbio que diz que o ócio é um motivador do progresso revela a razão pela qual todos aqueles indicadores e sistemas de transações foram desenvolvidos. O fato é que a maioria dos novatos no mundo das transações estuda teorias "prontas" de transação. Mas, por sorte, há ainda mais segredos de mercado a serem descobertos, e as ferramentas usadas na análise de movimentos de preços existem, basicamente, sob a forma de indicadores técnicos e conjuntos matemáticos ou estatísticos não realizados. Devemos agradecer a Bill Williams por sua contribuição à teoria dos movimentos de mercado. Mas talvez ainda seja cedo para descansar.


Registro de estatísticas

Nós podemos nos perguntar: "Que cor de candlestick (candelabro) é prevalente no gráfico de uma hora do EURUSD?" Nós poderíamos começar a contar os pretos, contando as suas centenas no bloco, e então contar os brancos. Mas nós também poderíamos escrever cerca de uma dúzia de linhas de códigos, que cumpririam a tarefa automaticamente. Basicamente, tudo é lógico, e não há nada de extraordinário aqui. Contudo, vamos encontrar a resposta para a pergunta acima. Primeiramente, vamos simplificar a identificação das cores de candlestick:

bool isBlack(int shift)
  {
    if(Open[shift] > Close[shift])
        return (true);
    return (false);
  }
//+------------------------------------------------------------------+
bool isWhite(int shift)
  {
    if(Open[shift] < Close[shift]) 
        return (true);
    return (false);
  }
//+------------------------------------------------------------------+

Usando o código já escrito, vamos continuar o experimento.

//EXAMPLE 1
      //Calculate black and white candles
      double BlackCandlesCount = 0;
      double WhiteCandlesCount = 0;
      double BProbability = 0;
 
      for(int i = 0; i < Bars - 1; i++)
        {
          if(isBlack(i) == true)
              BlackCandlesCount++;
 
          if(isWhite(i) == true)
              WhiteCandlesCount++;
        }
      
      BProbability = BlackCandlesCount / Bars;

O resultado é interessante é bastante previsível: 52.5426% das 16000 candles (velas) são brancas. Usando o compilador MQL4, nós também podemos resolver um problema relativo à ciclicidade das candles. Por exemplo, caso uma candle preta tiver sido fechada, qual é a probabilidade de uma branca ser formada? Isso, é claro, depende de uma grande variedade de fatores, mas vamos consultar as estatísticas.

//EXAMPLE 2
      //Calculate seqences of 1st order
      //BW means after black going white candle     
      double BW = 0;
      double WB = 0;
      double BB = 0;
      double WW = 0;
       
      for(i = Bars; i > 0; i--)
        {
         if(isBlack(i) && isWhite(i-1)) 
             BW++;           
         if(isWhite(i) && isBlack(i-1)) 
             WB++;
         if(isBlack(i) && isBlack(i-1)) 
             BB++;            
         if(isWhite(i) && isWhite(i-1)) 
             WW++;
        }

Os resultados obtidos:
- Brancas seguidas de pretas - 23,64 %
- Pretas seguidas de brancas - 23,67 %
- brancas seguidas de brancas - 21,14 %
- Pretas seguidas de pretas - 20,85 %

Como podemos observar, a probabilidade de uma candle ser seguida por outra da mesma cor é um pouco menor do que ela ser seguida por uma candle de cor oposta.

Usando o MQL4 e possuindo os dados históricos, um trader pode realizar pesquisas de mercado mais profundas. O terminal permite o desenho de histogramas. Nós usaremos esta função para desenhar a distribuição de cor de candles de acordo com os valores dos indicadores WPR e RSI.

//EXAMPLE 3.1
      //Build histogram by RSI
      //RSI min/max - 0/100
      
      double RSIHistogramBlack[100];
      double RSIHistogramWhite[100];
      
      for(i = Bars; i > 0; i--)
        {
          int rsi_val = iRSI(NULL,0,12,PRICE_CLOSE,i);
          if(isWhite(i))
              RSIHistogramWhite[rsi_val]++;
          if(isBlack(i))
              RSIHistogramBlack[rsi_val]++;
        }
      for(i = 0; i < 100; i++)
        {
          ExtMapBuffer1[i] = RSIHistogramBlack[i];
          ExtMapBuffer2[i] = -RSIHistogramWhite[i];
        }
 
//EXAMPLE 3.2
      //Build histogram by %R
      //%R min/max - 0/-100

      double WPRHistogramBlack[100];
      double WPRHistogramWhite[100];
      
      for(i = Bars; i > 0; i--)
        {
          int wpr_val = iWPR(NULL,0,12,i);
          int idx = MathAbs(wpr_val);
          if (isWhite(i))
              WPRHistogramWhite[idx]++;
          if (isBlack(i))
              WPRHistogramBlack[idx]++;
        }




De todo modo, seria mais objetivo, ao invés de contar candlesticks pretos e brancos, registrar estatísticas a respeito de transações lucrativas e desvantajosas com diferentes valores de StopLoss e TakeProfit. O procedimento abaixo irá nos auxiliar nessa tarefa:

int TestOrder(int shift, int barscount, int spread, int tp, int sl, int operation)
 {
   double open_price = Close[shift];
   
   if (operation == OP_BUY)
      open_price  = open_price + (Point * spread);
      
   if (operation == OP_SELL)
      open_price  = open_price - (Point * spread);
      
   
   for (int i = 0; i<barscount; i++)
    {
      if (operation == OP_BUY)
       {
         //sl
         if (Low[shift-i] <= open_price - (Point * sl) )
            return (MODE_STOPLOSS);
         //tp            
         if (High[shift-i] >= open_price + (Point * tp) )
            return (MODE_TAKEPROFIT);            
       }
      
      if (operation == OP_SELL)
       {
         //sl
         if (High[shift-i] >= open_price + (Point * sl) )
            return (MODE_STOPLOSS);
         //tp            
         if (Low[shift-i] <= open_price - (Point * tp) )
            return (MODE_TAKEPROFIT);            
       }
      
    }  
   return (MODE_EXPIRATION);   
 }

Estou certo de que os resultados irão lhe surpreender. Os mapas de Kohonen, a distribuição gaussiana e o coeficiente de Hurst irão lhe surpreender ainda mais. Basicamente, há muitas coisas surpreendentes. O principal é não nos esquecermos da essência e do sentido das transações comerciais.

Conclusão

Basicamente, cada trader utiliza as suas próprias técnicas de transações. É claro que nada pode impedi-los de representar pitorescamente a eficiência do seu sistema, analisá-lo e utilizá-lo em transações. A ausência de resultados também é um resultado. O conhecimento adquirido pelo trader apenas aumentará a produtividade das suas transações.


Traduzido do russo pela MetaQuotes Software Corp.
Artigo original: https://www.mql5.com/ru/articles/1410

Arquivos anexados |
instrument.mq4 (5.02 KB)
Algoritmos genéticos vs. busca simples no otimizador do MetaTrader 4 Algoritmos genéticos vs. busca simples no otimizador do MetaTrader 4

O artigo compara o tempo e os resultados obtidos pela otimização dos Expert Advisors usando algoritmos genéticos e aqueles obtidos por buscas simples.

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.

Múltiplas recontagens de barra nula em alguns indicadores Múltiplas recontagens de barra nula em alguns indicadores

O artigo trata do problema de se recontar o valor do indicador no terminal do cliente MetaTrader 4 quando a barra nula muda. Nele, é delineada a ideia geral de como adicionar ao código do indicador alguns programas extras que permitem restaurar o código do programa salvo antes de recontagens múltiplas.

Meu primeiro "graal" Meu primeiro "graal"

Aqui são examinados os erros mais comuns que levam programadores de primeira viagem a criar sistemas de transações "super lucrativos" (durante testes). São apresentados experts exemplificadores que apresentam resultados fantásticos no verificador, mas resultam em perdas em transações reais.