Ideias de Negociação Baseada na Direção dos Preços e na Velocidade do Movimento

Alexander Fedosov | 14 julho, 2015

Introdução

Sabe-se muito bem que quando o preço se movimenta, todos os mercados líquidos revelam algum tipo de onda cíclica, que vai primeiro para cime e depois para baixo. Isto é claramente visto em períodos gráficos mais elevados. A natureza sinusoidal é um reflexo do fato de que o preço possui uma certa persistência. Caso contrário, seria algo como um ziguezague: movimentos abruptos ascendentes e descendentes em um curto período de tempo. Vamos tentar descobrir as razões deste fenômeno e as formas de empregar isto nas negociações.


O Começo do Movimento e a Persistência

Qualquer movimento em nosso mundo pode ser caracterizado pela sua direção, aceleração e velocidade. Ele funciona em mercados líquidos também. Isto implica em uma importante regra, que diz que um forte movimento direcional no preço nunca acaba bruscamente. Ele pode ser comparado com um trem: Quando todo o trem freia em sua velocidade máxima, o tempo de frenagem pode durar até um quilômetro.

Então, quando é que uma tendência começa? Quando a opinião da maioria dos participantes do mercado muda ao contrário por qualquer razão, seja ela referente à mudanças globais em curso, pela mudança de alguns fatores importantes que influenciam o mercado ou pelas notícias. Com isso uma determinada opinião coletiva é formada e a tendência se inicia. Os participantes do mercado passam a acreditar ainda mais que o movimento está se tornando cada vez mais forte e que ele irá continuar por mais algum tempo. Ele tem uma direção, aceleração e uma certa velocidade, pois os grandes players entram no mercado com grandes posições. Este é o lugar onde aqueles, que entraram no início do movimento, dando impulso e velocidade, começam a ter lucro. Outros traders entram no mercado mais tarde por um preço menos atraente. Mas, diferentemente dos primeiros traders, eles tentam capturar o sentido do movimento dos preços.

A tendência termina quando as mudanças ocorrem. Mas por que o preço ainda se move da mesma maneira? Por que ele não muda abruptamente? A razão de tal comportamento é que aqueles que foram acelerando e empurrando o preço na direção desejada, começam a fechar suas posições e, assim, suprimir a tendência. E aqueles, que apenas "surfam a onda" e ainda acreditam que nada tenha se alterado, tentam mover o preço. Mas não basta apenas parar esse "trem". Ele começa a se mover na direção oposta, finalizando assim a história.


A Idéia de Negociação e Como não ser Atropelado pelo "Trem"

A ideia de obter lucro utilizando o movimento se baseia na análise da profundidade da tendência atual, ou seja, o seu tamanho e duração.

Para fornecer um exemplo vivo, nós usamos os indicadores padrão: RSI (Relative Strength Index) e AC (Acceleration/Deceleration).

1. Condições para entrar no mercado

Nós usaremos o primeiro indicador para demonstrar o quão longe e profundo o preço se moveu atualmente.

Nós vamos colocar os níveis para determinar uma distância e uma profundidade:

Fig. 1 níveis do oscilador RSI

Fig. 1. Níveis do oscilador RSI

Os critérios de avaliação da profundidade do movimento do preço:

Zonas do movimento do preço de compra:

Vamos indexar os preços de venda de forma semelhante:

Podemos descrever esta condição na linguagem MQL4 da seguinte forma:

//--- Determinando o índice de compra
   double rsi=iRSI(Symbol(),tf,period,PRICE_CLOSE,0);
   index_rsi = 0;
   if(rsi>90.0) index_rsi=4;
   else if( rsi > 80.0 ) 
   index_rsi = 3;
   else if( rsi > 70.0 ) 
   index_rsi = 2;
   else if( rsi > 60.0 ) 
   index_rsi = 1;
   else if( rsi < 10.0 ) 
   index_rsi = -4;
   else if( rsi < 20.0 ) 
   index_rsi = -3;
   else if( rsi < 30.0 ) 
   index_rsi = -2;
   else if( rsi < 40.0 ) 
   index_rsi = -1;

