Padrões disponíveis para negociação de cestas de moedas. Parte III

Andrei Novichkov | 24 agosto, 2017


Introdução

Este é o terceiro e provavelmente o último artigo sobre este tópico. Nós examinamos e analisamos os padrões principais e secundários, bem como as suas táticas de aplicação. A lista de nossos objetivos não incluiu a descrição de técnicas complexas e ambíguas, como análise de ondas ou VSA, mas acredito que o material fornecido já é suficiente para o conhecimento inicial com cestas de pares de moedas de negociação. Neste artigo, nós tentaremos encerrar o estudo dos padrões que ocorrem ao aplicar osciladores combinados e indicadores de tendências. Aqui nós vamos falar sobre os indicadores combinados de tendência.


Índice da cesta de moedas como fonte de dados

Nos comentários de um dos artigos anteriores, eu me deparei com uma ideia promissora: ao invés de receber os valores dos indicadores para cada par de moedas e definir o valor médio, devemos aplicar a equação do indicador técnico aos dados do indicador combinado - índice da cesta de moedas. Deixe-me esclarecer isso. Por exemplo, nós recebemos os valores do indicador técnico padrão WPR para cada par de moedas para calcular os dados WPR combinados. Usando os valores obtidos, nós calculamos a média aritmética (nós podemos aplicar a média geométrica também). Isso resultou em um WPR combinado que exibe o comportamento de uma única moeda — "cesta de pares de moedas".

Aqui, eu propus um método alternativo para obter os mesmos dados. Anteriormente, nós já havíamos discutido o índice da cesta de moedas e como calculá-la. Como você pode lembrar, ela é uma média geométrica de todos os preços dos pares da cesta, a "formação do preço" da cesta de moedas. Portanto, foi sugerido obter os valores dos WPR combinados aplicando a equação de cálculo WPR padrão ao gráfico do índice da cesta de moedas. Consequentemente, para obter os valores do RSI ou STOCH combinado, você deve usar suas equações de cálculo. A ideia parece ser interessante. Vamos verificar isso. Se a suposição estiver correta, nós devemos obter os valores dos indicadores combinados semelhantes aos recebidos após o uso do método descrito nos artigos anteriores.

Para começar, nós precisamos de dois indicadores com os códigos disponíveis no arquivo wpr.zip em anexo:

  • testWPR - fornecido em um dos artigos anteriores. Use o conjunto de pares de moedas para a cesta em USD: EURUSD, GBPUSD, AUDUSD, NZDUSD, USDCAD, USDCHF e USDJPY. Nós vamos usá-la como referência para comparação.
  • Código do indicador técnico WPR. Ele pode ser encontrado na CodeBase. Nós usamos seus fragmentos no novo indicador para ilustrar o método que nos interessa. 

Nós obtivemos o seguinte indicador de teste como resultado:

//+------------------------------------------------------------------+
//|                                                testIndex+WPR.mq5 |
//|                                   2016 MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window

#property indicator_buffers 2
#property indicator_plots   1


input color   clrWPR = clrGreen;
input int wprperiod  = 14; 

double ind[],ma[];
//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado               |
//+------------------------------------------------------------------+

int OnInit()
  {
//--- mapeamento dos buffers dos indicadores
     
  IndicatorSetDouble(INDICATOR_MINIMUM,-100);
  IndicatorSetDouble(INDICATOR_MAXIMUM, 0);   
      
   ArraySetAsSeries(ma,true);   
   SetIndexBuffer(0,ma);
   PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_LINE           ); 
   PlotIndexSetInteger(0, PLOT_LINE_STYLE, STYLE_SOLID            ); 
   PlotIndexSetInteger(0, PLOT_LINE_WIDTH, 1            ); 
   PlotIndexSetInteger(0, PLOT_LINE_COLOR, clrWPR            ); 
   PlotIndexSetString (0, PLOT_LABEL, "_tstdistance_MA" );       
   
   ArraySetAsSeries(ind,true);
   SetIndexBuffer(1,ind , INDICATOR_CALCULATIONS);       
