Análise comparativa de 10 estratégias de tendência

Alexander Fedosov | 26 abril, 2017


Conteúdo

Introdução

As estratégias de negociação de tendência são muito populares ao trabalhar nos mercados de moedas. Sua finalidade consiste em detectar um forte movimento unidirecional, encontrar os pontos favoráveis para entrar no mercado e, não menos importante, definir corretamente o momento de saída. Para este artigo, eu selecionei alguns instrumentos técnicos para determinar direta ou indiretamente a tendência. A partir deles foram elaboradas 10 estratégias de tendência que, por sua vez, são implementadas como Expert Advisors para o MetaTrader 5. De acordo com os resultados de seu desempenho, eu analisei as vantagens e desvantagens de cada estratégia e, assim, realizei sua comparação. O propósito deste artigo é prover ao leitor a visão mais completa sobre os pontos fracos e fortes de negociação de tendência. Outras estratégias de tendência são descritas no artigo Diversas maneiras de encontrar uma tendência no MQL5.

Abordagem do problema ao criar a estratégia de tendência

À primeira vista parece que desenvolver uma estratégia de tendência não é tão difícil. Basta definir a tendência usando a análise técnica, abrir uma posição e esperar o próximo movimento, se possível, aumentando a posição. Teoricamente é impossível contra-argumentar essa abordagem. No entanto, na prática, surgem várias questões importantes.

Fig.1 Áreas de definição da tendência e da fase de correção.

Tarefa №1. Detecção da tendência.

Como regra geral, a detecção e a confirmação de uma tendência leva tempo. É por isso que, no início da tendência, será impossível conseguir uma entrada que seja tão confiável quanto possível. Veja a figura 1. É impossível definir a entrada como um ponto no gráfico, uma vez que somente vemos uma região favorável para entrar no mercado. A definição sob a forma de área é justificada pelo fato de que durante a análise surgem atrasos quanto ao aparecimento do sinal, enquanto, para confirmar a tendência, é necessário esperar um determinado tempo. Como exemplo temos os sistemas de negociação nos quais um indicador envia um sinal de presença de tendência, enquanto, após algum tempo, outro confirma ou não esse sinal. Essa abordagem "come" tempo. E tempo é dinheiro ou, no nosso caso, lucro perdido.

Tarefa №2. O objetivo da posição aberta.

Bem, neste ponto, identificamos a tendência e confirmamos seu sinal. Agora é preciso entrar no mercado. Mas, antes disso, é necessário determinar os objetivos de lucro. É possível tanto fixar em pontos quanto deixar de maneira dinâmica o lucro-alvo, dependendo da força da tendência prevista. Neste caso, é possível trabalhar com níveis de suporte/resistência. Mas a questão continua sendo o fato de que antes de entrar no mercado, é necessário saber exatamente quando vamos sair dele. A partir disto, surge o seguinte desafio.

Tarefa №3. Definição da conclusão da tendência. 

‌Vamos ver novamente a figura 1. Nela é apresentada claramente a seguinte situação: nós entramos na posição na área verde, em seguida, a tendência continua até à área de fase de correção. É neste ponto que se torna necessário definir se se trata de um estado temporário ou estamos na hora de entrar no mercado. Neste caso, a fase de correção (plano) foi curta e a tendência continuou. Gostaria de deixar bem claro que, nas estratégias com lucros-alvo fixos, a duração e o tamanho do movimento em pontos são previstos com base na avaliação da tendência confirmada na tarefa №2. 

Estratégias de tendência

Gostaria de deixar bem clara a condição geral. No que diz respeito à visão geral das estratégias de tendência, decidi não pegar nem timeframes demasiado grandes nem em demasiado pequenos, uma vez que, nos mais pequenos, surgem muitos sinais falsos, enquanto, nos demasiado grandes, pelo contrário, a seletividade nessas condições é tão grande que o número de entradas no mercado é muito reduzido para analisar objetivamente a eficiência da estratégia. É por isto que, para testar, serão selecionados os timeframes na gama de M30 a H4.

Estratégia №1: Indicador ADXCloud com RSI de confirmação sob a forma de histograma.

A primeira estratégia que consideraremos está baseada no indicador modificado ADX, ou seja, o ADXCloud. Confirmaremos o sinal usando o oscilador RSI com níveis de sobrevenda/sobrecompra. Ele é apresentado como histograma, nele, as colunas verdes de valores do RSI estão relacionadas com a zona de sobrecompra, enquanto que as vermelhas com a zona de sobrevenda.

Parâmetros Descrição
Indicador utilizado ADXCloud
Indicador utilizado RSIColor
Período H1
Condições de compra Se a nuvem mudar de vermelho para verde, e, o histograma RSIColor for verde.
Condições de venda Se a nuvem mudar de verde para vermelho, e, o histograma RSIColor for vermelho.
Condições de saída   Take-Profit/Stop-Loss

Na Fig.2, esta estratégia é apresentada graficamente. Observe que, no timeframe H1, as áreas definidas como tendências duram algumas barras, portanto, nas condições de saída, não é aconselhável selecionar valores grandes de Take-Profit e Stop-Loss.

Fig.2 Condições de entrada segundo a estratégia de tendência №1

O código para implementação do Expert Advisor sobre esta estratégia tem a seguinte aparência:

void OnTick()
  {
//--- Verificação de ordens abertas anteriormente pelo EA
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //--- Obtenção de dados para cálculo

      if(!GetIndValue())
         return;
      //--- Abertura de ordem se houver um sinal de compra

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //--- Abertura de ordem se houver um sinal de venda

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Condições de compra                                               |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   return(adx[0]>0 && adx[1]<0 && rsi1[0]==1)?true:false;
  }
//+------------------------------------------------------------------+
//| Condições de venda                                               |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   return(adx[0]<0 && adx[1]>0 && rsi2[0]==1)?true:false;
  }
//+------------------------------------------------------------------+
//| Obtenção dos valores atuais dos indicadores                           |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,rsi1)<=0 ||
          CopyBuffer(InpInd_Handle1,1,0,2,rsi2)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,adx)<=0
          )?false:true;
  }


Estratégia №2: Indicador de tendência Standard Deviation sob a forma de histograma com confirmação do RVI.

Esta estratégia é uma modificação do indicador de tendência Standard Deviation e oscilador RVI.‌ Saiba mais sobre como funcionam acessando os links na tabela.