Usaremos o indicador AC de Bill Williams para esta finalidade, ou seja, vamos medir a velocidade e a aceleração do movimento atual.

Fig. 2. Indicador AC

Fig. 2. Indicador AC

Critérios de avaliação da velocidade:

Crescimento.

Queda.

Em MQL4 ficará da seguinte forma:

double ac[];
   ArrayResize(ac,5);
   for(int i=0; i<5; i++)
      ac[i]=iAC(Symbol(),tf,i);

   index_ac=0;
//--- Sinal de compra
   if(ac[0]>ac[1])
      index_ac=1;
   else if(ac[0]>ac[1] && ac[1]>ac[2])
      index_ac=2;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3])
      index_ac=3;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3] && ac[3]>ac[4])
      index_ac=4;
//--- Sinal de venda
   else if(ac[0]<ac[1])
      index_ac=-1;
   else if(ac[0]<ac[1] && ac[1]<ac[2])
      index_ac=-2;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3])
      index_ac=-3;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3] && ac[3]<ac[4])
      index_ac=-4;

Se nós temos os índices de profundidade do movimento e sabemos a velocidade do movimento, podemos estabelecer e classificar algumas condições de entrada.

Há opções de entrada no mercado:

//--- Sinal de compra
if(index_rsi==1 && index_ac>=1) //Possível movimento de compra
if(index_rsi==2 && index_ac>=1) //Movimento de compra fraco
if(index_rsi==3 && index_ac==1) //Movimento de compra fraco
if(index_rsi==3 && index_ac>=2) //Movimento de compra moderado
if(index_rsi==4 && index_ac>=1) //Forte movimento de compra

//--- Sinal de venda  
if(index_rsi==-1 && index_ac<=-1) //Possível movimento de venda
if(index_rsi==-2 && index_ac<=-1) //Movimento de venda fraco
if(index_rsi==-3 && index_ac==-1) //Movimento de venda fraco
if(index_rsi==-3 && index_ac<=-2) //Movimento de venda moderado
if(index_rsi==-4 && index_ac<=-1) //Fore movimento de venda

//--- Lateralizado 
if(index_rsi==0) 


2. Condições para a saída do mercado

Nós definimos e classificamos os parâmetros de entrada. Vamos fazer a seguinte analogia para explicar como foram formadas as condições de saída do mercado.

Pense, por exemplo, de uma bola de borracha para crianças. E agora vamos pensar o que vai acontecer se alguém jogar essa bola na água a partir de um ponto muito alto. Primeiro ele estará caindo e ganhando velocidade devido à aceleração gravitacional. Em seguida, ele bate contra a água. Mas ela tem uma velocidade suficiente para submergir a uma certa profundidade, perdendo a sua velocidade e tendo um valor negativo. A bola é afetada pelo Princípio de Arquimedes, de modo que ela é empurrado para a superfície.

Agora vamos aprofundar este exemplo:

Os dois objetivos principais para obter lucro são os seguintes:

  1. Determinar o momento oportuno em que a bola já tenha sido lançada e comprar ou vender.
  2. Fechar uma posição quando a bola mergulhar na água e fica mais lenta.

Pode ser difícil determinar a duração e a distância exata da queda da bola já que nós não vemos a pessoa jogando a bola nem a água nos mercados financeiros. Nós só podemos ver a velocidade e a direção da bola.

Nós revisamos os critérios acima sobre a profundidade do movimento de preços e avaliação da velocidade.

Agora nós vamos definir as condições de saída:

//--- Possível reversão para baixo
if(index_rsi>2 && index_ac<0) 

Se o preço estava subindo por muito tempo, sua aceleração torna-se negativa (para o lado negativo). Isso aponta para o fato de que uma mudança na tendência é perfeitamente possível.

//--- Possível reversão para cima
if(index_rsi<-2 && index_ac>0) 

