Teste de padrões de pares de moedas: Aplicação prática e perspectivas reais de negociação. Parte IV

18 setembro 2018, 06:45
Andrei Novichkov
0
902

Introdução

Este artigo conclui o estudo dos padrões de teste que surgem quando negociamos cestas de pares de moedas que nós iniciamos aqui. Tudo o que nós temos a fazer agora é considerar o padrão restante — o gráfico que cruza a média móvel.

Anteriormente, nós já analisamos este padrão, mas com referência a certas condições:

  • O trader recebe um sinal de entrada no fechamento da vela, quando o gráfico do indicador unificado para uma das cestas de pares de moedas é cruzado pela sua própria média móvel. Existem dois desses sinais — a média móvel cruza o gráfico para baixo (venda) e para cima (compra).

Nós descobrimos que a propriedade positiva desse padrão é um grande número de sinais. A desvantagem é a necessidade de filtragem adicional.

Agora, eu proponho testar esse padrão no gráfico da diferença entre os valores do indicador unificado para as duas cestas: a moeda base e a moeda cotada (veja os detalhes aqui). Usando duas cestas de pares de moedas em vez de uma pode servir como um fator para uma filtragem adicional.

Além disso, na segunda metade do artigo, nós vamos nos concentrar em aplicar todo o conhecimento adquirido em negociação real.

Padrão para pesquisa

Vamos repetir o requisito básico para o padrão: o cruzamento do indicador unificado pela média móvel deve ser claro e perceptível.

Padrão "bom" (sinal) que nós estamos procurando
Sem padrão, sinal "ruim"




A linha verde é um gráfico do indicador unificado, enquanto que a linha rosa é a média móvel.

Para identificar com precisão o padrão, é necessário que a distância entre o gráfico do indicador unificado e a média móvel antes e depois do cruzamento não seja menor do que o valor especificado na imagem à esquerda (Delta1 e Delta2). É óbvio que essa condição não é encontrada na imagem à direita, no intervalo delimitado pelas linhas verticais de cor azul. Assim, não há padrão nesta imagem.

Em estudos futuros, nós verificaremos como usar os padrões semelhantes aos da imagem à esquerda, como sinais de entrada. A chegada do mesmo padrão dirigido de forma oposta pode servir como um sinal de saída do mercado. No entanto, essa tática implica na presença permanente no mercado, e é improvável que isso traga um resultado positivo. Portanto, é possível sugerir a detecção de padrões "ruins" como um sinal de saída. Isso implica que as posições serão encerradas sem a abertura de uma nova.

Ferramentas de pesquisa

Nós já temos todas as ferramentas. Nós desenvolvemos elas mais cedo, nos artigos anteriores. Embora o código não tenha mudado muito, vamos mostrá-lo aqui. O EA testEAbasket3.mq5 é usado como o principal:

//+------------------------------------------------------------------+
//|                                                 testEAbasket.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Trade\\Trade.mqh>


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum BSTATE
  {
   BCLOSE = 0,
   BBUY   = 1,
   BSELL  = 2
  };
//+------------------------------------------------------------------+
//| Função de inicialização do Expert                                |
//+------------------------------------------------------------------+
input int wpr = 20;
input int ma  = 10;
input double lt=0.01; 

int h;
ulong  Ticket;

double m[1],ml;
double w[1],wl;

BSTATE g_state;

double g_dMinSize = 2.0;
double g_dMaxSize = 50.0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   h=iCustom(NULL,0,"testWPR&MA3",wpr,ma);
   if(h==INVALID_HANDLE) 
     {
      Print("Error while creating testWPR&MA3");
      return (INIT_FAILED);
     }

   g_state=BCLOSE;
   EventSetTimer(1);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Função de desinicialização do Expert                             |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(h);
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Função tick do Expert                                            |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+
//| Funçao timer                                                     |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(IsNewCandle())
     {
      wl=w[0];
      CopyBuffer(h,0,1,1,w);
      ml=m[0];
      CopyBuffer(h,1,1,1,m);
      double d1 = MathAbs(w[0] - m[0]);
      double d2 = MathAbs(ml - wl);
      if(w[0]>m[0] && wl<ml) 
        {
         if(g_state!=BCLOSE) CloseAllPos();
         if(d1 >= g_dMinSize && d2 >= g_dMinSize &&
            d1 <= g_dMaxSize && d2 <= g_dMaxSize) 
           {
            EnterBuy(lt);
            g_state=BBUY;
           }
        }
      if(w[0]<m[0] && wl>ml) 
        {
         if(g_state!=BCLOSE) CloseAllPos();
         if(d1 >= g_dMinSize && d2 >= g_dMinSize &&
            d1 <= g_dMaxSize && d2 <= g_dMaxSize) 
           {
            EnterSell(lt);
            g_state=BSELL;
           }
        }
     }
  }