Parâmetros Descrição
Indicador utilizado ColorStdDev
Indicador utilizado ColorZerolagRVI
Período H1
Condições de compra Se o histograma ColorStdDev for vermelho (tendência forte), e, a nuvem ColorZerolagRVI, verde.
Condições de venda Se o histograma ColorStdDev for vermelho (tendência forte), e, a nuvem ColorZerolagRVI, vermelha.
Condições de saída   Take-Profit/Stop-Loss

A estratégia é apresentada na Fig.3. Nela as áreas de movimento forte são definidas usando o Standard Deviation. A tendência é confirmada através da modificação do oscilador RVI construído com base em quatro RVI padrão com diferentes períodos e coeficientes corretores.

Fig.3 Condições de entrada segundo a estratégia de tendência №2

Observe que, ao implementar esta estratégia, nas configurações ColorStDev é solicitado definir empiricamente o valor das tendências forte e moderada, e fase de correção (plano). Deixamos estes valores por padrão, mas por conveniência inserimos a opção Used Trend, ela permite selecionar o tipo de tendência no qual vale a pena confiar — moderada ou forte. Assim, não é necessário de cada vez redefinir os três indicadores, basta alternar um. O sinal da tendência forte é mais adequado para a estratégia atual, porque escolhemos o timeframe 1H. A opção da tendência média é mais adequada para testes em timeframes maiores. Ao acontecer isto, é necessário ter em mente que serão mais os sinais para entrada com uso da tendência moderada, portanto, para filtrar os sinais falsos e sair lucrado, é necessário sempre levar em contra os lucros-alvo e o timeframe atual.

//--- Parâmetros do indicador ColorStDev

input int                  period = 12;                               //Smoothing period StDev
input ENUM_MA_METHOD       MA_Method=MODE_EMA;                        //Histogram smoothing method
input ENUM_APPLIED_PRICE   applied_price=PRICE_CLOSE;                 //Applied price
input int                  MaxTrendLevel=100;                         //Maximum trend level
input int                  MiddLeTrendLevel=40;                       //Middle trend level
input int                  FlatLevel=10;                              //Flat level
input Trend                TrendLevel=Maximum;                                //Used trend

A essência da estratégia é apresentada no código:

void OnTick()
  {
//--- Verificação de ordens abertas anteriormente pelo EA
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //--- Obtenção de dados para cálculo

      if(!GetIndValue())
         return;
      //--- Abertura de ordem se houver um sinal de compra

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //--- Abertura de ordem se houver um sinal de venda

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Condições de compra                                               |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   return(stdev[0]>trend && rvi_fast[0]>rvi_slow[0])?true:false;
  }
//+------------------------------------------------------------------+
//| Condições de venda                                               |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   return(stdev[0]>trend && rvi_fast[0]<rvi_slow[0])?true:false;
  }
//+------------------------------------------------------------------+
//| Obtenção dos valores atuais dos indicadores                           |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,stdev)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,rvi_fast)<=0 ||
          CopyBuffer(InpInd_Handle2,1,0,2,rvi_slow)<=0
          )?false:true;
  }

Estratégia №3: Interpretação de nuvem do AC de Bill Williams e indicador composto Bears Power e Bulls Power.
Na seguinte estratégia, decidi experimentar o vínculo entre a interpretação de nuvem do Accelerator Oscillator(AC) de Bill Williams e os osciladores Bears Power e Bulls Power combinados. ‌

Parâmetros Descrição
Indicador utilizado Bear_Bulls_Power
Indicador utilizado CronexAC
Período H1
Condições de compra O histograma exibe o crescimento (altera a cor de rosa para azul, se o valor do indicador for inferior a zero), nuvem CroneAC azul.
Condições de venda O histograma exibe a queda (altera a cor de azul para rosa, se o valor do indicador for superior a zero), nuvem CroneAC laranja.
Condições de saída   Take-Profit/Stop-Loss

A estratégia é apresentada na Fig.4. Quanto aos sinais de entrada o problema tem a ver com o acompanhamento do crescimento anterior do histograma. Em outras palavras, temos de encontrar o momento em que os touros substituem os ursos ou vice-versa e, em seguida, confirmar o sinal usando o oscilador.

Fig.4 Condições de entrada segundo a estratégia de tendência №3

A estratégia permite variar as condições de entrada, isto é, é possível procurar, em vez de um crescimento "anterior" do histograma, um sinal posterior, por exemplo, a transição do indicador pelo zero ou a alteração do signo de seu valor. Existe a possibilidade de que o resultado pode dar apenas uma alteração da cor do histograma. A implementação da estratégia de acordo com as condições inicialmente descritas é apresentada na listagem:

void OnTick()
  {
//--- Verificação de ordens abertas anteriormente pelo EA
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //--- Obtenção de dados para cálculo

      if(!GetIndValue())
         return;
      //--- Abertura de ordem se houver um sinal de compra

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //--- Abertura de ordem se houver um sinal de venda

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Condições de compra                                               |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   return(ac_fast[0]>ac_slow[0] && bb_power[0]>bb_power[1] && (bb_power[0]<0 && bb_power[1]<0))?true:false;
  }
//+------------------------------------------------------------------+
//| Condições de venda                                               |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   return(ac_fast[0]<ac_slow[0] && bb_power[0]<bb_power[1] && (bb_power[0]>0 && bb_power[1]>0))?true:false;
  }
//+------------------------------------------------------------------+
//| Obtenção dos valores atuais dos indicadores                           |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,bb_power)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,ac_fast)<=0 ||
          CopyBuffer(InpInd_Handle2,1,0,2,ac_slow)<=0
          )?false:true;
  }

Estratégia №4: Centro de gravidade J. F. Ehlers confirmado pleo indicador de celeridade do preço.

A estratégia utiliza o indicador Centro de gravidade de Ehlers sob a forma de um histograma OSMA — CenterOfGravityOSMA. Seu sinal é confirmado por um indicador que calcula a celeridade do preço.

Parâmetros Descrição
Indicador utilizado CenterOfGravityOSMA
Indicador utilizado Average Speed
Período H1
Condições de compra O histograma do Centro de gravidade exibe o crescimento (ao fazer isto, o valor do indicador é inferior a zero), enquanto o valor do Average Speed é superior ao limiar (inicialmente definido nas configurações)
Condições de venda O histograma do Centro de gravidade exibe a queda (ao fazer isto, o valor do indicador é superior a zero), enquanto o valor do Average Speed é superior ao limiar (inicialmente definido nas configurações)
Condições de saída   Take-Profit/Stop-Loss

A estratégia é apresentada na Fig.5. Como na estratégia anterior, aqui também acompanhamos a mudança precoce do histograma e confirmamos sua taxa de variação de preço. 

