Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Telegram!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Experts

Assistente MQL5 - Sinais de Negociação Baseados no cruzamento de Preços com o Indicador Moving Average, confirmados por ADX - expert para MetaTrader 5

Visualizações:
4045
Avaliação:
(30)
Publicado:
2014.01.15 08:31
Atualizado:
2016.11.22 07:33
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

O MQL5 Wizard permite criar o código de Expert Advisors automaticamente. Veja Criando Expert Advisors em MQL5 Wizard prontos para uso para mais detalhes.

Aqui vamos considerar uma estratégia baseada no cruzamento de preços com o indicador Moving Average, confirmados pelo indicador ADX. A estratégia é chamada "Sinais baseados no cruzamento de preços com MA confirmados por ADX" (ao criar EA automaticamente no MQL5 Wizard).

Os Sinais de Negociação:

  • Compra: o preço de fechamento da última barra concluída é maior do que a moving average, a moving average aumenta na barra atual e na última completa.
  • Venda: o preço de fechamento da última barra concluída é menor do que a moving average, a moving average diminui na barra atual e na última completa.
  • Para filtrar um sinal falso, verifica-se o poder de tendência (ADX>ADXmin) e a direção da tendência usando os índices de movimento direcional (DI+ e DI-).

A estratégia será implementada na classe CSignalADX_MA.

Figura 1. Sinais de Negociação Baseados no cruzamento de Preços com o Indicador Moving Average, confirmados por ADX

Figura 1. Sinais de Negociação Baseados no cruzamento de Preços com o Indicador Moving Average, confirmados por ADX

Sinais de Negociação

A estratégia de negociação será implementada na classe CSignalADX_MA, na qual possui alguns métodos protegidos para simplificar o acesso em indicadores e valores de preço:

double   PlusADX(int ind)     // retorna o valor da linha DI+ da barra
double   MainADX(int ind)     // retorna o valor da linha principal da barra
double   MinusADX(int ind)    // retorna o valor da linha DI- da barra
double   EMA(int ind)         // retorna o valor da moving average da barra
double   Close(int ind)       // retorna o valor de fechamento da barra
double   StateADX(int ind)    // retorna a diferença entre as linhas DI+ e DI-
double   StateEMA(int ind)    // retorna positivo se EMA aumenta ou negativo se diminui
double   StateClose(int ind)  // retorna a diferença entre o preço de fechamento e a média móvel
A característica desta implementação é a verificação adicional da presença de tendência (utilizando o Indicador Directional Movement). Isso permite filtrar sinais falsos e verificar as condições comerciais com os valores da barra atual (incompleta).


1. Abrindo posição de compra

Condições para abrir uma posição de compra:

  1. StateEMA(0)<0 и StateEMA(1)>0: moving average aumenta na barra atual e na última completada;
  2. StateClose(1)>0: o preço de fechamento da última barra concluída é maior do que a moving average;
  3. MainADX(0)>minimum_ADX: o valor ADX da barra atual é maior que o valor mínimo especificado (para verificar a presença de tendência);
  4. StateADX(0)>0: DI+ é maior que DI- na barra atual.
//+------------------------------------------------------------------+
//| Checks conditions to open long position (buy)                    |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
//--- condition 1: moving average increases on the current and last completed bars 
   bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0);
//--- condition 2: closing price of the last completed bar is higher than moving average 
   bool Buy_Condition_2=(StateClose(1)>0);
//--- condition 3: the ADX value of the current bar is greater than specified minimal value (trend threshold) 
   bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condition 4: the value of DI+ is greater than DI- of the current bar
    bool Buy_Condition_4=(StateADX(0)>0);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- checking of all conditions
   return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }


2. Fechando posição de compra

Condições para fechar uma posição de compra:

  1. StateEMA(0)<0 и StateEMA(1)<0: moving average diminui na barra atual e na última completada;
  2. StateClose(1)<0: o preço de fechamento da última barra concluída é menor do que a moving average;
  3. MainADX(0)>minimum_ADX: o valor ADX da barra atual é maior que o valor mínimo especificado (para verificar a presença de tendência);
  4. StateADX(0)<0: DI- é maior que DI+ na barra atual..
//+------------------------------------------------------------------+
//| Checks conditions to close long position                         |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckCloseLong(double& price)
  {
//--- condition 1: the moving average decreases on the current and last completed bars 
   bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0);