//+------------------------------------------------------------------+

void CloseAllPos()
  {

   CTrade Trade;
   Trade.LogLevel(LOG_LEVEL_NO);
   Trade.PositionClose(Ticket);
   g_state=BCLOSE;

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void EnterBuy(double lot)
  {

   CTrade Trade;
   Trade.LogLevel(LOG_LEVEL_NO);
   Trade.Buy(lot,_Symbol);
   Ticket=Trade.ResultDeal();
   g_state=BBUY;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void EnterSell(double lot)
  {

   CTrade Trade;
   Trade.LogLevel(LOG_LEVEL_NO);
   Trade.Sell(lot,_Symbol);
   Ticket=Trade.ResultDeal();
   g_state=BSELL;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewCandle()
  {
   static int candle=-1;
          int t1=0;
   switch(_Period)
     {
      case PERIOD_H1:  t1 = Hour();   break;
      case PERIOD_H4:  t1 = Hour4();  break;
      case PERIOD_D1:  t1 = Day();    break;
     }
     
   if(t1!=candle) {candle=t1; return(true);}
   return (false);
  }
            
  int Hour4(){return((int)Hour()/4);}

int Day()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.day);
  }

int Hour()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.hour);
  }

Esta é uma versão do EA testEAbasket.mq5 deste artigo revisado para as entradas em um único par de moedas, em vez de toda a cesta. O EA aplica os dados do indicador personalizado testWPR&MA3.mq5, que é a versão do indicador testWPR&MA.mq5 do mesmo artigo:

//+------------------------------------------------------------------+
//|                                                      testWPR.mq5 |
//|                                        MetaQuotes Software Corp. |
//|                                               http://fxstill.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_minimum -100
#property indicator_maximum 100


#property indicator_buffers 2
#property indicator_plots   2

input int WPR       = 20; //Period WPR
input int maperiod  = 10; //Period MA
input color   clr   = clrGreen;
input color   clrMA = clrMagenta;


int h,h1;
double ind[],ma[];

//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado               |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- mapeamento dos buffers dos indicadores
      h = iCustom(NULL,0,"testWPReur",WPR);
      if (h == INVALID_HANDLE) {
         Print("Error while creating testWPR");
         return (INIT_FAILED);
      }
      h1 = iCustom(NULL,0,"testWPRusd",WPR);
      if (h1 == INVALID_HANDLE) {
         Print("Error while creating testWPR");
         return (INIT_FAILED);
      }  
 

   IndicatorSetString(INDICATOR_SHORTNAME,"testWPRusd");
   IndicatorSetInteger(INDICATOR_DIGITS,2);
   IndicatorSetInteger(INDICATOR_LEVELS,2);
   IndicatorSetInteger(INDICATOR_LEVELSTYLE,0,STYLE_SOLID);
   IndicatorSetInteger(INDICATOR_LEVELSTYLE,1,STYLE_SOLID);
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrRed);
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrRed);
   IndicatorSetInteger(INDICATOR_LEVELWIDTH,0,1);
   IndicatorSetInteger(INDICATOR_LEVELWIDTH,1,1);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,-60);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,1,60);

   ArraySetAsSeries(ind,true);
   SetIndexBuffer(0,ind);
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,2);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,clr);
   PlotIndexSetString(0,PLOT_LABEL,"_tstWPRusd_");

   ArraySetAsSeries(ma,true);
   SetIndexBuffer(1,ma);
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID);
   PlotIndexSetInteger(1,PLOT_LINE_WIDTH,1);
   PlotIndexSetInteger(1,PLOT_LINE_COLOR,clrMA);
   PlotIndexSetString(1,PLOT_LABEL,"Middle_Basket_line_MA");


//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetValue(int shift)
  {
   double dBuf[1], dBuf1[1];
   double res=0.0;
   CopyBuffer(h,0,shift,1,dBuf);
   CopyBuffer(h1,0,shift,1,dBuf1);
   return (NormalizeDouble((dBuf[0] - dBuf1[0])/2, _Digits) );
  }
//+------------------------------------------------------------------+
//| Função de iteração do indicador personalizado                    |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(prev_calculated==0 || rates_total>prev_calculated+1)
     {
      int rt=rates_total-WPR;
      for(int i=1; i<rt; i++)
        {
         ind[i]=GetValue(i);
        }
      rt-=maperiod;
      for(int i=1; i<rt; i++)
        {
         ma[i]=GetMA(ind,i,maperiod,_Digits);
        }
     }
   else
     {
         ind[0] = GetValue(0);
         ma[0]  = GetMA(ind, 0, maperiod, _Digits);        
     }
//--- valor de retorno de prev_calculated para a próxima chamada
   return(rates_total);
  }
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {
      if(h!=INVALID_HANDLE) IndicatorRelease(h);
      if(h1!=INVALID_HANDLE) IndicatorRelease(h1);
  }