Fig.5 Condições de entrada segundo a estratégia de tendência №4

Implementação da estratégia:

void OnTick()
  {
//--- Verificação de ordens abertas anteriormente pelo EA
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //--- Obtenção de dados para cálculo

      if(!GetIndValue())
         return;
      //--- Abertura de ordem se houver um sinal de compra

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //--- Abertura de ordem se houver um sinal de venda

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Condições de compra                                               |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   return(avr_speed[0]>Trend_lev && cog[1]<cog[0] &&(cog[1]<0 && cog[0]<0))?true:false;
  }
//+------------------------------------------------------------------+
//| Condições de venda                                               |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   return(avr_speed[0]>Trend_lev && cog[1]>cog[0] &&(cog[1]>0 && cog[0]>0))?true:false;
  }
//+------------------------------------------------------------------+
//| Obtenção dos valores atuais dos indicadores                           |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,cog)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,avr_speed)<=0
          )?false:true;
  }

Estratégia №5. Indicador integrado Onda Binária.

Nas quatro estratégias anteriores, eu aderi o modelo de seleção da relação do indicador principal, que iria mostrar a tendência e o sinal adicional para sua verificação. Agora eu decidi me afastar deste esquema e usar apenas um indicador: o Onda Binária. Tem a aparência de um oscilador, mas, na realidade, implementa e visualmente apresenta os sinais de seis indicadores — MA, MACD, OsM, CCI, Momentum, RSI e ADX. Por si só consiste numa estratégia de negociação auto-suficiente com um sistema de configurações flexível. Além do conjunto de parâmetros padrão para os indicadores selecionados, aqui foram acrescentados pesos - o impacto do sistema de um componente particular.

Parâmetros Descrição
Indicador utilizado Binary_Wave
Período H1
Condições de compra Transição do oscilador através de zero para cima
Condições de venda Transição do oscilador através de zero para baixo
Condições de saída   Take-Profit/Stop-Loss

Os exemplos de entrada segundo esta estratégia apresentados na Fig.6. Observe que, quanto à programação informática, a fim de otimizar a estratégia de acordo com o H1, foram alteradas - de 14 para 10 - as configurações dos períodos MA_Period, CCIPeriod, MOMPeriod, RSIPeriod e ADX_Period. Para testar com os períodos clássicos é possível mudar o timeframe para H3 ou H4.

Fig.6 Condições de entrada segundo a estratégia de tendência №5

Resultado da implementação:‌‌

void OnTick()
  {
//--- Verificação de ordens abertas anteriormente pelo EA
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //--- Obtenção de dados para cálculo

      if(!GetIndValue())
         return;
      //--- Abertura de ordem se houver um sinal de compra

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //--- Abertura de ordem se houver um sinal de venda

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Condições de compra                                               |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   return(wave[0]>0 && wave[1]<0)?true:false;
  }
//+------------------------------------------------------------------+
//| Condições de venda                                               |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   return(wave[0]<0 && wave[1]>0)?true:false;
  }
//+------------------------------------------------------------------+
//| Obtenção dos valores atuais dos indicadores                           |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle,0,0,2,wave)<=0)?false:true;
  }

Estratégia №6: Indicador integrado Weight Oscillator em conjunto com LeMan Objective.

Aqui são combinados os princípios de construção das estratégias utilizadas nos cinco exemplos anteriores. Nós combinamos um sistema pronto e adicionamos nele um indicador que confirma o sinal. O Weight Oscillator será o sistema pronto, este oscilador apresenta a soma ponderada suavizada de quatro indicadores: RSI, MFI, WPR e DeMarker com coeficiente corretor. O LeMan Objective confirma o sinal, calcula a distância entre o preço de abertura e os máximos e mínimos e exibe os quartis de desvios. Também, no número especificado de barras, ele dá uma média móvel das estatística resumidas da alteração do preço em 75, 50, 25 % dos casos, bem como exibe o máximo desvio. Nós acompanharemos o crescimento do histograma do Weight Oscillator para compra, ao fazer isto, na qualidade de confirmação tomaremos a penetração - feita pelo preço - no quartil de desvio com 75% do valor.

Parâmetros Descrição
Indicador utilizado Weight Oscillator
Indicador utilizado LeMan Objective
Período H1
Condições de compra O Weight Oscillator cresce e o preço rompe o nível superior de 75% do valor do quartil de desvio.
Condições de venda O Weight Oscillator cai e o preço rompe o nível inferior de 75% do valor do quartil de desvio.
Condições de saída   Take-Profit/Stop-Loss

O ponto de entrada pode ser claramente visto na Fig.7, o 75% do nível é destacado com linhas grossas. Vemos que os preços de fechamento rompem estes níveis e são realizadas as condições de crescimento/queda do Weight Oscillator.

Fig.7 Condições de entrada segundo a estratégia de tendência №6

O indicador LeMan Objective para construir níveis próprios utiliza 8 buffers de indicador:

  • Quartile 1 corresponde ao valor médio de redução do preço com respeito à amostra em 25% dos casos.
  • Quartile 2 corresponde ao valor médio de redução do preço com respeito à amostra em 50% dos casos.
  • Quartile 3 corresponde ao valor médio de redução do preço com respeito à amostra em 75% dos casos. Isso é o que usamos na estratégia.
  • Quartile 4 corresponde ao desvio máximo do valor médio do preço. 
  • Quartile 5 corresponde ao valor médio de aumento do preço com respeito à amostra em 25% dos casos.
  • Quartile 6 corresponde ao valor médio de aumento do preço com respeito à amostra em 50% dos casos.
  • Quartile 7 corresponde ao valor médio de aumento do preço com respeito à amostra em 75% dos casos. Isso é o que usamos na estratégia.
  • Quartile 8 corresponde ao desvio máximo do valor médio do preço.

Portanto, na programação informática, precisaremos, além do Weight Oscillator e dos valores do preço de fechamento, dos buffers 2 e 6. 

void OnTick()
  {
//--- Verificação de ordens abertas anteriormente pelo EA
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //--- Obtenção de dados para cálculo

      if(!GetIndValue())
         return;
      //--- Abertura de ordem se houver um sinal de compra

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //--- Abertura de ordem se houver um sinal de venda

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Condições de compra                                               |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   return(wo[0]>wo[1] && close[0]>obj_q3_b[0])?true:false;
  }
//+------------------------------------------------------------------+
//| Condições de venda                                               |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   return(wo[0]<wo[1] && close[0]<obj_q3_s[0])?true:false;
  }