O mesmo ocorre com o exemplo dado: a bola estava caindo por tempo suficiente, mas caiu na água, e a água empurrou a bola para fora na direção oposta. Ela indica o momento para fechar as posições.


3. Aperfeiçoamento da eficiência de entrada e saída

Sabe-se que alguns indicadores de negociação levantar sua velocidade de resposta à mudança de tendência quando usamos um período maior. Mas mais sinais falsos aparecem também.

A forma alternativa é não alterar o período de cálculo para o lado menor, mas segui-lo em várias períodos.

Fig. 3. Tendência em diferentes intervalos de tempo com base nos sinais de RSI e AC

Fig. 3. Tendência em diferentes intervalos de tempo com base nos sinais de RSI e AC

A tendência do movimento de preços pode ser visto claramente na figura devido aos nossos critérios e os indicadores RSI e AC. Vamos dar uma olhada detalhada para ele.

Movimento e velocidade no M1: movimento forte, índice AC é 4, profundidade do índice RSI é 2. M5 tem a mesma profundidade, mas a velocidade é igual a 1. O mesmo movimento é determinado em M15 mas é menos visível do que nos gráficos inferiores. Falando sobre o gráfico de 30 minutos e de uma hora, é impressionante ver que o M30 já tem um sinal, e o H1 tem uma desaceleração e até mesmo um possível sinal reversão.

Este exemplo nos fornece uma conclusão importante:

Se considerássemos somente o H1, nós colocaríamos uma ordem de venda à espera de uma reversão. Mas seria um sinal falso que nós filtramos realizando a análise de intervalos de tempo inferiores.


4. A implementação da estratégia de negociação sob a forma de um Expert Advisor

Código do Expert Advisor:

//+------------------------------------------------------------------+
//|                                                       tester.mq4 |
//|                                                Alexander Fedosov |
//+------------------------------------------------------------------+
#property copyright "Alexander Fedosov"
#property strict
#include <trading.mqh>      //Biblioteca de apoio para as operações de negociação
//+------------------------------------------------------------------+
//| Parâmetros                                                       |
//+------------------------------------------------------------------+
input int             SL = 40;               // Stop loss
input int             TP = 70;               // Take profit
input bool            Lot_perm=true;         // Lote do saldo?
input double          lt=0.01;               // Lote
input double          risk = 2;              // Risco do depósito, %
input int             slippage= 5;           // Desvio
input int             magic=2356;            // Número Mágico
input int             period=8;              // Período do indicador RSI
input ENUM_TIMEFRAMES tf=PERIOD_CURRENT;     // Período em funcionamento
int dg,index_rsi,index_ac;
trading tr;
//+------------------------------------------------------------------+
//| Função de inicialização do Expert Advisor                        |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Determinação das variáveis para a classe auxiliar de funções de negociação
//--- Idioma para exibir os erros, russo por padrão.
   tr.ruErr=true;
   tr.Magic=magic;
   tr.slipag=slippage;
   tr.Lot_const=Lot_perm;
   tr.Lot=lt;
   tr.Risk=risk;
//--- Número de tentativas.
   tr.NumTry=5;
//--- Determinação da casas decimais no gráfico atual
   dg=tr.Dig();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Função Principal de cálculo                                      |
//+------------------------------------------------------------------+
void OnTick()
  {
   depth_trend();
   speed_ac();
//--- Verifica a presença de ordens em aberto
   if(OrdersTotal()<1)
     {
      //--- Verifica as condições de compra
      if(Buy())
         tr.OpnOrd(OP_BUY,tr.Lots(),Ask,SL*dg,TP*dg);
      //--- Verifica as condições de venda
      if(Sell())
         tr.OpnOrd(OP_SELL,tr.Lots(),Bid,SL*dg,TP*dg);
     }
//--- Existem ordens em aberto?
   if(OrdersTotal()>0)
     {
      //--- Verifica e fecha as ordens de venda que atendem as condições de fechamento.
      if(Sell_close())
         tr.ClosePosAll(OP_SELL);
      //--- Verifica e fecha as ordens de compra que atendam as condições de fechamento.
      if(Buy_close())
         tr.ClosePosAll(OP_BUY);
     }

  }