//+------------------------------------------------------------------+

double GetMA(const double &arr[],int index,int period,int digit) 
  {
   double m=0;
   for(int j=0; j<period; j++) m+=arr[index+j];
   m/=period;
   return (NormalizeDouble(m,digit));
  }
//+------------------------------------------------------------------+

O indicador sofreu ligeiras alterações para corresponder às condições de identificação do padrão descritas acima. Todas as ferramentas usadas podem ser encontradas no arquivo test.zip.

Anteriormente, estudos semelhantes começaram com a definição do número em potencial de entradas no mercado. Este não é o caso aqui, uma vez que nossa experiência de testar tais padrões sugere que o número de operações será suficiente.

Antes de testar, vamos especificar a forma padrão. Nós já dedicamos tempo suficiente para os valores específicos dos parâmetros Delta1 e Delta2. Estes valores foram encontrados e a filtragem rigorosa dos sinais de entrada no mercado foi implementada. Aqui, nós vamos relaxar um pouco as restrições. Isso aumentará o número de entradas sem comprometer o princípio subjacente ao padrão: Delta1 e Delta2 devem ser de pelo menos 2% e não mais que 50%.

Vamos escolher uma das duas estratégias de teste.

  • Presença constante no mercado. Os traders entram no mercado por um sinal e esperam por um sinal de entrada na direção oposta. Então eles encerram as posições em aberto, entrando na direção oposta, etc. Nós não vamos aderir a esta estratégia, uma vez que ela mostrou a sua ineficiência.
  • Saída do mercado sem abrir novas posições. Os traders entram no mercado por um sinal e esperam por um sinal de saída na forma de um padrão "ruim". Ele não fornece sinais de entrada, mas pode alertar sobre uma possível tendência de desaceleração ou sua reversão. Nós usaremos essa estratégia para testes.

Agora, vamos definir o tempo gráfico. Nos artigos anteriores, nós testamos o padrão em H1, H4 e D1. D1 mostrou poucos negócios, por isso nós vamos omiti-lo. Nós só sairemos de H1 e H4 e começaremos a testar a partir do EURUSD.

Teste do padrão

Após o teste em H1 do último ano, nós recebemos os seguintes resultados:

No tempo gráfico em H4:

Como nos testes anteriores, nós vemos um prejuízo no H1 e um lucro no H4.

Vamos testar o padrão nos principais pares de moedas: EURUSD, GBPUSD, AUDUSD, NZDUSD, USDCAD, USDCHF e USDJPY.

O teste não produziu nenhuma surpresa. Os resultados são semelhantes aos dados já recebidos: lucro no H4 e prejuízo no H1. Os relatórios de teste podem ser encontrados em anexo no arquivo testhtml.zip.

Nós já temos uma experiência de aumentar a lucratividade introduzindo uma classificação adicional de sinais de entrada. Usamos o segundo filtro que foi aplicado neste artigo:

  • Os traders NÃO compram se o gráfico WPR combinado tocar ultrapassar a linha de sobrecompra para cima.
  • Os traders NÃO vendem se o gráfico WPR combinado tocar ou ultrapassar a linha de sobrevenda para baixo.

O código do EA corrigido está localizado em anexo no arquivo test1.zip. Não faz sentido exibir todo o código aqui, já que o mesmo é quase idêntico ao que foi exibido anteriormente. Eu mostrarei apenas a função que identifica diretamente o padrão:

//+------------------------------------------------------------------+
//| Funçao timer                                                     |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(IsNewCandle())
     {
      wl=w[0];
      CopyBuffer(h,0,1,1,w);
      ml=m[0];
      CopyBuffer(h,1,1,1,m);
      double d1 = MathAbs(w[0] - m[0]);
      double d2 = MathAbs(ml - wl);
      if(w[0]>m[0] && wl<ml) 
        {
         if(g_state!=BCLOSE) CloseAllPos();
         if(d1 >= g_dMinSize && d2 >= g_dMinSize &&
            d1 <= g_dMaxSize && d2 <= g_dMaxSize && w[0] < 60) 
           {
            EnterBuy(lt);
            g_state=BBUY;
           }
        }
      if(w[0]<m[0] && wl>ml) 
        {
         if(g_state!=BCLOSE) CloseAllPos();
         if(d1 >= g_dMinSize && d2 >= g_dMinSize &&
            d1 <= g_dMaxSize && d2 <= g_dMaxSize && w[0] > -60) 
           {
            EnterSell(lt);
            g_state=BSELL;
           }
        }
     }
  }
//+------------------------------------------------------------------+