//---
   return(INIT_SUCCEEDED);
  }
  
string pair[]={"EURUSD","GBPUSD","AUDUSD","NZDUSD","USDCAD","USDCHF","USDJPY"};
bool bDirect[]={false,false,false,false,true,true,true};
int iCount=7;

//Cálcula o índice   
double GetIndex(int shift) 
  {
   double res=1.0,t;
   double dBuf[1];
   for(int i=0; i<iCount; i++) 
     {
      t=CopyClose(pair[i],PERIOD_CURRENT,shift,1,dBuf);
      if(!bDirect[i]) dBuf[0]=1/dBuf[0];
      res*=dBuf[0];
     }//end for (int i = 0; i < iCount; i++)
   return (NormalizeDouble(MathPow (res, 1/(double)iCount), _Digits) );  
  }  
//+------------------------------------------------------------------+
//| Função de iteração do indicador personalizado                    |
//+------------------------------------------------------------------+
double HH,LL;

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;
      for(int i=1; i<rt; i++) 
        {
         ind[i]= GetIndex(i);
        }
      rt -= wprperiod;  
      for (int i = 1; i< rt; i++) 
        {
         ma[i] = GetMA(ind, i, wprperiod, _Digits);
        }        
     }
   else 
     {
         ind[0] = GetIndex(0);
         ma[0]  = GetMA(ind, 0, wprperiod, _Digits);
     }
   return(rates_total);
  }

//Cálcula o índice WPR
double GetMA(const double& arr[], int index , int period, int digit) {
   double m = 0;
   HH = arr[ArrayMaximum(arr, index, period)];
   LL = arr[ArrayMinimum(arr, index, period)];   
   m = -100 * (HH - arr[index]) / (HH - LL);
   return (NormalizeDouble((m + 50) * 2, _Digits));
}


Vamos aplicá-lo ao par EURUSD em conjunto com o indicador de referência testWPRusd. O resultado é o seguinte:


A primeira sub-janela exibe a curva do nosso indicador de teste, enquanto que a segunda exibe a curva do indicador de referência. O resultado é inesperadamente decepcionante. De qualquer forma, nós temos que analisar os resultados obtidos. Torna-se rapidamente óbvio que o indicador de teste não é adequado para o trabalho. Ele alcança constantemente os valores máximos possíveis. Ao mesmo tempo, nada de especial acontece no mercado e o preço se move calmamente. Como consequência, os gradientes das leituras dos indicadores são excessivamente elevados. Além disso, posições de valor extremo nos indicadores de teste e de referência combinam-se muito bem. Por que conseguimos uma boa combinação em termos de extremos, mas valores tão estranhos? A resposta é simples. A razão está na equação de cálculo do indicador WPR:

R% = - ((H – C)/(H – L)) x 100;

onde:

  • C: Preço de fechamento;
  • L: Mínima do preço de um certo período;
  • H: Máxima do preço de um certo período.

Mas nós não temos valores de Máxima e Mínima dos preços. O indicador de teste calcula seus valores usando os valores do índice da cesta de moedas, enquanto o índice, por sua vez, é calculado por preços de fechamento (Close). Devido a esta razão puramente técnica, nós recebemos os valores extremos de indicadores de teste tão frequentemente. Portanto, nós não podemos dizer com confiança que o próprio método é errado ou altamente impreciso. Pelo contrário, a combinação de posições de valor extremo sugere o contrário. É possível eliminar obstáculos inesperados?


Traçando o indicador índice da cesta de moedas combinado como velas

