English Русский 中文 Español Deutsch 日本語 한국어 Français Italiano Türkçe
Ideias de Negociação Baseada na Direção dos Preços e na Velocidade do Movimento

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

MetaTrader 4Exemplos | 14 julho 2015, 15:11
3 276 0
Alexander Fedosov
Alexander Fedosov

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:

  • Uma área entre os níveis de 40 - 60 é considerado como sendo uma zona lateralizada (zona de lado). Não há qualquer tendência quando o preço esta nessa zona. Vamos atribuir o índice 0 para a ausência de um movimento direcional.

Zonas do movimento do preço de compra:

  • Zona 60-70 - este é um possível início de um movimento para cima. Vamos atribuir o índice de 1 para este movimento.
  • Zona 70-80 - o movimento ascendente é mais distinto. O movimento agrega velocidade. Atribui-se o índice 2.
  • Zona 80-90 - o movimento tem uma direção estável. A velocidade é recolhida. Atribui-se o índice 3.
  • Zona 90-100. Em geral, esse é um movimento forte de uma única direção, que não tem pullbacks. Muito raro. Seu índice de movimento será o 4.

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

  • Zona 30-40. O movimento começa ir para baixo. Índice -1.
  • Zona 20-30. O movimento agrega velocidade. Índice -2.
  • Zona 10-20. Sentido descendente estável. Índice -3.
  • Zona 0-10. Zona de movimento de sentido único forte. Índice -4.

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.

  • O primeiro critério é a comparação dos histogramas atuais e anteriores. Se o histograma atual excede o anterior, há uma provável aceleração de crescimento do preço. Vamos defini-la como um índice de velocidade igual a 1.
  • O segundo critério é a comparação das três barras vizinhas (a partir da barra zero para a segunda barra). Nós podemos falar sobre o aumento de aceleração se o valor de cada barra posterior exceder o valor da barra anterior. O índice de velocidade será igual a 2.
  • Há uma comparação semelhante com as 4 barras para verificar se cada barra anterior é menor que a subsequente. O índice de velocidade será igual a 3.
  • A comparação das últimas cinco barras com o devido cuidado para a atual, verificando a mesma condição. O índice de velocidade será igual a 4.

Queda.

  • Também. Comparação da barra atual e da anterior. Se a barra atual for menor que a anterior, o índice de velocidade será igual a -1.
  • Comparação da redução de 3 barras da anterior para a atual. Índice é igual a -2.
  • Comparação de 4 barras. Índice é igual a -3.
  • Comparação de 5 barras. Índice é igual a -4.

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:

  • Como você já entendeu, a nossa bola é o preço.
  • Uma pessoa jogando a bola representa os participantes do mercado que começaram a tendência.
  • A força da gravidade que provoca a aceleração gravitacional representa os traders que aderiram à direção dos preços após a tendência ser iniciada.
  • A água representa os fatores importantes que influenciam na mudança de direção.
  • O princípio de Arquimedes representa as posições fechadas daqueles que começaram a tendência.

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.


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

Arquivos anexados |
trading.mqh (48.16 KB)
tester.mq4 (11.59 KB)
Programando os Modos do EA Usando a Abordagem Orientada a Objetos Programando os Modos do EA Usando a Abordagem Orientada a Objetos
Este artigo explica a idéia da programação multi-modo de um robô de negociação em MQL5. Cada modalidade é implementada com a abordagem orientada a objetos. São fornecidos as instâncias de ambos os modos de hierarquias de classe e das classes para testes. A programação multi-modo de robôs de negociação presumi-se levar em conta todas as peculiaridades de cada modo operacional de um EA escrito em MQL5. Funções e enumerações são criadas para identificar o modo.
Os Erros Mais Comuns nos Programas MQL4 e Como Evitá-los Os Erros Mais Comuns nos Programas MQL4 e Como Evitá-los
Para evitar o término dos programas por erros críticos, a versão anterior do compilador tratava muitos erros no ambiente de tempo de execução. Por exemplo, a divisão por zero ou o array fora do intervalo são erros críticos e geralmente levam a uma pane do programa. O novo compilador pode detectar a origem real ou potencial dos erros e melhorar a qualidade do código. Neste artigo, nós discutimos os possíveis erros que podem ser detectados durante a compilação de programas antigos e ver como corrigi-los.
Florestas Aleatórias na Previsão das Tendências Florestas Aleatórias na Previsão das Tendências
Este artigo considera o uso do pacote Rattle na busca automática de padrões para prever as posições compradas ou vendidas dos pares de moedas no Forex. Este artigo pode ser útil tanto para novatos quanto para profissionais experientes.
Dicas para Escolher um Sinal de Negociação para Assinar. Guia Passo-a-Passo Dicas para Escolher um Sinal de Negociação para Assinar. Guia Passo-a-Passo
Este guia passo-a-passo é dedicado ao serviço de Sinais, examinação dos sinais de negociação, uma abordagem de sistema para a busca de um sinal desejado, que satisfaça os critérios de rentabilidade, risco, ambições de negociação, trabalhando em vários tipos de contas e instrumentos financeiros.