Onde devemos definir os níveis de sobrecompra e sobrevenda? Nos artigos anteriores, nós mostramos que os valores padrão do indicador combinado com base no WPR (+60 para o nível de sobrecompra e -60 para o nível de sobrevenda) podem ser ligeiramente reduzidos para as condições testadas. Além da opção dos valores padrão, vamos testar os valores de +50% e -50% para os níveis de sobrecompra e sobrevenda, respectivamente. Os relatórios de teste para o EURUSD em H1 e H4 estão nos arquivos testhtml50.zip e testhtml60.zip.

Como nós podemos ver, eles não diferem dos dois primeiros testes descritos acima. Isso é consistente com os resultados do artigo anterior dedicado a testar este padrão. Naquela época, essa filtragem também não produziu resultados significativos. Portanto, nós não testaremos esse padrão nos pares restantes e prosseguiremos para a parte final — usando-o como um filtro.

Vamos relembrar brevemente o caso.

  • O gráfico WPR combinado ultrapassa o nível de sobrevenda para cima. O rompimento permanece no fechamento da vela. Um trader compra apenas se a média móvel estiver "abaixo" do gráfico do indicador combinado.
  • Para vender, a situação deve ser oposta.
  • O trader sai do mercado quando o gráfico WPR combinado atingir 0%.

O EA testEAbasket5.mq5 é usado para teste:

//+------------------------------------------------------------------+
//|                                                 testEAbasket.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Trade\\Trade.mqh>



enum BSTATE
  {
   BCLOSE = 0,
   BBUY   = 1,
   BSELL  = 2
  };
//+------------------------------------------------------------------+
//| Função de inicialização do Expert                                |
//+------------------------------------------------------------------+
input int wpr = 20;
input int ma  = 10;
input double lt=0.01; //lot

int SELLPROFIT =   0;
int SELL1LIMIT =  50;
int SELL2FROM  =  40;
int SELL2TO    =  20;
int BUYPROFIT  =   0;
int BUY1LIMIT  = -50;
int BUY2FROM   = -40;
int BUY2TO     = -20;


int h;
ulong  Ticket;

double m[1],ml;
double w[1],wl;

BSTATE g_state;

double g_dMinSize = 2.0;
double g_dMaxSize = 50.0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   h=iCustom(NULL,0,"testWPR&MA3",wpr,ma);
   if(h==INVALID_HANDLE) 
     {
      Print("Error while creating testWPR&MA3");
      return (INIT_FAILED);
     }

   g_state=BCLOSE;
   EventSetTimer(1);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Função de desinicialização do Expert                             |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(h);
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Função tick do Expert                                            |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+
//| Funçao timer                                                     |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(IsNewCandle())
     {
      wl=w[0];
      CopyBuffer(h,0,1,1,w);
      ml=m[0];
      CopyBuffer(h,1,1,1,m);


      if(g_state==BBUY && (w[0]>=BUYPROFIT))
        {
         CloseAllPos();
        }
      if(g_state==BSELL && (w[0]<=SELLPROFIT))
        {
         CloseAllPos();
        }
      if(g_state==BCLOSE && w[0]>=BUY2FROM && w[0]<=BUY2TO && wl<=BUY1LIMIT && w[0] > m[0])
        {
            EnterBuy(lt);
            return;        
        }
        
 
      if(g_state==BCLOSE && w[0]<=SELL2FROM && w[0]>=SELL2TO && wl>=SELL1LIMIT && w[0] < m[0])
        {
            EnterSell(lt);
            return;        
        }
     }
  }
//+------------------------------------------------------------------+

void CloseAllPos()
  {

   CTrade Trade;
   Trade.LogLevel(LOG_LEVEL_NO);
   Trade.PositionClose(Ticket);
   g_state=BCLOSE;

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void EnterBuy(double lot)
  {

   CTrade Trade;
   Trade.LogLevel(LOG_LEVEL_NO);
   Trade.Buy(lot,_Symbol);
   Ticket=Trade.ResultDeal();
   g_state=BBUY;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void EnterSell(double lot)
  {

   CTrade Trade;
   Trade.LogLevel(LOG_LEVEL_NO);
   Trade.Sell(lot,_Symbol);
   Ticket=Trade.ResultDeal();
   g_state=BSELL;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewCandle()
  {
   static int candle=-1;
          int t1=0;
   switch(_Period)
     {
      case PERIOD_H1:  t1 = Hour();   break;
      case PERIOD_H4:  t1 = Hour4();  break;
      case PERIOD_D1:  t1 = Day();    break;
     }
     
   if(t1!=candle) {candle=t1; return(true);}
   return (false);
  }
            
  int Hour4(){return((int)Hour()/4);}

int Day()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.day);
  }

int Hour()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.hour);
  }

Como de costume, nós iniciamos o teste a partir do EURUSD H1 e H4.

Resultados do tempo gráfico H1:

Resultados do tempo gráfico H4:

Como nós podemos ver, o número de negociações é pequeno. Nós já discutimos esse fenômeno e até sugerimos as suas causas. O número de negociações pode ser ainda menor nos pares restantes. Portanto, vamos terminar o teste e prosseguir para as conclusões.

Resultados

  1. Nós consideramos o método de uso das cestas de pares de moedas na negociação. Foi fornecido os princípios básicos e conceitos, bem como os tipos de cálculos básicos.
  2. Foram descritos vários padrões simples que surgem quando se negociam as cestas de pares de moedas.
  3. As construções mais complexas que aparecem durante o uso das cestas foram consideradas brevemente — uso simultâneo de indicadores técnicos padrão e indicadores especialmente projetados para trabalhar com os pares de moedas; uso simultâneo de osciladores e indicadores seguidores de tendência.
  4. Foi verificada a eficiência dos padrões detectados.

Nós obtivemos uma ferramenta que nos permite olhar para o mercado de uma maneira nova, razoável e lógica. No entanto, o teste dos padrões não mostrou resultados convincentes. Embora ter sido impossível de se esperar outra coisa. Afinal de contas, os axiomas de negociação afirmam que vários sinais são necessários para tomar uma decisão de entrada, enquanto que nós tomamos uma decisão com base em um único padrão.

A experiência diz que negociar os padrões mais simples (por exemplo, quando o gráfico cruza a média móvel) é muito arriscado. No entanto, nós usamos os padrões simples e obtivemos resultados promissores em alguns casos. Além disso, tenha em mente que nossa meta não era uma EA lucrativo. Em vez disso, nós queríamos obter um sinal viável que pudesse ser combinado com outros sinais e usado para tomar uma decisão de negociação.

Vamos avaliar as perspectivas e possíveis opções de aplicação do método descrito na prática e na negociação automatizada.

Perspectivas e aplicação na negociação real

Ao trabalhar neste assunto, não se pode fazê-lo sem indicadores de teste e EAs. São necessários exemplos de aplicação de ferramentas confiáveis. O Mercado apresenta alguns deles, enquanto que outros devem ser adicionados lá em breve. No artigo, eu darei somente alguns exemplos de tais programas sem especificar seus nomes reais. 

O assunto do uso de padrões de cesta é muito grande. Novos métodos de negociação aparecem todos os dias, tornando impossível encaixá-los em um único artigo. Mas é possível fazer adições a ele na forma de postagens, capturas de tela ou modelos separados. Alguns materiais já estão presentes no meu blog. Eu expandirei essa informação no futuro.

Entrada/saída em detalhes

Vamos considerar os detalhes de entrar e sair do mercado no par NZDUSD H1. O indicador unificado detectou um sinal de compra que se mostrou lucrativo (linha azul vertical):



À esquerda, nós podemos ver o gráfico da diferença entre os valores de um código unificado para a moeda base e cestas de moedas cotadas. A "pseudo-equação" deste indicador pode ser escrita da seguinte forma:

Indicador (NZDUSD) = Indicador (NZD) — Indicador (USD)

Vamos supor que esse tipo de exibição seja aplicado a todos os indicadores unificados por padrão no artigo, se não especificado.

As possíveis opções de entrada são as seguintes.

  1. A linha horizontal vermelha inferior é o nível de sobrevenda. Nós podemos ver que o padrão do gráfico do indicador que quebra este nível é formado primeiro. Este local é marcado por uma linha verde vertical, enquanto que o próprio padrão é identificado quando a vela 1 é aberta. Neste ponto, você já pode abrir uma ordem de compra: a tendência de baixa esgotou suas capacidades e e mercado começa a reverter. O trader capta o início desse movimento e tem a capacidade de capturar toda a tendência de alta. Nós testamos esse padrão. É bastante arriscado (uma vez que uma tendência de baixa pode continuar após a correção) e aparecer com pouca frequência. As perdas em potencial do trader não são muito grandes neste caso. Um stop loss curto pode ser usado aqui.
  2. No entanto, na captura de tela, nós vemos que uma nova tendência de alta começa a ganhar impulso. Um novo padrão é formado — o gráfico do indicador cruza a média móvel. Este é um bom filtro de sinal após o nível de sobrevenda ter sido quebrado. Isso reduz o risco de uma tendência de baixa continuar. O padrão também é marcado com uma linha vertical verde e pode ser identificado na abertura da vela 2. Você pode entrar no mercado aqui também. Geralmente, um stop loss deve ser maior (definido pelos parâmetros da média móvel).
  3. Depois que a tendência de alta ganhou força, um novo padrão aparece — a média móvel rápida cruza a lenta. Este padrão é identificado na abertura da vela 3. Em comparação com os dois casos anteriores, o risco é mínimo. No entanto, o nível do lucro é menor, enquanto que o do stop loss é maior. Preste atenção em como a distância entre as médias móveis é aumentada após o padrão ser detectado. Isso indica que a tendência se torna mais forte — um sinal favorável para um trader. A distância decrescente indica uma desaceleração e enfraquecimento (veja a captura de tela à esquerda).