Claro que é possível. Para conseguir isso, nós devemos obter os dados de origem (ou seja, o índice da cesta de moedas) não como uma curva baseada em fechamentos (Close), mas como velas japoneses. Neste caso, nós obteremos todos os arrays necessários, podendo realizar outros cálculos e do WPR. Na verdade, o gráfico do índice da cesta de moedas é semelhante ao gráfico de preços tradicional, embora este seja um gráfico de uma moeda única em vez de um par. Nós podemos assumir muito cautelosamente que este é o gráfico de preços da cesta de moedas em relação a todas as moedas que formam a cesta.

Tecnicamente, nós podemos obter esse gráfico facilmente. O índice do dólar (USD index) convencional é, muitas vezes, exibido como velas em vez de uma única linha fechada. Como um desenvolvedor pode obter um resultado semelhante? O indicador de teste, que já se encontra disponível, realiza cálculos usando os valores do preço de fechamento da vela no atual período de tempo. Se nós complementarmos o indicador exatamente com o mesmo cálculo, usando o preço de abertura do período gráfico atual, o desenvolvedor irá obter dois valores necessários para definir o corpo da vela. No entanto, também há más notícias. É impossível definir a mínima e a máxima da vela do índice da cesta de moedas usando o mesmo método. Se nós simplesmente calcularmos a média aritmética ou geométrica da cesta de moedas das mínimas e máximas, o valor resultante não irá fornecer um valor preciso da máxima e mínima da vela da cesta de moedas. O motivo é óbvio: a mínima e máxima dos pares de moeda individuais dentro da cesta podem não ocorrer necessariamente ao mesmo tempo. Isto é possível, mas não é de modo algum garantido. Os desenvolvedores podem aplicar essa técnica por sua conta e risco. Eles irão obter todos os valores necessários para traçar uma vela, mas a margem de erro não pode ser estimada de antemão. Para obter um valor garantido e verdadeiro, nós devemos realizar os cálculos através dos ticks ou, pelo menos, por minuto. Tais cálculos carregam fortemente o terminal, por isso é melhor colocá-los em uma aplicação separada.

De qualquer forma, nós não vamos fazer nada parecido. Eu vou explicar os motivos mais tarde. Entretanto, temos que concluir que a técnica discutida não é adequada para os indicadores combinados baseados em WPR, bem como para outros indicadores combinados que utilizam a abertura e fechamento (Open e Close), bem como as mínimas e máximas para cálculos. Para outros tipos de indicadores, esse método ainda é interessante. Nós nos ocuparemos disso abaixo.


Ferramentas baseadas no índice da cesta de moedas

Já analisamos exemplos de tal aplicação do índice da cesta de moedas anteriores. Quero dizer, aplicar a média móvel ao gráfico do índice da cesta de moedas. A média móvel é uma ferramenta confiável. Sua aplicação nos forneceu um padrão — um ponto de cruzamento da média móvel com o gráfico do índice da cesta de moedas. Nós descrevemos isso anteriormente. Vamos ver quais outros instrumentos nós podemos utilizar o índice da cesta de moedas como dados de origem. Claro que não podemos cobrir todas as ferramentas disponíveis devido às limitações do artigo, mas ainda podemos esboçar as perspectivas.

Nós devemos lembrar que o gráfico do índice da cesta de moedas é um gráfico de preços. Vamos tentar determinar se as principais ferramentas dos traders (níveis de suporte e resistência, canais e níveis de Fibo) são capazes de trabalhar com ele. Além disso, há uma série de artigos que indicam a capacidade de aplicar essas ferramentas aos gráficos de indicadores. Vamos tentar aplicá-los também. Para fazer isso, nós iremos colocar dois indicadores combinados de USD e de EUR do índice da cesta de moedas (index.zip) e executar alguns arranjos padrão:


Nós colocamos as ferramentas gráficas padrão em ambos os gráficos. Esta opção não é a única possível, mas é bem real:

  • Fibo, canal ascendente e nível horizontal no EUR
  • Duas linhas que formam uma cunha e um nível horizontal em USD