//+------------------------------------------------------------------+
//| Função para determinar a profundidade da tendência               |
//+------------------------------------------------------------------+
void depth_trend()
  {
//--- Determinando o índice de compra
   double rsi=iRSI(Symbol(),tf,period,PRICE_CLOSE,0);
   index_rsi = 0;
   if(rsi>90.0) index_rsi=4;
   else if(rsi>80.0)
      index_rsi=3;
   else if(rsi>70.0)
      index_rsi=2;
   else if(rsi>60.0)
      index_rsi=1;
   else if(rsi<10.0)
      index_rsi=-4;
   else if(rsi<20.0)
      index_rsi=-3;
   else if(rsi<30.0)
      index_rsi=-2;
   else if(rsi<40.0)
      index_rsi=-1;
  }
//+------------------------------------------------------------------+
//| Função para determinar a velocidade da tendência                 |
//+------------------------------------------------------------------+
void speed_ac()
  {
   double ac[];
   ArrayResize(ac,5);
   for(int i=0; i<5; i++)
      ac[i]=iAC(Symbol(),tf,i);

   index_ac=0;
//--- Sinal de compra
   if(ac[0]>ac[1])
      index_ac=1;
   else if(ac[0]>ac[1] && ac[1]>ac[2])
      index_ac=2;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3])
      index_ac=3;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3] && ac[3]>ac[4])
      index_ac=4;
//--- Sinal de venda
   else if(ac[0]<ac[1])
      index_ac=-1;
   else if(ac[0]<ac[1] && ac[1]<ac[2])
      index_ac=-2;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3])
      index_ac=-3;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3] && ac[3]<ac[4])
      index_ac=-4;
  }
//+------------------------------------------------------------------+
//| Função para verificar as condições de compra                     |
//+------------------------------------------------------------------+
bool Buy()
  {
   bool res=false;
   if((index_rsi==2 && index_ac>=1) || (index_rsi==3 && index_ac==1))
      res=true;
   return (res);
  }
//+------------------------------------------------------------------+
//| Função para verificar as condições de venda                      |
//+------------------------------------------------------------------+
bool Sell()
  {
   bool res=false;
   if((index_rsi==-2 && index_ac<=-1) || (index_rsi==-3 && index_ac==-1))
      res=true;
   return (res);
  }
//+-----------------------------------------------------------------------+
//| Função para verificar as condições de fechamento da posição de compra |
//+-----------------------------------------------------------------------+
bool Buy_close()
  {
   bool res=false;
   if(index_rsi>2 && index_ac<0)
      res=true;
   return (res);
  }
//+----------------------------------------------------------------------+
//| Função para verificar as condições de fechamento da posição de venda |
//+----------------------------------------------------------------------+
bool Sell_close()
  {
   bool res=false;
   if(index_rsi<-2 && index_ac>0)
      res=true;
   return (res);
  }

Efetuamos uma pequena otimização utilizando apenas dois parâmetros: tf (Período de funcionamento) e períod (Período do indicador RSI).

E obtivemos os seguintes resultados no M15:


Fig. 4. Os resultados de backtesting do Expert Advisor

Atenção! Esta é apenas uma versão demo. Nós não recomendamos usá-lo para testes e em contas reais.

Conclusão

A determinação do início e do fim da tendência é uma das tarefas complicadas para os traders em todo o mundo já que é impossível prever o comportamento do mercado.

Mas é perfeitamente possível determinar os momentos de entrada e saída na tendência atual e, portanto, obter um lucro considerável. E a idéia geral de determinação e do rastreio dinâmico da velocidade do movimento pode ser útil neste caso.

Desejamos-lhe negócios bem sucedidos.