//+------------------------------------------------------------------+
//| Obtenção dos valores atuais dos indicadores                           |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,6,0,2,obj_q3_b)<=0 ||
         CopyBuffer(InpInd_Handle1,2,0,2,obj_q3_s)<=0 ||
         CopyBuffer(InpInd_Handle2,0,0,2,wo)<=0 || 
         CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0
          )?false:true;
  }

Estratégia №7: Donchian Channel em conjunto com o MACD, em que a série de preço é substituída pelos valores do AO de Bill Williams.

Para definir um forte movimento unidirecional, é usado o canal Donchian. Assumimos o rompimento do canal como indicador de tendência. Para confirmar a tendência, utilizamos um MACD modificado no qual a série de preço é substituída pelo valor do indicador AO de Bill Williams.

Parâmetros Descrição
Indicador utilizado Donchian Channel System
Indicador utilizado CronexAO
Período H1
Condições de compra Rompimento do limite superior do canal de Donchian e nuvem CronexAO de cor azul
Condições de venda Rompimento do limite inferior do canal de Donchian e nuvem CronexAO cor de rosa
Condições de saída   Take-Profit/Stop-Loss

Na Fig.8, esta estratégia é exibida graficamente. Para facilitar a visualização, foi selecionada uma variante do indicador com mudança na cor de vela, se a vela ultrapassar a borda superior ou inferior do canal Donchian. Ao fazer isto, as cores do CronexAO são escolhidas em conformidade com as cores das velas que ultrapassam as bordas do canal.

Fig.8 Condições de entrada segundo a estratégia de tendência №7

Ao implementar esta estratégia, é importante que, no Donchian Channel System, para os extremos sejam usados os valores High e Low de velas. No entanto, se o instrumento é caraterizado pelos aumentos repentinos do preço - quer numa quer noutra direção (sombras longas de vela) - e o subsequente retorno para valores médios, então, faz sentido usar como extremos os valores ora Open ou Close das velas, ora Open+High/Open+Low em conjunto. Assim o efeito das sombras longas será reduzido. 

void OnTick()
  {
//--- Verificação de ordens abertas anteriormente pelo EA
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //--- Obtenção de dados para cálculo

      if(!GetIndValue())
         return;

      //--- Abertura de ordem se houver um sinal de compra

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //--- Abertura de ordem se houver um sinal de venda

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Condições de compra                                               |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   return(cao_fast[0]>cao_slow[0] && close[0]>dcs_up[0])?true:false;
  }
//+------------------------------------------------------------------+
//| Condições de venda                                               |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   return(cao_fast[0]<cao_slow[0] && close[0]<dcs_low[0])?true:false;
  }
//+------------------------------------------------------------------+
//| Obtenção dos valores atuais dos indicadores                           |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,dcs_up)<=0 ||
          CopyBuffer(InpInd_Handle1,1,0,2,dcs_low)<=0 || 
          CopyBuffer(InpInd_Handle2,0,0,2,cao_fast)<=0 ||
          CopyBuffer(InpInd_Handle2,1,0,2,cao_slow)<=0 ||
          CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0
          )?false:true;
  }

Estratégia №8: Oscilador cíclico Schaff com confirmação segundo três níveis Tirone.

Nesta estratégia de tendência, é aplicado o oscilador cíclico Shaff nos momentos de sua saída das zonas de sobrevenda/sobrecompra. Para verificação, são utilizados três níveis de Tirone. Foram obtidos resultados interessantes nos timeframes maiores. Para teste, foi selecionado H4.

Parâmetros Descrição
Indicador utilizado Schaff Trend Cycle
Indicador utilizado Três nível Tirone
Período H4
Condições de compra Saída da zona de sobrevenda, enquanto o preço atual deve estar acima do nível Tirone superior.
Condições de venda Saída da zona de sobrecompra, enquanto o preço atual deve estar acima do nível Tirone inferior.
Condições de saída   Take-Profit/Stop-Loss

A representação gráfica desta estratégia tendência pode ser vista na Fig.9.

Fig.9 Condições de entrada segundo a estratégia de tendência №8

Ao discutir a implementação desta estratégia, gostaria de notar que, além dos parâmetros básicos dos dois indicadores, era necessário adicionar os valores numéricos dos níveis de sobrevenda/sobrecompra. Não me dei à tarefa de mudá-los colocando por padrão 20 e 80. No entanto alterei as configurações de suavização e os períodos (na figura pode ser visto no canto superior esquerdo do indicador Schaff). Estas configurações são opcionais, você pode aplicar quer as configurações por padrão quer suas próprias.

//+------------------------------------------------------------------+
//| Parâmetros de entrada do Expert Advisor                                       |
//+------------------------------------------------------------------+
input string               Inp_EaComment="Strategy #8";                  //EA Comment
input double               Inp_Lot=0.01;                                 //Lot
input MarginMode           Inp_MMode=LOT;                                //MM
input int                  Inp_MagicNum=1111;                            //Magic number
input int                  Inp_StopLoss=400;                             //Stop Loss(points)
input int                  Inp_TakeProfit=600;                           //Take Profit(points)
input int                  Inp_Deviation = 20;                           //Deviation(points)

input double               Overbuying=80;                                //Overbuying zone
input double               Overselling=20;                               //Overselling zone
//--- Parâmetros do indicador Schaff Trend Cycle

input Smooth_Method        MA_SMethod=MODE_SMMA_;                        //Histogram smoothing method
input int                  Fast_XMA = 20;                                //Fast moving average period
input int                  Slow_XMA = 30;                                //Slow moving average period
input int                  SmPhase= 100;                                 //Moving averages smoothing parameter
input Applied_price_       AppliedPrice=PRICE_CLOSE_;                    //Price constant
input int                  Cycle=10;                                     //Stochastic oscillator period

Essência da estratégia:

void OnTick()
  {
//--- Verificação de ordens abertas anteriormente pelo EA
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //--- Obtenção de dados para cálculo

      if(!GetIndValue())
         return;
      //--- Abertura de ordem se houver um sinal de compra

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //--- Abertura de ordem se houver um sinal de venda

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Condições de compra                                               |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   return(schaff[1]<Overselling && schaff[0]>Overselling && close[0]>tirone_b[0])?true:false;
  }
//+------------------------------------------------------------------+
//| Condições de venda                                               |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   return(schaff[1]>Overbuying && schaff[0]<Overbuying && close[0]<tirone_s[0])?true:false;
  }
//+------------------------------------------------------------------+
//| Obtenção dos valores atuais dos indicadores                           |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,schaff)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,tirone_b)<=0 ||
          CopyBuffer(InpInd_Handle2,2,0,2,tirone_s)<=0 ||
          CopyClose(Symbol(),PERIOD_CURRENT,0,2,close)<=0
          )?false:true;
  }