Vamos marcar os pontos interessantes usando retângulos e linhas verticais e veja como o preço do EURUSD se comporta perto deles.

  1. Há uma reversão da borda superior do canal e do nível de Fibo no índice do EUR. Nada de especial acontece com o USD — apenas uma pequena diminuição. Nós podemos esperar um movimento para a área de venda no gráfico principal, e isso realmente acontece.
  2. Outra reversão do limite superior do canal EUR. Nós podemos esperar um movimento adicional para a área de venda, mas isso não acontece uma vez que o índice USD se move perto do limite superior da cunha. Na verdade, há um movimento lateralizado com uma ligeira tendência de compra.
  3. No entanto, à medida que o ponto 2 continua, o canal do índice do EUR é quebrado para baixo, combinando-se com o ponto 5 que volta da borda da cunha inferior pelo USD. Há um movimento bem lógico na direção de venda no gráfico principal.
  4. O retorno do nível horizontal do EUR coincide com o rompimento da cunha do índice do USD no ponto 7. No início, a reversão do EUR é mais intensa e o preço busca a direção de venda, mas então o rompimento da cunha se "supera" e o movimento muda para uma compra. 

Nós podemos tirar algumas conclusões preliminares. Nós consideramos apenas um único episódio de um par de moedas complexo aqui, então nossas descobertas não devem ser levadas como uma verdade suprema. Para torná-los mais confiáveis, nós devemos realizar observações de longo prazo em diferentes períodos e pares de moedas. No entanto, os resultados são um pouco reconfortantes. Nós podemos aplicar construções gráficas comuns no gráfico de indicadores combinados do índice dos pares de moedas. Os padrões obtidos durante essas construções seguem uma regra bem conhecida:

  • Qualquer sinal deve ser confirmado por outros sinais.
  • Manipular os padrões obtidos pelo preço é mais inercial em comparação com a aplicação padrão.
  • Conclusão final. Os padrões obtidos desta maneira são de natureza secundária. Eles podem ser usados ​​na busca de pontos de entrada e, provavelmente, ao definir os objetivos de perdas. Em outras palavras, os padrões são úteis, mas desempenham um papel secundário.

Vamos analisar toda a imagem a partir de outra perspectiva. Como você pode lembrar, o índice da cesta de moedas exibe o estado de todos os pares de moedas em relação à cesta da moeda. Portanto, os pontos do gráfico do índice do EUR estão relacionados não só ao EURUSD, mas também a outros pares de moedas que compõem a cesta do EUR. Nós tiramos conclusões apenas sobre uma delas. Talvez, o motivo da "natureza secundária" dos padrões obtidos é que os traders querem se livrar da influência da segunda moeda (no caso o USD) usando cestas de par moedas? Nós podemos verificar facilmente nossa suposição ao analisar outros pares de moedas dentro da cesta. Por exemplo, vamos tomar o ponto 2, 18.09.2015 00:00. Neste ponto, assumimos a tendência de venda geral após o preço reverter do limite superior do canal, bem como o avanço altista do canal depois. O ponto de interesse foi encontrado no gráfico do índice do EUR, então vamos levar todos os pares de moedas incluídos na cesta do euro e ver o que aconteceu com o preço naquele momento:


O resultado é muito interessante e encorajador! O marcador de tempo em que nos interessamos é destacado pela linha vertical azul. Nossas previsões são justificadas na maioria dos pares. Se um trader tivesse entrado no mercado usando o padrão atual (bem fraco), eles teriam recebido um lucro. Também é possível ver prejuízos em alguns pares. Eu digo o EURAUD e EURGBP, bem como (em menor medida) o EURUSD. Em outros pares, o trader teria obtido lucro. O princípio principal de trabalhar com cestas de pares de moedas acabou por estar correto aqui: um trader recebe um sinal de entrada para a moeda da cesta entrando em todos os pares formando a cesta de uma só vez. Isso acaba com uma perda em alguns pares e com lucro na maioria deles. Nós já descrevemos este princípio em detalhes nos artigos anteriores da série. Tenha em mente que todas as nossas conclusões são de natureza probabilística.

