Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5

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:
- 4312
- Avaliação:
- 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
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
1. Abrindo posição de compra
Condições para abrir uma posição de compra:
- StateEMA(0)<0 и StateEMA(1)>0: moving average aumenta na barra atual e na última completada;
- StateClose(1)>0: o preço de fechamento da última barra concluída é maior do que a moving average;
- 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);
- 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:
- StateEMA(0)<0 и StateEMA(1)<0: moving average diminui na barra atual e na última completada;
- StateClose(1)<0: o preço de fechamento da última barra concluída é menor do que a moving average;
- 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);
- 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
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
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

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 para uma negociação rápida.

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

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.