Estratégia №9: Canal Keltner como um histograma e indicador iTrend na forma de nuvem.

Aqui o identificador da tendência é o i-KlPrice com base no canal Keltner sob a forma de histograma. Confirmaremos a tendência usando o indicador iTrend sob a forma de nuvem, nele a cor e a largura da nuvem caraterizam a tendência atual. Como na estratégia anterior, estamos lidando com um tipo de sinal na transição de um determinado nível. Para o i-KlPrice, trata-se dos valores 50 e -50, definidos por padrão. É por isto que faz sentido adicionar - nas configurações do futuro EA - os parâmetros BuyLevel e SellLevel, cujas transições serão um sinal de compra ou venda.

O indicador iTrend responderá pela confirmação do sinal. Nele, acompanharemos a cor da nuvem que é determinada pelos valores de duas linhas. A superior é a diferença do valor suavizado do preço e uma das bandas de Bollinger selecionadas nas configurações. A inferior é a diferença da soma (High + Low) e o valor da média móvel da vela atual multiplicada por -1.‌

Parâmetros Descrição
Indicador utilizado i-KlPrice
Indicador utilizado iTrend
Período H1
Condições de compra Valor do histograma i-KlPrice acima do BuyLevel, e nuvem iTend verde.
Condições de venda Valor do histograma i-KlPrice abaixo do BuyLevel, e nuvem iTend rosa.
Condições de saída   Take-Profit/Stop-Loss

A Fig.10 são ilustrados graficamente exemplos de pontos de entrada para esta estratégia de tendência.

Fig.10 Condições de entrada segundo a estratégia de tendência №9

‌‌

Eu desenvolvi esta estratégia no meu código assim:

void OnTick()
  {
//--- Verificação de ordens abertas anteriormente pelo EA
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //--- Obtenção de dados para cálculo

      if(!GetIndValue())
         return;
      //--- Abertura de ordem se houver um sinal de compra

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //--- Abertura de ordem se houver um sinal de venda

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Condições de compra                                               |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   return(klprice[0]>BuyLevel && itrend_h[0]>itrend_l[0])?true:false;
  }
//+------------------------------------------------------------------+
//| Condições de venda                                               |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   return(klprice[0]<SellLevel && itrend_h[0]<itrend_l[0])?true:false;
  }
//+------------------------------------------------------------------+
//| Obtenção dos valores atuais dos indicadores                           |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,klprice)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,itrend_h)<=0 ||
          CopyBuffer(InpInd_Handle2,1,0,2,itrend_l)<=0
          )?false:true;
  }


Estratégia №10: Impulso de preço Average Change e leque de médias móveis FigurelliSeries.

E, finalmente, a variante com pesquisa da tendência com a ajuda do indicador Average Change. O FigurelliSeries sob a forma de um histograma será a confirmação do impulso. Para o Average Change, o valor base - a partir do qual parte o sinal do impulso do preço para cima ou para baixo - é igual a um. Portanto, a condição de entrada para esta estratégia consiste na transição do valor do indicador através de 1. Para entender as leituras do indicador FigurelliSeries, é necessário estudar seu algoritmo e parâmetros de entrada:

//+----------------------------------------------+
//| Indicator input parameters                   |
//+----------------------------------------------+
input uint StartPeriod=6;                              // initial period
input uint Step=6;                                     // periods calculation step
input uint Total=36;                                   // number of Moving Averages
input  ENUM_MA_METHOD   MAType=MODE_EMA;               // Moving Averages smoothing type
input ENUM_APPLIED_PRICE   MAPrice=PRICE_CLOSE;        // price timeseries of Moving Averages
input int Shift=0;                                     // Horizontal shift of the indicator in bars 

É definido o período inicial da média móvel StartPeriod e, em seguida, também 36 médias com período igual ao inicial mais Step. A seguir, selecionamos o tipo de MA e o preço a ser aplicado. Em geral, este é um leque de MA cujos valores são comparados com o preço de fechamento atual. O valor do histograma é a diferença entre a quantidade de MA acima e abaixo do preço de fechamento:

//---- main cycle of calculation of the indicator
   for(bar=limit; bar>=0 && !IsStopped(); bar--)
     {
      double tot_Ask=0;
      double tot_Bid=0;

      for(int count=0; count<int(Total); count++)
        {
         //---- copy newly appeared data into the arrays
         if(CopyBuffer(MA_Handle[count],0,bar,1,MA)<=0) return(RESET);

         if(close[bar]<MA[0]) tot_Ask++;
         if(close[bar]>MA[0]) tot_Bid++;
        }

      IndBuffer[bar]=tot_Bid-tot_Ask;
     }

Resumindo os princípios de ambos os indicadores, compomos as regras de entrada:

Parâmetros Descrição
Indicador utilizado Average Change
Indicador utilizado Figurelli Series
Período H4
Condições de compra O Average Change atravessa para cima o limiar, e o valor do histograma Figurelli Series acima de zero.
Condições de venda O Average Change atravessa para baixo o limiar, e o valor do histograma Figurelli Series abaixo de zero.
Condições de saída   Take-Profit/Stop-Loss

A Fig.11 apresenta exemplos de entrada no mercado das estratégias consideradas:

Fig.11 Condições de entrada segundo a estratégia de tendência №10

Código da estratégia:

void OnTick()
  {
//--- Verificação de ordens abertas anteriormente pelo EA
   if(!Trade.IsOpened(Inp_MagicNum))
     {
      //--- Obtenção de dados para cálculo

      if(!GetIndValue())
         return;
      //--- Abertura de ordem se houver um sinal de compra

      if(BuySignal())
         Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
      //--- Abertura de ordem se houver um sinal de venda

      if(SellSignal())
         Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| Condições de compra                                               |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   return(avr_change[1]<1 && avr_change[0]>1 && fig_series[0]>0)?true:false;
  }
//+------------------------------------------------------------------+
//| Condições de venda                                               |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   return(avr_change[1]>1 && avr_change[0]<1 && fig_series[0]<0)?true:false;
  }
//+------------------------------------------------------------------+
//| Obtenção dos valores atuais dos indicadores                           |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,avr_change)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,fig_series)<=0
          )?false:true;
  }


Teste