Uma vez que a análise de um único ponto não pode servir de base para quaisquer pressupostos, não faremos conclusões finais. No entanto, o resultado obtido pode inspirar um trader a realizar um estudo aprofundado envolvendo o arranjo de uma experiência, coletando estatísticas e os resultados publicados.

Voltando ao início do artigo, nós podemos agora esboçar os motivos para não desenvolver um indicador combinado do índice da cestas de moedas com o gráfico de velas:

  • Para um par único par de moeda, os padrões examinados são de natureza auxiliar.
  • Este não é o caso de todos os pares de moedas da cesta. No entanto, a análise do histórico é necessária.


Indicador de tendência simples

Para confirmar nossas conclusões, vamos desenvolver um indicador combinado simples funcionando de acordo com o seguinte princípio:

  • A diferença entre as duas médias móveis ("rápida" e "lenta") é calculada e exibida para o array de dados da origem (aqui é um array do índice da cesta de moedas do EUR). Como nós podemos ver facilmente, o princípio da operação é semelhante ao indicador MACD. Esperamos que o indicador seja capaz de detectar uma divergência.

O código do indicador (incluso no testIndexMACD.zip):

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

#property indicator_buffers 2
#property indicator_plots   1


input color   clr = clrBlue;
input int InpFastEMA = 12;   // Período da EMA rápida
input int InpSlowEMA = 26;   // Período da EMA lenta

