Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Twitter!
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 em três Moving Averages - expert para MetaTrader 5

Visualizações:
1928
Avaliação:
(26)
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 Assistente MQL5 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 em três Moving Averages. A estratégia é chamada "Sinais baseados em três EMA". Para determinar a tendência, são usadas três "exponentially smoothed moving averages": FastEMA, MediumEMA e SlowEMA.

Sinais de Negociação:

  • Sinal de compra: FastEMA>MediumEMA>SlowEMA (tendência crescente).
  • Sinal de venda: FastEMA<MediumEMA<SlowEMA (tendência decrescente).

Figura 1. Sinais de negociação baseados em três Moving Averages

Figura 1. Sinais de negociação baseados em três Moving Averages

Sinais de Negociação

A estratégia de negociação será implementada na classe CSignal3EMA na qual possui alguns métodos protegidos para simplificar o acesso aos valores das três moving averages (Fast, Medium, Slow):

double  FastEMA(int ind)      // retorna o valor da Fast EMA da barra
double  MediumEMA(int ind)    // retorna o valor da Medium EMA da barra
double  SlowEMA(int ind)      // retorna o valor da Slow EMA da barra
O valor do indicador da barra 0 (incompleta) pode mudar, por isso é necessário executar a verificação das condições comerciais usando a barra finalizada (formada) de dados.

1. Abrindo posição de compra

A tendência de crescimento é determinada pela seguinte condição: FastEMA>MediumEMA>SlowEMA:

  • FastEMA(1)>MediumEMA(1): Fast EMA é maior do que a Medium EMA (última barra concluída);
  • MediumEMA(2)>SlowEMA(1): Medium EMA é maior do que a Slow EMA (última barra concluída);
//+------------------------------------------------------------------+
//| Checks conditions to open long position (buy)                    |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- checking for upward trend (on the last completed bar): FastEMA(1)>MediumEMA(1)>SlowEMA(1)
    return(FastEMA(1)>medium && medium>SlowEMA(1));
  }


2. Fechando posição de compra

A tendência de queda é determinada pela seguinte condição: FastEMA<MediumEMA<SlowEMA:

  • FastEMA(1)<MediumEMA(1): Fast EMA é menor do que a Medium EMA (última barra concluída);
  • MediumEMA(2)<SlowEMA(1): Medium EMA é menor do que a Slow EMA (última barra concluída);
//+------------------------------------------------------------------+
//| Checks conditions to close long position                         |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseLong(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- checking for downward trend (on the last completed bar): FastEMA(1)<MediumEMA(1)<SlowEMA(1)
   return(FastEMA(1)<medium && medium<SlowEMA(1));
  }
Você pode melhorar o fechamento da posição de compra: não é necessário esperar a tendência de queda, pois você pode fechar as posições de compra quando estiver plano, o que pode ser determinado pelas condições seguintes: FastEMA<MediumEMA>SlowEMA.


3. Abrindo posição de venda

//+------------------------------------------------------------------+
//| Checks conditions to open short position (sell)                  |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- checking for downward trend (on the last completed bar): FastEMA(1)<MediumEMA(1)<SlowEMA(1)
   return(FastEMA(1)<medium && medium<SlowEMA(1));

  }

4. Fechando posição de venda

//+------------------------------------------------------------------+
//| Checks conditions to close short position                        |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseShort(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- checking for upward trend (on the last completed bar): FastEMA(1)>MediumEMA(1)>SlowEMA(1)
   return(FastEMA(1)>medium && medium>SlowEMA(1));
  }

Você pode melhorar o fechamento da posição de venda: não é necessário esperar a tendência de crescimento, pois você pode fechar as posições de venda quando estiver plano, o que pode ser determinado pelas condições seguintes: FastEMA>MediumEMA<SlowEMA.


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 three EMA" na opção "Creating Ready-Made Expert Advisors" do MQL5 Wizard:

Figura 2. Escolha "Signals based on three EMA" no MQL5 Wizard

Figura 2. Escolha "Signals based on three EMA" 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,  FastPeriod=5, MediumPeriod=12, SlowPeriod=24, 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 nas três EMAs

Figura 3. Resultados históricos do backtesting do Expert Advisor, com base nas três EMAs

Anexos: The Signal3EMA.mqh com a classe CSignal3EMA localizados na pasta terminal_data_folder\MQL5\Include\Expert\Signal.

O arquivo threeema.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/250

DXMA DXMA

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

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

Os Sinais de Negociação Baseados no cruzamento de Preços com o Indicador Moving Average serão utilizados aqui. O código do Expert Advisor com base nesta estratégia pode ser gerado automaticamente usando o Assistente MQL5.

Assistente MQL5 - Sinais de Negociação Baseados no cruzamento de Preços com o Indicador Moving Averag Assistente MQL5 - Sinais de Negociação Baseados no cruzamento de Preços com o Indicador Moving Averag

Os Sinais de Negociação Baseados no cruzamento de Preços com o Indicador Moving Average (CSignalMA a partir da Biblioteca Padrão MQL5) serão utilizados aqui. O código do Expert Advisor com base nesta estratégia pode ser gerado automaticamente usando o Assistente MQL5.

MA2CCI MA2CCI

Expert Advisor que opera com base em duas МАs e CCI