Note que as duas primeiras variantes de entrada descritas usando os padrões são típicas para todos os tipos de osciladores e são bem conhecidas. O terceiro padrão não é tão popular. Ele também funcionará em todos os osciladores, mas aqui ele é considerado como um exemplo de entrada no mercado usando uma tendência estabelecida e desenvolvida.

Todas as três opções de entrada são unificadas por um poderoso sinal inicial — rompimento do nível de sobrevenda. No entanto, esse sinal é bastante raro. Vamos analisá-lo brevemente mais uma vez.

  • Na captura de tela à direita, nós podemos ver como o gráfico do indicador entra na área de sobrevenda (ou sobrecompra). O local necessário é marcado pelo retângulo verde. Na janela do indicador, o mesmo indicador é exibido de outra maneira — separadamente para as cestas NZD (linha azul clara) e USD (linha verde escura). Nós podemos ver que a cesta do USD ficou sobrecomprada em algum momento, enquanto a do NZD ficou sobrevendida por muito tempo. A combinação simultânea de tais estados das cestas cria uma imagem, como na captura de tela à esquerda, onde o gráfico do indicador combinado para o NZDUSD entra na área de sobrecompra com o avanço subsequente do nível de sobrecompra e inversão de tendência.

No entanto, tais combinações favoráveis ​​de eventos ocorrem raramente. Isso significa que devemos esperar por um sinal por semanas? Não necessariamente. Pode-se supor que os níveis de sobrecompra/sobrevenda estão localizados em níveis ligeiramente inferiores. O valor pode ser diferente para cada par e cada período de tempo. Mas parece que na maioria dos casos, os níveis de +50% e -50% são suficientes. Isso, sem dúvida, aumenta o risco. Vamos dar uma olhada na imagem correta novamente. Um novo layout dos níveis significa que uma das duas cestas (ou até as duas!) ainda não esgotou seu movimento. Assim, isso pode continuar, e o trader corre o risco de entrar contra uma tendência. Portanto, o padrão 3 é de particular importância, pois implica numa entrada por tendência. No entanto, há uma armadilha aqui também na forma de divergência:



Na captura de tela à direita, vemos como a MA rápida ascendente cruza a lenta, enquanto que o próprio indicador se move para cima também. Na imagem à esquerda, nós observamos uma divergência: o indicador e os gráficos da MA movem-se em direções diferentes. Claro, o sinal com divergência deve ser ignorado! Minhas fontes de notícias apresentam outros exemplos de vários padrões com e sem divergência.

Agora, vamos considerar as possíveis maneiras de sair do mercado (fechar as posições).

Suponha que o trader entrou no mercado em uma das três formas descritas. Um sinal oposto pode ser usado para fechar uma posição total ou parcialmente ou movê-la para o ponto de equilíbrio (breakeven).

1. Por exemplo, o indicador entra na área de sobrevenda — esse é um motivo significativo para fechar as posições de compra ou movê-las para um ponto de equilíbrio (o oposto é verdadeiro para as posições de venda).

2. O trader que tenha posições em aberto pode detectar o avanço da MA pelo gráfico do indicador na direção oposta às posições abertas anteriormente.

3 O trader pode detectar que uma tendência está diminuindo por uma distância decrescente entre as médias móveis rápidas e lentas.

4 Finalmente, alcançar os valores que NÃO estão sobrecomprados/sobrevendidos pelo indicador pode ser usado como um sinal para fechar/mover para um ponto de equilíbrio. Por exemplo, isso pode ser o nível 0%. Este nível significa a "igualdade" das duas cestas de moedas. O indicador tende a "tropeçar" em tal nível. Portanto, esse nível é uma resistência:

Os níveis de Fibo também podem ser usados ​​para isso em indicadores unificados. 

5. E a última coisa: o trader pode atribuir um stop loss e obter lucro com base em suas próprias considerações ou em uma análise técnica padrão.

Nós consideramos as formas de abrir e fechar as posições. Agora, vamos procurar os padrões no gráfico e analisá-los.

Trabalhando com os indicadores unificados


Para identificar os padrões detectados, coloque o indicador unificado no gráfico e observe os resultados. Aqui está um exemplo recente do NZDUSD H1 (o gráfico é dividido em duas imagens devido as limitações do tamanho):


Observe que os padrões 3 e 7 são detectados perto da saída das áreas de sobrecompra/sobrevenda. Não há divergência aqui, enquanto que o preço se move fortemente para cima, passando o nível zero no padrão 3. Por outro lado, os movimentos na área do padrão 7 são relativamente fracos. O forte movimento diminui e reverte. O gráfico ainda não cruzou o nível zero e é capaz de saltar dele (que é exatamente o que nós vemos).