Assim, na seção anterior, formalizamos 10 estratégias de tendência e escrevemos seu código. Para testar e comparar os resultados obtidos, é preciso escolher as mesmas condições e modos de teste.

  • Intervalo: 01.01.2016 — 01.03.2017 .
  • Par de moedas: EURUSD.
  • Modo de negociação: Sem latência. As estratégias apresentadas não estão relacionadas com as de alta frequência, de modo que o impacto do atraso é muito pequeno.
  • Teste: OHLC em М1. Os testes preliminares em ticks reais resultaram quase indistinguíveis deste regime.
  • Depósito inicial: 1000 USD.
  • Alavancagem: 1:500.
  • Servidor: MetaQuotes-Demo.
  • Cotações: 5 dígitos.

Praticamente todas as estratégias nas quais o Take-Profit/Stop-Loss é a condição de saída, e у 8 de 10 timeframes em execução é o 1H. Portanto, para eles, é possível tomar as mesmos alvos de lucro e de perda. Definimos o Take-Profit em 600 (cotações de 5 dígitos), Stop-Loss em 400.‌ Para maior clareza, além das condições especificadas acima, definimos, quanto ao teste, a pré-instalação dos parâmetros dos indicadores que são usados nas estratégias.

Teste de Estratégia №1 (Indicador ADXCloud com RSI de confirmação sob a forma de histograma).

Pré-instalação:

//--- Parâmetros do indicador RSI_Color

input int                  Inp_RSIPeriod=11;                            //RSI Period
input double               Inp_Overbuying=70;                           //Overuying zone
input double               Inp_Overselling=30;                          //Overselling zone
//--- Parâmetros do indicador ADX_Cloud

input int                  Inp_ADXPeriod=8;                             //ADX Period
input double               Inp_alpha1 = 0.25;                           //alpha1
input double               Inp_alpha2 = 0.25;                           //alpha2

Resultado do teste:


Fig.12. Resultados do teste da estratégia de tendência №1

Teste de Estratégia №2 (Indicador de tendência Standard Deviation sob a forma de histograma com confirmação do RVI).

Pré-instalação:‌

//--- Parâmetros do indicador ColorStDev

input int                  period = 12;                                  //Smoothing period StDev
input ENUM_MA_METHOD       MA_Method=MODE_EMA;                           //Histogram smoothing method
input ENUM_APPLIED_PRICE   applied_price=PRICE_CLOSE;                    //Applied price
input int                  MaxTrendLevel=90;                             //Maximum trend level
input int                  MiddLeTrendLevel=50;                          //Middle trend level
input int                  FlatLevel=20;                                 //Flat level
input Trend                TrendLevel=Maximum;                           //Used trend
//--- Parâmetros do indicador ColorZerolagRVI

input uint                 smoothing=15;                                 //Smoothing period RVI
input double               Factor1=0.05;                                 //Weight coef.1
input int                  RVI_period1=14;                               //RVI Period 1
input double               Factor2=0.10;                                 //Weight coef.2
input int                  RVI_period2=28;                               //RVI Period 2
input double               Factor3=0.16;                                 //Weight coef.3
input int                  RVI_period3=45;                               //RVI Period 3
input double               Factor4=0.26;                                 //Weight coef.4
input int                  RVI_period4=65;                               //RVI Period 4
input double               Factor5=0.43;                                 //Weight coef.5
input int                  RVI_period5=75;                               //RVI Period 5

Resultado do teste:

Fig.13. Resultados do teste da estratégia de tendência №2

Teste de Estratégia №3 (Interpretação de nuvem do AC de Bill Williams e Bears Power e Bulls Power combinados).

Pré-instalação:‌

//--- Parâmetros do indicador Bears_Bull_power

input Smooth_Method        MA_Method1=MODE_AMA;                         //Averaging method
input uint                 Length1=12;                                  //Averaging depth                  
input int                  Phase1=15;                                   //Averaging parameter
input Smooth_Method        MA_Method2=MODE_ParMA;                       //Smoothing period
input uint                 Length2=5;                                   //Smoothing depth
input int                  Phase2=15;                                   //Smoothing parameter
input Applied_price_       IPC=PRICE_WEIGHTED_;                         //Applied price
input int                  Shift=0;                                     //Shift
//--- Parâmetros do indicador CronexAC

input Smooth_Method        XMA_Method=MODE_SMMA_;                       //Smoothing Method
input uint                 FastPeriod=9;                                //Fast smoothing period
input uint                 SlowPeriod=21;                               //Slow smoothing period
input int                  XPhase=15;                                   //Smoothing parameter

Resultado do teste:

Fig.14. Resultados do teste da estratégia de tendência №3

Teste de Estratégia №4 (Centro de gravidade J. F. Ehlers confirmado pleo indicador de celeridade do preço).

Pré-instalação:‌

//--- Parâmetros do indicador CenterOfGravityOSMA

input uint                 Period_=9;                                   //Averaging period
input uint                 SmoothPeriod1=3;                             //Smoothing period1
input ENUM_MA_METHOD       MA_Method_1=MODE_SMA;                        //Averaging method1
input uint                 SmoothPeriod2=3;                             //Smoothing period2
input ENUM_MA_METHOD       MA_Method_2=MODE_SMA;                        //Averaging method2
input Applied_price_       AppliedPrice=PRICE_OPEN_;                    //Applied price
//--- Parâmetros do indicador Average Speed

input int                  Inp_Bars=1;                                  //Days
input ENUM_APPLIED_PRICE   Price=PRICE_CLOSE;                           //Applied price
input double               Trend_lev=2;                                 //Trend Level

Resultado do teste:

Fig.15. Resultados do teste da estratégia de tendência №4

Teste de Estratégia №5 (Indicador integrado Onda Binária).

Pré-instalação:

//--- Parâmetros do indicador Binary_Wave

input double               WeightMA    = 1.0;
input double               WeightMACD  = 1.0;
input double               WeightOsMA  = 1.0;
input double               WeightCCI   = 1.0;
input double               WeightMOM   = 1.0;
input double               WeightRSI   = 1.0;
input double               WeightADX   = 1.0;
//---- Moving Average

input int                  MAPeriod=10;
input ENUM_MA_METHOD       MAType=MODE_EMA;
input ENUM_APPLIED_PRICE   MAPrice=PRICE_CLOSE;
//---- MACD

input int                  FastMACD     = 12;
input int                  SlowMACD     = 26;
input int                  SignalMACD   = 9;
input ENUM_APPLIED_PRICE   PriceMACD=PRICE_CLOSE;
//---- OsMA

input int                  FastPeriod   = 12;
input int                  SlowPeriod   = 26;
input int                  SignalPeriod = 9;
input ENUM_APPLIED_PRICE   OsMAPrice=PRICE_CLOSE;
//---- CCI