double ind[],ma[];
//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado               |
//+------------------------------------------------------------------+
//int h,h1;
int OnInit()
  {
//--- mapeamento dos buffers dos indicadores
   ArraySetAsSeries(ind,true);
   SetIndexBuffer(0,ind);        
   
   IndicatorSetString(INDICATOR_SHORTNAME,"testIndexMACD");
   IndicatorSetInteger(INDICATOR_DIGITS,2);
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_HISTOGRAM/*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,"_tstMACD_");    


   ArraySetAsSeries(ma,true);
   SetIndexBuffer(1,ma , INDICATOR_CALCULATIONS);   

//---
   return(INIT_SUCCEEDED);
  }
  
string pair[]={"EURUSD","EURJPY","EURCHF","EURGBP","EURNZD","EURCAD","EURAUD"};
bool bDirect[]={true,true,true,true,true,true,true};
int iCount=7;
  
double GetValue(int shift) 
  {
   double res=1.0,d;
   double dBuf[1];
   for(int i=0; i<iCount; i++) 
     {
      d=CopyClose(pair[i],PERIOD_CURRENT,shift,1,dBuf);
      if(!bDirect[i]) dBuf[0]=1/dBuf[0];
      res*=dBuf[0];
     }//end for (int i = 0; i < iCount; i++)
   return (NormalizeDouble(MathPow (res, 1/(double)iCount), _Digits) );  
  }  
//+------------------------------------------------------------------+
//| Função de iteração do indicador personalizado                    |
//+------------------------------------------------------------------+
double t;
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;
      for(int i=1; i<rt; i++) 
        {
         ma[i]= GetValue(i);
        }
      rt=rates_total - InpSlowEMA;  
      for(int i=1; i<rt; i++) 
        {
         ind[i] = GetMA(ma, i, InpFastEMA, _Digits) - GetMA(ma, i, InpSlowEMA, _Digits);
        }        
     }
   else 
     {
         ma[0]= GetValue(0);
         ind[0] = GetMA(ma, 0, InpFastEMA, _Digits) - GetMA(ma, 0, InpSlowEMA, _Digits);
     }
//--- valor de retorno de prev_calculated para a próxima chamada
   return(rates_total);
  }

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

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));
}

Ao colocar o indicador no gráfico, nós veremos o seguinte ao usar o índice do EUR combinado como fonte:


... e detectar uma divergência em um dos segmentos. As linhas de resistência no gráfico de preços indicam a tendência descendente, no entanto, a dinâmica de alteração do nosso indicador avisa se uma tendência está enfraquecendo ou chegando ao fim. De fato, nós podemos ver uma inversão da tendência mais adiante. O comportamento dos preços dos outros pares de moedas confirmam nossas conclusões:

Esta situação particular confirma nossas conclusões anteriores de que os padrões considerados neste artigo devem ser aplicados com um par individual com cautela. Ao mesmo tempo, nós podemos usar os padrões com mais confiança ao aplicá-los a toda cesta de pares de moedas.


Conclusão

Nós completamos a análise dos padrões que ocorrem ao negociar cestas de par de moedas. Vamos resumir as regras de negociação gerais relativas à aplicação de todos os padrões descritos.

  • A alta precisão do padrão ocorre quando os níveis de sobrevenda/sobrecompra são cruzados pelo gráfico do indicador combinado que define uma diferença entre as leituras do indicador oscilador combinado (WPR, STOCH) para uma moeda base e uma outra moeda. Nós podemos entrar no mercado após o fechamento da vela, o que confirma o surgimento da linha de sobrevenda/sobrecompra e uma possível tendência nova. A entrada é realizada em um único par de moedas — aquele em que o seu indicador é lançado. Nós podemos sair do mercado após o indicador atingir a área próxima a zero ou uma borda oposta do intervalo do indicador:

    No último caso, as ordens abertas devem ser movidas para o ponto de equilíbrio quando se aproximarem da zona próxima ao zero. Preste atenção a um sinal de compra falso. Isso foi discutido aqui. Um stop loss também pode ser colocado de acordo com o indicador. Ele pode ser desencadeado se o indicador não se mover para zero após as linhas de sobrecompra/sobrevenda estiverem quebradiças. Em vez disso, ele inverte, cruza novamente a linha de sobrecompra/sobrevenda, consolida e começa a mover-se após a borda do intervalo.
  • O mesmo padrão existe para os indicadores osciladores combinados (WPR, STOCH) que exibem o estado da moeda da cesto. Abaixo está o gráfico do WPR combinado para o EUR:

    As regras de entrada e saída permanecem as mesmas, embora a entrada seja realizada em todas as moedas da cesta em vez de uma. Preste atenção no ponto em que é possível um stop loss. Aqui ele é fornecido apenas para fins ilustrativos. Um trader não corrige necessariamente uma perda lá. Os indicadores usados ​​aqui e no parágrafo anterior podem ser encontrados no arquivo wpr2.zip em anexo.
  • A interseção dos gráficos MA pode servir como padrão auxiliar além dos dois acima. Se isso ocorrer perto do avanço das linhas de sobrecompra/sobrevenda, isso fortalece os dois padrões.
  • Os padrões formados ao aplicar os indicadores de tendência combinados também são de natureza auxiliar. Não há motivos para recomendar a entrada no mercado após a sua detecção, mas podem ser usados ​​com os dois primeiros padrões como sinais adicionais.

Nesta fase, é impossível fornecer recomendações de negociação precisas com figuras e estatísticas significativas. A ausência de pesquisa histórica é uma séria desvantagem de todos os padrões descritos. Nós vamos abordar essa questão nos próximos artigos.

Programas usados ​​no artigo:

 # Nome
Tipo
 Descrição
1 wpr.zip Arquivo
Contém o indicador testWPRusd (código e executável) e o código do indicador técnico WPR - wpr.mq5
2
testIndex+WPR.mq5 Indicador Indicador de teste combinado que traça os valores de WPR obtidos após a aplicação da equação de cálculo do WPR aos valores do índice da cesta de moedas.
3
 index.zip    Arquivo  Dois indicadores de índice da cesta de moedas do USD e EUR
 4  testIndexMACD.zip   Arquivo  Indicador de tendência simples baseado no MACD
5
 wpr2.zip  Arquivo  Indicadores para ilustrar as entradas e saídas do mercado