![Análise comparativa de 10 estratégias de tendência](https://c.mql5.com/i/articles/overlay.png)
Análise comparativa de 10 estratégias de tendência
Conteúdo
- Introdução
- Abordagem do problema ao criar a estratégia de tendência
- Estratégias de tendência
- Estratégia №1. Indicador ADXCloud com RSI de confirmação sob a forma de histograma.
- Estratégia №2. Indicador de tendência Standard Deviation sob a forma de histograma com confirmação do RVI.
- Estratégia №3. Interpretação de nuvem do AC de Bill Williams e indicador composto Bears Power e Bulls Power.
- Estratégia №4. Centro de gravidade J. F. Ehlers confirmado pleo indicador de celeridade do preço.
- Estratégia №5. Indicador integrado Onda Binária.
- Estratégia №6. Indicador integrado Weight Oscillator em conjunto com LeMan Objective.
- Estratégia №7. Donchian Channel em conjunto com o MACD, em que a série de preço é substituída pelos valores de Williams.
- Estratégia №8. Oscilador cíclico Schaff com confirmação de acordo com três níveis Tirone.
- Estratégia №9. Canal Keltner como um histograma e indicador iTrend na forma de nuvem.
- Estratégia №10. Impulso de preço Average Change e leque de médias móveis FigurelliSeries.
- Teste
- Conclusões
- Conclusão
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.
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 |
Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/3074
![Interfaces gráficas X: Ordenação, reconstrução da tabela e controles nas células (build 11)](https://c.mql5.com/2/26/MQL5-avatar-X-tableSort-001.png)
![Os Expert Advisors prontos a partir do Assistente MQL5 funcionam no MetaTrader 4](https://c.mql5.com/2/26/MQL5_expert_in_MT4.png)
![Negociação usando canais Donchian](https://c.mql5.com/2/26/MQL5-avatar-Donchian-002.png)
![Receitas MQL5 - sinais de negociação de pivô](https://c.mql5.com/2/26/MQL5_recipePivotePoint.png)
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Trabalho fantástico! Muito obrigado pela contribuição, parabéns!