//--- condition 2: closing price of the completed bar is lower than moving average 
   bool Sell_Condition_2=(StateClose(1)<0);
//--- condition 3: the ADX value of the current bar is greater than specified minimal value (trend threshold) 
   bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condition 4: the value of DI- is greater than DI- of the current bar
   bool Sell_Condition_4=(StateADX(0)<0);
//---
   price=0.0;
//--- checking of all conditions
   return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4);
  }


3. Abrindo posição de venda

As condições para abrir uma posição de venda são as mesmas condições para fechar uma posição de compra.

//+------------------------------------------------------------------+
//| Checks conditions to open short position (sell)                  |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
//--- condition 1: the moving average decreases on the current and last completed bars 
   bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0);
//--- condition 2: closing price of the completed bar is lower than moving average 
   bool Sell_Condition_2=(StateClose(1)<0);
//--- condition 3: the ADX value of the current bar is greater than specified minimal value (trend threshold) 
   bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condition 4: the value of DI- is greater than DI- of the current bar
   bool Sell_Condition_4=(StateADX(0)<0);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- checking of all conditions
   return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4);
  }


4. Fechando posição de venda

As condições para fechar uma posição de venda são as mesmas condições para abrir uma posição de compra.

//+------------------------------------------------------------------+
//| Checks conditions to close short position                        |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckCloseShort(double& price)
  {
//--- condition 1: moving average increases on the current and last completed bars
   bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0);
//--- condition 2: closing price of the last completed bar is higher than moving average 
   bool Buy_Condition_2=(StateClose(1)>0);
//--- condition 3: the ADX value of the current bar is greater than specified minimal value (trend threshold)
    bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condition 4: the value of DI+ is greater than DI- of the current bar
   bool Buy_Condition_4=(StateADX(0)>0);
//---
   price=0.0;
//--- checking of all conditions
  return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }

Criando um Expert Advisor usando o MQL5 Wizard

Para criar um robô de negociação com base na estratégia que você quer, você precisa escolher as propriedades dos sinais como "Signals based on price crossover with MA confirmed by ADX" na opção "Creating Ready-Made Expert Advisors" do MQL5 Wizard:

Figura 2. Escolha "Signals based on price crossover with MA confirmed by ADX" no MQL5 Wizard

Figura 2. Escolha "Signals based on price crossover with MA confirmed by ADX" no MQL5 Wizard

O próximo passo você precisa especificar o algorítimo trailing stop e o sistema de gestão de dinheiro e riscos. O código do Expert Advisor será criado automaticamente. Você pode compilar e testar no Strategy Tester do terminal cliente MetaTrader 5.


Testando os Resultados

Vamos considerar o backtesting do Expert Advisor com dados históricos (EURUSD H1, período customizado: 1.1.2010-05.01.2011,  PeriodADX=33, MinimumADX=22, PeriodMA=39, StopLoss=400, TakeProfit=900).

Na criação do Expert Advisor usamos um volume fixo(Negociação Fixa do Lote, 0.1), algorítimo Trailing Stop não utilizado (Trailing não utilizado).

Figura 3. Resultados históricos do backtesting do Expert Advisor, com base no cruzamento de preços com MA, confirmados por ADX

Figura 3. Resultados históricos do backtesting do Expert Advisor, com base no cruzamento de preços com MA, confirmados por ADX


Anexos: SignalADX-MA.mqh com a classe CSignalADX_MA localizados na pasta terminal_data_folder\MQL5\Include\Expert\Signal.

O arquivo ma_crossover_adx.mq5 contém o código do Expert Advisor criado, usando o MQL5 Wizard.


Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/258

SelfGenerator SelfGenerator

Este script gera um arquivo com o seu próprio código fonte (solução do programa clássico em MQL5). Ele pode ser útil para estudar programação e os algoritmos.

Painel de Negociação Rápida Painel de Negociação Rápida

Painel de Negociação Rápida - painel para uma negociação rápida.

DXMA DXMA

Indicador de Média Móvel melhorado com DMI.

Assistente MQL5 - Sinais de negociação baseados em três Moving Averages Assistente MQL5 - Sinais de negociação baseados em três Moving Averages

Os Sinais de Negociação baseados em três Moving Averages serão utilizados aqui. O código do Expert Advisor com base nesta estratégia pode ser gerado automaticamente usando o Assistente MQL5.