input int                  CCIPeriod=10;
input ENUM_APPLIED_PRICE   CCIPrice=PRICE_MEDIAN;
//---- Momentum

input int                  MOMPeriod=14;
input ENUM_APPLIED_PRICE   MOMPrice=PRICE_CLOSE;
//---- RSI

input int                  RSIPeriod=14;
input ENUM_APPLIED_PRICE   RSIPrice=PRICE_CLOSE;
//---- ADX

input int                  ADXPeriod=10;

Resultado do teste:


Fig.16. Resultados do teste da estratégia de tendência №5

Teste de Estratégia №6 (Indicador integrado Weight Oscillator em conjunto com LeMan Objective).

Pré-instalação:

//--- Parâmetros do indicador LeMan Objective

input int                  Sample=20;
input int                  Quartile_1 = 25;
input int                  Quartile_2 = 50;
input int                  Quartile_3 = 75;
input int                  Shift=0;
//--- Parâmetros do indicador Weight Oscillator
//---- RSI
input double               RSIWeight=1.0;
input uint                 RSIPeriod=14;
input ENUM_APPLIED_PRICE   RSIPrice=PRICE_CLOSE;
//---- MFI
input double               MFIWeight=1.0;
input uint                 MFIPeriod=14;
input ENUM_APPLIED_VOLUME  MFIVolumeType=VOLUME_TICK;
//---- WPR
input double               WPRWeight=1.0;
input uint                 WPRPeriod=12;
//---- DeMarker
input double               DeMarkerWeight=1.0;
input uint                 DeMarkerPeriod=10;
//----
input Smooth_Method        bMA_Method=MODE_SMMA_;
input uint                 bLength=5;
input int                  bPhase=100;

Resultado do teste:


Fig.17. Resultados do teste da estratégia de tendência №6

Teste de Estratégia №7 (Donchian Channel em conjunto com modificação do MACD, em que a série de preço é substituída pelos valores de Williams.).

Pré-instalação:

input string               Inp_EaComment="Strategy #7";                 //EA Comment
input double               Inp_Lot=0.01;                                //Lot
input MarginMode           Inp_MMode=LOT;                               //MM
input int                  Inp_MagicNum=1111;                           //Magic number
input int                  Inp_StopLoss=400;                            //Stop Loss(points)
input int                  Inp_TakeProfit=600;                          //Take Profit(points)
input int                  Inp_Deviation = 20;                          //Deviation(points)
//--- Parâmetros do indicador Donchian Channel System

input uint                 DonchianPeriod=12;                           //Period of Averaging
input Applied_Extrem       Extremes=HIGH_LOW_CLOSE;                     //Type of Extremum

//--- Parâmetros do indicador CronexAO

input Smooth_Method        XMA_Method=MODE_ParMA;                        //Method of Averaging
input uint                 FastPeriod=14;                               //Period of Fast averaging
input uint                 SlowPeriod=25;                               //Period of Flow averaging
input int                  XPhase=15;                                   //Smoothing parameter

Resultado do teste:


Fig.18. Resultados do teste da estratégia de tendência №7


Teste de Estratégia №8 (Oscilador cíclico Schaff com confirmação sob a forma de três níveis Tirone).

Pré-instalação:

input string               Inp_EaComment="Strategy #8";                 //EA Comment
input double               Inp_Lot=0.01;                                //Lot
input MarginMode           Inp_MMode=LOT;                               //MM
input int                  Inp_MagicNum=1111;                           //Magic number
input int                  Inp_StopLoss=400;                            //Stop Loss(points)
input int                  Inp_TakeProfit=600;                          //Take Profit(points)
input int                  Inp_Deviation = 20;                          //Deviation(points)

input double               Overbuying=90;                               //Overbuying zone
input double               Overselling=15;                              //Overselling zone
//--- Parâmetros do indicador Schaff Trend Cycle

input Smooth_Method        MA_SMethod=MODE_SMMA_;                        //Histogram smoothing method
input int                  Fast_XMA = 20;                               //Fast moving average period
input int                  Slow_XMA = 30;                               //Slow moving average period
input int                  SmPhase= 100;                                //Moving averages smoothing parameter
input Applied_price_       AppliedPrice=PRICE_CLOSE_;                   //Price constant
input int                  Cycle=10;                                    //Stochastic oscillator period

//--- Parâmetros do indicador Tirone Levels

input int                  TirPeriod=13;                                //Period of the indicator
input int                  Shift=0;                                     //Horizontal shift of the indicator in bars

Resultado do teste:


Fig.19. Resultados do teste da estratégia de tendência №8

Teste de Estratégia №9 (Canal Keltner como um histograma e indicador iTrend na forma de nuvem).

Pré-instalação:

input string               Inp_EaComment="Strategy #9";                 //EA Comment
input double               Inp_Lot=0.01;                                //Lot
input MarginMode           Inp_MMode=LOT;                               //MM
input int                  Inp_MagicNum=1111;                           //Magic number
input int                  Inp_StopLoss=400;                            //Stop Loss(points)
input int                  Inp_TakeProfit=600;                          //Take Profit(points)
input int                  Inp_Deviation = 20;                          //Deviation(points)

input uint                 BuyLevel=50;                                 //Overbuying zone
input double               SellLevel=-50;                               //Overselling zone
//--- Parâmetros do indicador i-KlPrice

input Smooth_Method        MA_Method1=MODE_ParMA;                       //smoothing method of moving average
input uint                 Length1=100;                                 //smoothing depth of moving average                  
input int                  Phase1=15;                                   //moving average smoothing parameter

input Smooth_Method        MA_Method2=MODE_SMMA_;                        //candles size smoothing method
input uint                 Length2=20;                                  //smoothing depth of candles size 
input int                  Phase2=100;                                  //candles size smoothing parameter

input double               Deviation=2.0;                               //channel expansion ratio
input uint                 Smooth=20;                                   //indicator smoothing period

input Applied_price_       IPC=PRICE_TYPICAL_;                          //price constant
input int                  Shift=0;                                     //horizontal shift of the indicator in bars

//--- Parâmetros do indicador iTrend

input Applied_price_       Price_Type=PRICE_TYPICAL_;
//--- Moving Average parameters
input uint                 MAPeriod=14;
input ENUM_MA_METHOD        MAType=MODE_EMA;
input ENUM_APPLIED_PRICE     MAPrice=PRICE_CLOSE;
//--- Bollinger parameters
input uint                 BBPeriod=14;
input double               deviation_=2.0;
input ENUM_APPLIED_PRICE    BBPrice=PRICE_CLOSE;
input Mode                BBMode=Mode_1;