O padrão 8 mostra uma recuperação do nível de sobrevenda. O gráfico tocou, inverteu e subiu fortemente formando o padrão. O nível zero é passado, tornando possível ir comprado. No entanto, há a reversão do gráfico do indicador e do preço, se movendo na direção oposta. Um pouco mais tarde, um trader poderá fechar a posição com uma perda mínima, caso contrário, a perda poderá se tornar bastante palpável.

O padrão 6 não é muito promissor: o potencial de venda está quase esgotado e o nível de sobrevenda é atingido. O risco de uma reversão é alta. Na prática, nós vemos um movimento lateralizado prolongado, que não é lucrativo. O movimento descendente recomeça, embora muito depois: o padrão pode ser considerado como consolidado.

Sob condições semelhantes ao padrão 6, o padrão 5 é muito promissor. Portanto, nós não devemos descartar inequivocamente os padrões detectados pelo indicador perto das áreas de sobrecompra/sobrevenda, uma vez que a tendência ainda pode continuar no momento de sua detecção.

O padrão 4 também se move ao redor do nível zero sem o seu rompimento. Não há divergência, o gráfico do indicador está se movendo horizontalmente.

O padrão 2 é promissor. O movimento descendente desacelera e inverte sem atingir o nível zero. Não há divergência, pois o gráfico ainda não atingiu o nível de sobrevenda. Embora o indicador se mova de forma lateralizada, o padrão ainda traz um bom lucro.

Nós não vamos considerar o padrão 1: nós não sabemos o que aconteceu antes dele ser formado.

Além dos padrões encontrados, vale a pena prestar atenção nas áreas semelhantes àquelas marcadas com uma seta azul. Este é um movimento poderoso e constante do nível de sobrevenda com a quebra do nível zero e a saída para a área de sobrecompra. O indicador não encontrou o padrão, embora ambos as MAs se cruzaram. Não há divergências. Considere entrar no mercado se o indicador ultrapassar o nível zero, especialmente porque esse avanço coincide com o cruzamento da MA rápida pela lenta.

Por favor, note que o nosso método de análise não é simples. Ele contém muita ambiguidade, já que nós podemos acabar com uma perda pelo menos uma vez. Para aumentar as possibilidades de análise com a ajuda dos indicadores combinados, nós devemos recorrer à próxima etapa — análise "avançada".


Trabalho avançado com os indicadores combinados

A primeira coisa sobre a qual nós devemos falar sobre, é o uso de duas cópias de um indicador combinado em um único gráfico. Indiretamente, essa possibilidade já foi mencionada na seção anterior. Agora, nós vamos considerar isso com mais detalhes.

  • O gráfico contém duas instâncias de um indicador combinado com configurações semelhantes, mas com diferentes métodos de exibição:
    1. O padrão é a janela V1.
    2. Dois gráficos separados para as cestas de moeda base e cotadas (janela V2).

Os indicadores no USDCAD são exibidos aqui. Na janela V2, o estado da cesta de pares de moedas em USD é exibido como a linha verde-escura, enquanto que a do CAD é exibido como a linha laranja.

Na janela V1, o indicador detectou dois padrões de entrada (1 e 2). Não há divergência em ambos os casos e a entrada no mercado pode ser lucrativa.

Vamos dar uma olhada na janela V2, padrão 1. Aqui nós podemos ver que a cesta CAD estava sobrecomprada e agora ela está enfraquecendo-se, aproximando-se do nível zero. A cesta do USD também estava enfraquecendo, enquanto ela saía da área de sobrecompra. No entanto, o enfraquecimento acabou por se transformar em um movimento horizontal. No momento da detecção do padrão, o movimento tendia a subir. Assim, a entrada de compra é justificada.

Vamos dar uma olhada no ponto 2. Aqui a situação é mais arriscada, já que ambas as cestas passam o segmento horizontal na janela V2. Portanto, qualquer um deles pode ir em qualquer direção causando uma possível perda.

Além disso, o trader pode prestar atenção ao ponto 3. Não há nenhum padrão lá, mas na janela V2 nós vemos claramente que ambas as cestas vão além das áreas de sobrecompra e sobrevenda uma para a outra. Isso significa que o trader pode capturar o início de uma tendência que acabou de reverter.

Nesse caso, o trader procura padrões no gráfico dos indicadores "por padrão" e, em seguida, refinar a imagem usando outra maneira de exibir os dados com a segunda instância do mesmo indicador.

A segunda maneira interessante de trabalhar com os indicadores combinados é usá-los junto com os indicadores padrão. Aqui está um exemplo de uso do indicador combinado baseado em WPR com o padrão usual WPR:

Este é quase o mesmo segmento do gráfico do USDCAD. Anteriormente, nós já descobrimos que o padrão 1 é adequado para entrar no mercado, enquanto o padrão 2 traz maior risco. Agora olhe para o padrão 3, que também é malsucedido. Não há divergência, mas também não traz lucro. Na janela padrão do WPR, fica claro por que isso acontece: o WPR está na área de sobrecompra. Como resultado, o par se torna lateralizado, o que pode ser seguido por uma correção ou mesmo por uma inversão de tendência. O padrão 2 demonstra movimento lateralizado com correção subsequente aqui também. O padrão 1 ainda é forte. No caso de uma entrada que segue a tendência, o indicador WPR ainda tem alcance suficiente até a área de sobrecompra, enquanto que a linha zero já foi passada. Isso implica na lucratividade em potencial do padrão, que é subsequentemente confirmada.

Agora nós vamos fornecer um exemplo de uma "cooperação" menos impressionante. Nós usaremos o mesmo par USDCAD. O segmento e o período de tempo são os mesmos também. A janela contém o STOCH combinado e o WPR padrão. As linhas verticais que indicam os padrões detectados anteriormente são deixadas para referência:


O STOCH combinado diretamente não produziu nenhum padrão significativo. Como o WPR combinado, ele assume que os padrões 1 e 3 são adequados para entrada. O padrão 2 demonstra divergência, o que significa que nós não podemos usá-lo para entrar no mercado. Observe que as áreas consideradas como zonas de sobrecompra pelo WPR são consideradas principalmente áreas planas pelo STOCH combinado. Isto é mais um outro exemplo de combinar os indicadores.

Os métodos de trabalhar com os indicadores combinados descritos acima não são os únicos possíveis, mas são bastante reconhecíveis, óbvios e eficientes.

Conclusão

Em nossa série de artigos, nós consideramos trabalhar com os padrões que surgem ao negociar cestas de moedas. Nós descrevemos o método de entrada e saída do mercado, bem como os princípios importantes de sua aplicação.

A maioria dos exemplos foi implementada usando o WPR combinado. No entanto, existem outros indicadores combinados, como o STOCH, RSI, TDI, etc. Juntos, eles constituem a estratégia de indicadores para negociação de cestas de moedas. Esta estratégia não é fácil e só pode ser dominada por um profissional experiente e atencioso.

Existem outras oportunidades de desenvolvimento? Claro que sim. Nós certamente descreveremos elas mais tarde.


Programas usados ​​no artigo

 # Nome
Tipo
 Descrição
1 test.zip Arquivo
As ferramentas de teste do padrão
2
testhtml.zip Arquivo Resultados do teste usando as ferramentas do arquivo test.zip
3 test1.zip Arquivo Código do EA para o teste com o filtro
4 testhtml50.zip Arquivo Resultados do teste usando as ferramentas do arquivo test1.zip
5
testhtml60.zip Arquivo
Resultados do teste usando as ferramentas do arquivo test1.zip
 6 testEAbasket5.mq5  EA EA de teste


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

Arquivos anexados |
test.zip (15.54 KB)
testhtml.zip (1197.56 KB)
testhtml50.zip (226.91 KB)
testhtml60.zip (200.84 KB)
testEAbasket5.mq5 (4.81 KB)
Análise comparativa de 10 estratégias de fase de correção Análise comparativa de 10 estratégias de fase de correção

O artigo explora as vantagens e desvantagens de negociar durante movimentos laterais. São criadas e testadas 10 estratégias que se baseiam no acompanhamento do movimento de preços dentro do canal. Cada estratégia possui um mecanismo de filtragem para eliminar sinais falsos de entrada no mercado.

O monitoramento da conta de negociação é uma ferramenta essencial do trader O monitoramento da conta de negociação é uma ferramenta essencial do trader

O monitoramento da conta de negociação é um relatório detalhado de todas as transações concluídas. Todas as estatísticas de negociação são coletadas automaticamente e fornecidas a você na forma de diagramas e gráficos amigáveis.

14 000 robôs de negociação no Mercado MetaTrader 14 000 robôs de negociação no Mercado MetaTrader

A maior loja de aplicativos prontos para algotrading já possui 13 970 produtos — entre eles 4 800 robôs, 6 500 indicadores, 2.400 utilitários e outras soluções. Quase metade dos aplicativos (6 000) não podem ser comprados, mas, sim, alugados. Um quarto dos produtos (3 800) é totalmente gratuito.

Apresentação personalizada do histórico de negociação e criação de gráficos para relatórios Apresentação personalizada do histórico de negociação e criação de gráficos para relatórios

O artigo descreve métodos personalizados, a fim de avaliar o histórico de negociação. Para fazer isso, são descritas duas classes para seu carregamento e análise. A primeira recolhe o histórico de negociação numa pequena tabela. Já a segunda está encarregada das estatísticas, uma vez que calcula vários indicadores e plota gráficos que ajudam a tornar mais conveniente a avaliação da eficácia da negociação.