Resultado do teste:


Fig.20. Resultados do teste da estratégia de tendência №9

Teste de Estratégia №10 (Impulso de preço Average Change e leque de médias móveis FigurelliSeries.).

Pré-instalação:

//--- Parâmetros do indicador Average Change
input Smooth_Method        MA_Method1=MODE_SMMA_;                       //smoothing method of moving average
input int                  Length1=12;                                  //smoothing depth of moving average                    
input int                  Phase1=15;                                   //moving average smoothing parameter
input Applied_price_       IPC1=PRICE_CLOSE_;                           //moving average price constant

input Smooth_Method        MA_Method2=MODE_EMA_;                        //indicator smoothing method
input int                  Length2 = 5;                                 //indicator smoothing depth
input int                  Phase2=100;                                  //indicator smoothing parameter
input Applied_price_       IPC2=PRICE_CLOSE_;                           //price constant for smoothing

input double               Pow=5;                                       //power
input int                  Shift=0;                                     //horizontal shift of the indicator in bars

//--- Parâmetros do indicador
input uint                 StartPeriod=6;                               //initial period
input uint                 Step_=6;                                     //periods calculation step
input uint                 Total=36;                                    //number of Moving Averages
input ENUM_MA_METHOD        MAType=MODE_EMA;                            //Moving Averages smoothing type
input ENUM_APPLIED_PRICE     MAPrice=PRICE_CLOSE;                       //price timeseries of Moving Averages
input int                  Shift1=0;                                    //Horizontal shift of the indicator in bars  

Resultado do teste:


Fig.21. Resultados do teste da estratégia de tendência №10


Conclusões

O teste e a otimização das estratégias de negociação apresentadas mostraram o seguinte.

  • Na maioria das estratégias, o lucro total foi obtido ao negociar nos movimentos unidirecionais quer fortes quer prolongados.
  • A perda total e os trechos caraterísticos com algumas operações não-rentáveis seguidas foram obtidos ao negociar na fase de correção (plano).
  • Além disso, a causa das perdas em algumas estratégias foi o fato de os parâmetros de Take-Profit e Stop-Loss se tornarem imutáveis.
  • Em alguns casos, a definição da tendência demora muito, por isso foi necessário alterar o timeframe.
Podemos concluir que, durante o desenvolvimento e teste de estratégias de negociação, foram confirmadas suas vantagens e desvantagens. O bom trabalho nas zonas fortes e prolongadas do mercado é compensado pelo insucesso na exibição de resultados na fase de correção ou no movimento lateral. Portanto, a coisa mais importante que descobrimos é que não há grande diferença em como determinar a tendência atual. Vantagens e desvantagens de todas as estratégias de negociação serão as mesmas.

Conclusão

Abaixo está uma tabela de resumo com os nomes dos Expert Advisors desenvolvidos e usados no artigo, bem como as classes auxiliares e a lista de indicadores que foram utilizados nas atuais estratégias de tendência. No final do artigo é anexado um arquivo com todos os ficheiros listados, classificados em pastas. Portanto, para uma correta operação é suficiente colocar a pasta MQL5 na raiz do terminal.

Programas utilizados no artigo:

#
 Nome
Tipo
Descrição
1
Strategy_1.mq5
Expert Advisor
 Estratégia №1. Indicador ADXCloud com RSI de confirmação sob a forma de histograma. 
2
Strategy_2.mql5
Expert Advisor
 Estratégia №2. Indicador de tendência Standart Deviation sob a forma de histograma com confirmação do RVI.
3
Strategy_3.mq5
Expert Advisor  Estratégia №3. Interpretação de nuvem do AC de Bill Williams e Bears Power e Bulls Power combinados. 
4
Strategy_4.mq5
Expert Advisor
 Estratégia №4. Centro de gravidade J. F. Ehlers confirmado pleo indicador de celeridade do preço.
5
Strategy_5.mq5 Expert Advisor  Estratégia №5. Indicador integrado Onda Binária.
6
Strategy_6.mq5
Expert Advisor
 Estratégia №6. Indicador integrado Weight Oscillator em conjunto com LeMan Objective.
7 Strategy_7.mq5 
Expert Advisor
 Estratégia №7. Donchian Channelconfirmado por um MACD em que a série de preço é substituída pelos valores do AO de Bill Williams.
 8  Strategy_8.mq5 Expert Advisor  Estratégia №8. Oscilador cíclico Schaff com confirmação sob a forma de três níveis Tirone.
 9 Strategy_9.mq5 Expert Advisor  Estratégia №9. Canal Keltner como um histograma e indicador iTrend na forma de nuvem.
 10 Strategy_10.mq5 Expert Advisor  Estratégia №10. Impulso de preço Average Change e leque de médias móveis FigurelliSeries.
 11 TradeFunctions.mqh Biblioteca  Classe de funções de negociação.
 12 smoothalgorithms.mqh  Biblioteca  Classes com algoritmos de suavização usadas no indicador.
 13 adxcloud.mq5 Indicador  Usa-se na Estratégia №1.
 14 rsi_сolor.mq5 Indicador  Usa-se na Estratégia №1.
 15 colorstddev.mq5 Indicador  Usa-se na Estratégia №2.
 16 colorzerolagrvi.mq5  Indicador  Usa-se na Estratégia №2.
 17 Bear_Bulls_Power.mq5 Indicador  Usa-se na Estratégia №3.
 18 cronexao.mq5 Indicador  Usa-se na Estratégia №3.
 19 centerofgravityosma.mq5 Indicador  Usa-se na Estratégia №4.
 20 average_speed.mq5 Indicador  Usa-se na Estratégia №4.
 21 binarywave.mq5 Indicador  Usa-se na Estratégia №5.
 22 objective.mq5 Indicador  Usa-se na Estratégia №6.
 23 WeightOscillator.mq5 Indicador   Usa-se na Estratégia №6.
 24 donchian_channels_system.mq5 Indicador  Usa-se na Estratégia №7
 25 cronexao.mq5 Indicador  Usa-se na Estratégia №7
 26 schafftrendcycle.mq5 Indicador  Usa-se na Estratégia №8
 27 tirone_levels_x3.mq5 Indicador  Usa-se na Estratégia №8
 28 i-klprice.mq5 Indicador  Usa-se na Estratégia №9
 29 i_trend.mq5 Indicador  Usa-se na Estratégia №9
 30 averagechange.mq5 Indicador  Usa-se na Estratégia №10
 31 figurelliseries.mq5 Indicador  Usa-se na Estratégia №10