Técnicas do MQL5 Wizard que você deve conhecer (Parte 50): Awesome Oscillator
Introdução
O Awesome Oscillator é outro indicador que foi desenvolvido pelo lendário investidor Bill Williams, além do Alligator que consideramos no último artigo de padrão de indicadores. Em princípio, ele foi projetado para medir o momentum do mercado e ajudar a identificar potenciais mudanças nas tendências predominantes. O Awesome Oscillator (AO) é baseado na diferença entre uma média móvel simples (SMA) de 34 períodos e uma SMA de 5 períodos, onde ambas são aplicadas ao preço mediano. O preço mediano é dado por:
(Preço Alto + Preço Baixo) / 2
O AO é exibido como um histograma oscilante, acima e abaixo da linha zero, sendo que a linha zero serve como marcador de ausência de momentum, com um cruzamento acima ou abaixo sugerindo uma possível mudança de tendência. As barras verdes no histograma representam aumento de momentum altista em relação à barra de preço anterior, enquanto as barras vermelhas marcam aumento de momentum baixista também em relação à barra anterior. Além disso, como uma regra geral de visão geral, quando as barras do histograma estão acima da linha zero isso frequentemente sugere que uma tendência altista é predominante, enquanto se as mesmas barras do histograma (novamente independentemente da cor em si) estiverem espelhadas do outro lado da linha zero isso implica momentum baixista predominante.
Por que o nome “Awesome”? Bem, não há uma resposta concisa, ou uma fonte autoritativa para direcionar a questão; no entanto, argumenta-se que o AO simplifica cálculos complicados de momentum em um indicador visual simples. Ao ter um foco duplo em SMAs de ritmo rápido e de “longo prazo”, ele ajuda os traders a obterem uma noção relativa tanto da dinâmica de curto quanto de longo prazo do mercado. É altamente versátil, funcionando bem em estratégias de acompanhamento de tendência e de reversão. Suas aplicações práticas estão principalmente em ajudar operações a se alinharem com o momentum de mercado prevalente. Pode fornecer potenciais pontos de entrada e saída, como veremos abaixo com uma variedade de padrões de sinal, e também pode ser útil em análises de divergência, o que também exploramos nos padrões de sinal que consideramos a seguir.
Apesar de seus muitos padrões de sinal e potenciais usos, também possui algumas limitações inerentes. Como muitos osciladores, o AO pode produzir sinais falsos em mercados laterais ou voláteis — característica que infelizmente significa que pode funcionar melhor quando combinado com outros indicadores, a fim de se ter uma estratégia mais ampla e abrangente.
Com essa rápida introdução, em conformidade com nossa tradição, vamos agora considerar alguns dos padrões do AO. Para este artigo, estamos analisando 9 padrões diferentes, indexados de 0 a 8. Nós, como sempre, vamos observar e testar cada padrão individualmente, antes de concluir com um teste de múltiplos padrões, que eu já argumentei contra aplicar em ambientes de conta real, a menos que o trader esteja muito certo da ponderação relativa dos padrões com base em sua própria experiência de uso. Para testar um padrão de cada vez, precisamos atribuir o parâmetro de entrada m_inputs ou “Patterns Used Bitmap” a um índice específico. Se quisermos testar apenas o padrão 0, este índice será 2 elevado à potência 0. Se for o padrão 4, o índice será 2 elevado à potência 4; e assim por diante.
O código anexado deve ser montado pelo assistente MQL5 e, como tal, está em um formato que torna essa montagem direta. Há guias aqui e aqui sobre como fazer isso para leitores iniciantes. Estas séries tratam de explorar/aproveitar as vantagens proporcionadas por este assistente MQL5, dentre as quais se destaca a rapidez em testar e prototipar novas ideias. A necessidade de codificar tudo do zero é um benefício óbvio, mas o que pode passar despercebido é a plataforma padrão de testes que ele apresenta ao avaliar múltiplas ideias, o que pode ser crucial para obter uma noção do que realmente importa para a própria estratégia e abordagem de mercado. Vamos começar.
Cruzamento da Linha Zero
Nosso primeiro padrão no índice 0 é provavelmente o mais comum para este indicador, que é o cruzamento da linha zero. Por definição, a linha zero no AO representa um estado de momentum neutro, significando que o cruzamento do histograma acima ou abaixo desta linha implica uma mudança no momentum. É direto: um cruzamento altista é marcado quando o AO cruza de baixo para cima a linha zero, apresentando oportunidade de compra; enquanto um cruzamento baixista ocorre quando o AO cruza de cima para baixo a linha zero. Implementamos isso em MQL5 da seguinte forma:
//+------------------------------------------------------------------+ //| Check for Pattern 0. | //+------------------------------------------------------------------+ bool CSignalAwesome::IsPattern_0(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && AO(X() + 1) < 0.0 && AO(X()) > 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && AO(X() + 1) > 0.0 && AO(X()) < 0.0) { return(true); } return(false); }
Pontos-chave deste padrão que valem ênfase são que os cruzamentos da linha zero representam uma mudança no momentum de baixista para altista ou vice-versa, dependendo da direção do cruzamento. Isso pode atuar como um indicador precoce de mudanças de tendência para o trader. Esse último ponto também leva à necessidade de confirmar os cruzamentos desta linha por indicadores alternativos, como linhas de tendência etc. As barras do histograma deste oscilador também possuem sua altura e inclinação em relação à linha zero como indicador da força do momentum, sendo que barras mais altas indicam momentum mais forte — o que significa que cruzamentos graduais (ou com barras de menor tamanho) frequentemente indicam sinais mais fracos que cruzamentos com barras mais altas.
Como sempre, o contexto importa, portanto cruzamentos graduais em um ambiente altista podem não ser necessariamente um sinal fraco da mesma forma que cruzamentos com histogramas grandes em um mercado lateral podem não indicar um sinal forte por si só. Este oscilador pode servir como guia para um sinal de entrada e essa é nossa aplicação principal neste artigo. Contudo, como usamos limites de condição de compra e venda tanto para abertura quanto para fechamento, as classes de sinais de Expert Advisors montados pelo assistente também exploram o potencial de saída de qualquer sinal aplicado/selecionado.
As vantagens básicas do padrão-0 são: facilidade de interpretação, escalabilidade (pois este oscilador pode ser anexado a múltiplos timeframes, desde intradiários até gráficos de longo prazo) e pode atuar como alerta precoce para potenciais reversões de tendência. Suas desvantagens são: natureza atrasada, já que se baseia em médias móveis e o sinal pode atrasar em mercados de rápida movimentação. Além disso, sinais falsos podem ser comuns em mercados em consolidação ou em correções menores dentro de uma tendência prevalente. Por fim, como já mencionado, a confirmação de seus sinais é uma boa prática e isso significa que não é um sinal muito forte, ao menos de forma independente. Resultados de teste com configurações de entrada de uma curta otimização com GBP JPY para o ano de 2022 no timeframe de 4 horas são apresentados abaixo:

Sinal Twin Peaks
Nosso segundo padrão, padrão-1, é o sinal de “twin-peaks” (picos gêmeos) e, embora seja relativamente simples de interpretar no trading manual, sua implementação em trading automatizado ou como sinal customizado é um pouco mais complexa. Definição: Twin Peaks ocorrem quando dois picos se formam do mesmo lado da linha zero — acima para baixista ou abaixo para altista — sendo que o segundo pico fica mais próximo da linha zero. Uma regra fundamental do padrão-1 é que a linha zero não deve ter sido rompida entre os dois picos.
Nosso sinal altista (bullish twin-peaks) ocorre quando ambos os picos estão abaixo da linha zero, com o pico mais recente mais próximo da linha zero. Por outro lado, os picos baixistas ocorrem quando ambos estão acima da linha zero, com o pico mais recente mais próximo da linha limite. Para este padrão, como descrito, a altura do histograma entre os picos precisa diminuir, refletindo perda de momentum na tendência anterior (a tendência prestes a ser revertida). A linha zero também funciona como limite, de modo que um cruzamento antes da formação dos dois picos invalida o sinal. Além disso, se os picos estiverem muito próximos, o sinal também é invalidado. Nossa implementação não verifica este último critério, mas os leitores podem implementá-lo de forma independente. Nosso código-fonte é apresentado abaixo:
//+------------------------------------------------------------------+ //| Check for Pattern 1. | //+------------------------------------------------------------------+ bool CSignalAwesome::IsPattern_1(ENUM_POSITION_TYPE T) { bool _1 = false; int _i = X(); if(T == POSITION_TYPE_BUY && AO(_i) < 0.0 && LowerColor(_i) == clrGreen && LowerColor(_i + 1) == clrRed) { while(AO(_i) < 0.0) { _i++; if(LowerColor(_i) == clrGreen && LowerColor(_i + 1) == clrRed) { if(fabs(AO(_i)) < fabs(AO(X()))) { _1 = true; } break; } if(AO(_i) >= 0.0) { break; } } } else if(T == POSITION_TYPE_SELL && AO(_i) > 0.0 && UpperColor(_i) == clrRed && UpperColor(_i + 1) == clrGreen) { while(AO(_i) > 0.0) { _i++; if(UpperColor(_i) == clrRed && UpperColor(_i + 1) == clrGreen) { if(fabs(AO(_i)) < fabs(AO(X()))) { _1 = true; } break; } if(AO(_i) <= 0.0) { break; } } } return(_1); }
O padrão-1 é significativo porque frequentemente aponta divergência de momentum em relação à ação do preço, funcionando como alerta precoce de reversões. A habilidade de capturar reversões é provavelmente o ponto forte do padrão-1. Os pontos exatos de entrada com estes padrões Twin Peaks podem ser precisamente após a formação do segundo pico (mais próximo da linha zero), e foi isso que implementamos em nosso código. Contudo, uma abordagem alternativa e mais “segura” seria após o oscilador cruzar a linha zero depois da formação dos dois picos.
O padrão-1 também pode ser útil no posicionamento de stop loss, em que, em vez de colocar um stop de preço tradicional após abrir a posição com base na formação do padrão, a posição é encerrada caso o oscilador retorne ao nível do primeiro pico (o mais alto). Não implementamos isso, mas é algo que o leitor pode explorar. Além disso, esse padrão pode ser estendido para estabelecer metas de lucro: quando o oscilador cruza a linha zero, a posição aberta no registro do segundo pico menor é encerrada se estiver no lucro. Essa última abordagem funciona melhor em timeframes maiores, já que em timeframes curtos o cruzamento da linha zero pode ocorrer quando o preço ainda está dentro do spread.
Esse padrão, mesmo sendo mais raro e, portanto, potencialmente mais confiável que o padrão-0, ainda pode ser combinado com linhas de tendência; análise de volume (quando disponível), em que maior volume no segundo pico menor pode servir como confirmação clara do sinal; e ferramentas de divergência como MACD ou RSI, em que divergências dão maior confiança ao sinal indicado. Seus pontos fortes incluem: não ser atrasado (comparado a cruzamentos de SMA ou ao padrão-0), precisão direcional (pois indica não apenas a próxima tendência, mas também destaca a fraqueza de momentum da tendência atual), além de escalabilidade em diferentes timeframes e mercados. Testes com configurações otimizadas para GBP JPY no ano de 2022 no timeframe de 4 horas nos apresentam os seguintes resultados:

Limitações para o padrão-1 derivam de sua complexidade, especialmente no que diz respeito à implementação em código. Como já foi argumentado, este é um padrão relativamente simples de inferir a partir de um gráfico de preços, mas fazer com que um Expert Advisor o interprete a partir de um buffer de preços não é a mesma coisa. Além disso, sinais falsos tendem a ser abundantes para este padrão em ambientes de mercado indecisos ou voláteis. O uso de confirmação com as ferramentas já mencionadas ou até mesmo padrões de candles pode ajudar a atenuar isso.
Configuração Saucer
O padrão “saucer”, nosso padrão-2, é outro padrão de sinal do AO que ajuda a identificar potenciais reversões por meio da leitura da cor das barras do histograma do oscilador. A configuração “bullish saucer” indica potencial reversão de momentum para cima, marcada por duas barras consecutivas vermelhas no histograma, em que a segunda barra vermelha é de menor magnitude que a anterior, e a terceira barra, que vem após essas duas, é verde e mais alta que a segunda barra vermelha curta. Essas barras precisam estar todas acima da linha zero, e o sinal de entrada costuma ser no fechamento da barra verde.
A configuração “bearish saucer” é, como esperado, o oposto da altista: temos 2 barras consecutivas verdes, sendo a segunda mais próxima da linha zero (ou menor), e a terceira barra é vermelha e mais alta que a 2ª barra verde mais curta. Todas essas barras seriam o inverso do saucer altista e estariam abaixo da linha zero, e o sinal de entrada seria, assim como no altista, no fechamento da barra vermelha. O ponto-chave deste padrão é que ele depende de mudanças de momentum em vez da ação bruta do preço, e isso tende a torná-lo eficaz na identificação de reversões de tendência de curto prazo ou na reafirmação da força de tendências maiores. Implementamos isso em MQL5 da seguinte forma:
//+------------------------------------------------------------------+ //| Check for Pattern 2. | //+------------------------------------------------------------------+ bool CSignalAwesome::IsPattern_2(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && UpperColor(X() + 2) == clrRed && UpperColor(X() + 1) == clrRed && UpperColor(X()) == clrGreen) { return(true); } else if(T == POSITION_TYPE_SELL && LowerColor(X() + 2) == clrGreen && LowerColor(X() + 1) == clrGreen && LowerColor(X()) == clrRed) { return(true); } return(false); }
As principais vantagens deste padrão são: ser simples de identificar e interpretar, poder ser usado junto a outros indicadores comuns para aumentar a precisão do sinal e lidar relativamente bem com mercados voláteis, onde mudanças de momentum podem ser bastante comuns. As limitações incluem precisão reduzida em cenários de baixa volatilidade sem tendência, onde seria melhor combiná-lo com um indicador adicional. Um teste com configurações de entrada otimizadas favoráveis usando GBP JPY ao longo de 2022 no gráfico de 4 horas nos deu o seguinte resultado:

Divergência entre Preço e AO
Nosso padrão-3 é baseado em divergência. E o que é divergência? Simplesmente uma diferença entre a leitura de um indicador e a ação do preço, que frequentemente sinaliza uma possível reversão ou enfraquecimento da tendência prevalente. Com este padrão, porém, tendemos a focar na divergência entre as máximas/mínimas do preço e os picos/vales do oscilador AO. Para este artigo, no entanto, estamos explorando uma forma mais simples de divergência: as tendências das máximas/mínimas da ação do preço e os valores do histograma do AO.
Uma divergência altista ocorre quando o preço forma mínimas mais baixas, mas o oscilador AO forma máximas mais altas. A tese por trás deste padrão é que isso indica um enfraquecimento do momentum baixista, e, portanto, existe uma possível reversão de tendência para cima. Um possível sinal de entrada mais refinado seria identificar este padrão quando o AO estiver abaixo da linha zero e aguardar até que ele cruze a linha zero para então abrir uma posição de compra.
Por outro lado, uma divergência baixista ocorrerá quando o preço formar máximas mais altas, mas o oscilador AO apresentar mínimas mais baixas, indicando enfraquecimento do momentum altista apesar da ação do preço. Isso sinalizaria uma reversão de tendência para baixo, e um ponto de entrada adequado para a posição de venda poderia ser quando o AO cruzar abaixo da linha zero ou quando um padrão baixista de indicador secundário for confirmado. Implementamos isso em MQL5 da seguinte forma:
//+------------------------------------------------------------------+ //| Check for Pattern 3. | //+------------------------------------------------------------------+ bool CSignalAwesome::IsPattern_3(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Low(X() + 3) > Low(X()) && AO(X() + 3) < AO(X())) { return(true); } else if(T == POSITION_TYPE_SELL && High(X() + 3) < High(X()) && AO(X() + 3) > AO(X())) { return(true); } return(false); }
As principais características deste padrão são que ele chama atenção para mudanças de momentum que frequentemente precedem reversões de preço, especialmente em níveis de sobrecompra ou sobrevenda. Portanto, é construído mais para identificar potenciais reversões do que continuidades de preço. Um teste com configurações ideais, otimizadas para o mesmo ativo e parâmetros usados nos padrões acima, nos forneceu o seguinte relatório:

Suas vantagens não diferem muito das já consideradas nos padrões anteriores: ajuda a antecipar mudanças de tendência antes que ocorram, é versátil em vários mercados e timeframes, e pode ser combinado com outros indicadores para confirmar sinais de rompimento. Da mesma forma, suas desvantagens também não diferem muito, dado que tende a ser pouco confiável em mercados laterais, frequentemente requer confirmação ao ser combinado com outro indicador e também apresenta atraso.
Filtragem de Falsos Rompimentos
Nosso padrão-4 trata de falsos rompimentos. Falsos rompimentos acontecem quando o preço aparenta romper um nível importante de suporte/resistência mas depois reverte a direção, provavelmente porque não conseguiu manter o momentum que o levou além da barreira inicialmente rompida. Filtrar esses rompimentos, portanto, pode, ao menos teoricamente, melhorar a precisão das operações, se presumirmos que o momentum é um fator-chave para que um rompimento seja sustentável.
Como apresentado na introdução, o AO mede o momentum comparando uma SMA de curto prazo (5 períodos) com uma SMA de longo prazo (34 períodos), aplicadas ao preço médio. Portanto, ao analisar os valores do AO quando ocorre um rompimento, os traders podem determinar se ele está suficientemente sustentado pelo momentum ou por uma diferença entre a ação do preço em 5 períodos e em 34 períodos. Implementamos o padrão-4 em MQL5 da seguinte forma:
//+------------------------------------------------------------------+ //| Check for Pattern 4. | //+------------------------------------------------------------------+ bool CSignalAwesome::IsPattern_4(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 1) < MA(X() + 1) && Close(X()) > MA(X()) && UpperColor(X() + 1) == clrGreen && UpperColor(X()) == clrGreen && AO(X() + 1) > 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 1) > MA(X() + 1) && Close(X()) < MA(X()) && LowerColor(X() + 1) == clrRed && LowerColor(X()) == clrRed && AO(X() + 1) < 0.0) { return(true); } return(false); }
De nossa fonte, identificamos um rompimento como um cruzamento da média móvel de 8 períodos. Este período da média móvel talvez devesse ter sido maior, provavelmente 34? Para tornar a barreira de suporte/resistência mais significativa, mas este período curto foi suficiente para nossos testes. Abordagens alternativas para identificar o rompimento incluem linhas de tendência ou padrões gráficos como triângulos ou retângulos. Qualquer disparo de preço além dos níveis definidos por esses indicadores marcaria claramente um rompimento.
Uma análise adicional do AO no ponto de rompimento pode fornecer alguma percepção sobre se o rompimento em andamento é sustentável. Se o tamanho do histograma (tamanho do gráfico de barras do oscilador) for significativo no rompimento, então ele pode ser aproveitável, entretanto histogramas curtos ou fracos geralmente exigem confirmação adicional antes de considerar um sinal. Meios de obter essa confirmação incluem se o AO eventualmente cruza a linha zero ou se o histograma já estiver na metade que indica momentum na direção da tendência prevalente/sinal, sendo necessário observar barras mais longas ou de mesma cor do AO antes de abrir uma posição.
Para as definições de sinal, um rompimento altista ocorre quando o preço cruza a média móvel de baixo para cima e fecha acima dela enquanto o AO está acima da linha zero e as duas últimas barras são verdes. Por outro lado, o rompimento baixista ocorre quando o preço cruza a média móvel de cima para baixo e fecha abaixo dela enquanto o AO está abaixo da linha zero e suas duas últimas barras eram vermelhas. Resultados de teste com o mesmo símbolo e configurações usadas acima com os outros padrões nos apresentam este relatório:

Confirmação de Continuidade de Tendência
O padrão-5 atua como uma checagem para assegurar que qualquer tendência (seja de alta ou de baixa) provavelmente persistirá; algo que reduz o risco de abrir operações antes de uma reversão. O AO pode ser eficaz em confirmar a continuidade da tendência por meio da análise de momentum. Uma continuidade de tendência altista ocorre quando o histograma do AO permanece verde acima da linha zero e o preço de fechamento continua em tendência de alta. Por outro lado, a continuidade de tendência baixista é quando o AO está abaixo da linha zero, o preço continua em queda e os histogramas do AO estão vermelhos. Implementamos isso em MQL5 da seguinte forma:
//+------------------------------------------------------------------+ //| Check for Pattern 5. | //+------------------------------------------------------------------+ bool CSignalAwesome::IsPattern_5(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 1) < Close(X()) && UpperColor(X() + 1) == clrGreen && UpperColor(X()) == clrGreen && AO(X() + 1) > 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 1) > Close(X()) && LowerColor(X() + 1) == clrRed && LowerColor(X()) == clrRed && AO(X() + 1) < 0.0) { return(true); } return(false); }
Testes a partir de configurações otimizadas de GBP JPY para o ano de 2022 no gráfico de 4 horas nos dão o seguinte relatório:

Padrões adicionais que podem apoiar a continuidade de tendência e podem ser codificados para complementar o que foi apresentado acima são: o cruzamento da linha zero (padrão-0) ou o sinal de pullback, em que um breve enfraquecimento do momentum (ex.: barras menores) é seguido de um fortalecimento renovado das barras do histograma do AO, confirmando que a tendência prevalente do preço está intacta; ou ainda o sinal Twin Peaks que consideramos acima no padrão-1. A combinação desses múltiplos padrões para realizar operações é algo que o Expert Advisor montado pode fazer, e consideramos isso ao final de cada artigo de sinal customizado do indicador.
Entretanto, para operar apenas com o padrão-5, atribuímos nosso parâmetro de entrada para bit map usado como 32 e, se otimizarmos com este padrão em configurações semelhantes do testador de estratégias como as anteriores, obtemos o seguinte relatório de algumas das configurações de entrada favoráveis. Por ser inerentemente influenciado pelo momentum, seus prós e limitações não diferem muito dos outros padrões abordados acima.
Rebote na Linha Zero
Rebater na linha zero ou próximo dela é o nosso padrão-6, e a premissa por trás desta formação é quando o AO se aproxima da linha zero mas não a cruza, retomando sua tendência anterior. A estratégia de negociação, portanto, é que um rebote altista é indicado se o AO, estando acima da linha zero, desce em direção à linha zero e então recua sem cruzá-la. O rebote baixista ocorre quando o AO está abaixo da linha zero e se aproxima dela antes de recuar sem efetuar o cruzamento. Temos isso codificado da seguinte forma para nossa classe de sinal customizada:
//+------------------------------------------------------------------+ //| Check for Pattern 6. | //+------------------------------------------------------------------+ bool CSignalAwesome::IsPattern_6(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && AO(X() + 2) > AO(X() + 1) && AO(X() + 1) >= 0.0 && AO(X() + 1) < AO(X())) { return(true); } else if(T == POSITION_TYPE_SELL && AO(X() + 2) < AO(X() + 1) && AO(X() + 1) <= 0.0 && AO(X() + 1) > AO(X())) { return(true); } return(false); }
Um teste com configurações de otimização favoráveis, como fizemos com os outros padrões acima, nos dá os seguintes resultados:

Alerta Precoce de Reversão
Nosso padrão-7, que é o 8º, é marcado por uma mudança repentina de cor, de verde para vermelho ou vice-versa. Implementamos leituras de cor do AO da seguinte forma:
// color UpperColor(int ind) { // return(AO(ind) >= AO(ind + 1) && AO(ind + 1) > 0.0 ? clrGreen : clrRed); } color LowerColor(int ind) { // return(AO(ind) <= AO(ind + 1) && AO(ind + 1) < 0.0 ? clrRed : clrGreen); }
Essas funções estão na interface de classe da classe de sinal customizado e são usadas em toda a classe, não apenas para este padrão. A estratégia de negociação para o padrão-7 é que uma transição de baixista para altista ocorre quando a cor do histograma do AO muda de vermelho para verde, independentemente da posição do AO em relação à linha zero. De forma semelhante, uma transição de altista para baixista é marcada por uma mudança súbita da cor do histograma de verde para vermelho, novamente independentemente de onde o AO esteja em relação à linha zero. Implementamos isto da seguinte forma:
//+------------------------------------------------------------------+ //| Check for Pattern 7. | //+------------------------------------------------------------------+ bool CSignalAwesome::IsPattern_7(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && ((UpperColor(X() + 1) == clrRed && UpperColor(X()) == clrGreen) || (LowerColor(X() + 1) == clrRed && LowerColor(X()) == clrGreen))) { return(true); } else if(T == POSITION_TYPE_SELL && ((UpperColor(X() + 1) == clrGreen && UpperColor(X()) == clrRed) || (LowerColor(X() + 1) == clrGreen && LowerColor(X()) == clrRed))) { return(true); } return(false); }
Ao testar apenas este padrão com configurações de otimização adequadas em condições semelhantes às usadas acima com outros padrões — com a óbvia exceção de que o parâmetro de entrada usado para este padrão é atribuído a 128 — obtemos o seguinte relatório:

Força da Tendência via Histograma
Nosso padrão final, tamanho do histograma, é indexado como 8, e seu objetivo é levar o simples padrão-7 acima um passo adiante, adicionando uma medida ao tamanho do histograma do AO. A partir de nossa implementação de código de cores acima, pode-se ver que a coloração do AO é dirigida por mudanças no tamanho do histograma. Assim, um histograma crescente quando acima da linha zero ou um tamanho de barra decrescente quando o AO está abaixo da linha zero resulta em barras verdes no AO. Isso, em muitos aspectos, é a premissa do padrão-7. Para o padrão-8, no entanto, um aumento de momentum altista é marcado por barras verdes subsequentes (o que implica aumento/ ou redução relevante) e a barra mais recente do histograma do AO sendo mais de 8 vezes o spread do ativo. O uso de 8 vezes o spread é uma escolha arbitrária. Tipicamente, um parâmetro de entrada otimizado poderia refinar melhor qual deveria ser esse limite, ou alguma fração da volatilidade atual também poderia ser usada. Um aumento de momentum baixista é o inverso disso. Implementamos isso em MQL da seguinte forma:
//+------------------------------------------------------------------+ //| Check for Pattern 8. | //+------------------------------------------------------------------+ bool CSignalAwesome::IsPattern_8(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && AO(X() + 2) > 0.0 && fabs(AO(X() + 2)) >= 8.0 * m_symbol.Spread()*m_symbol.Point() && UpperColor(X() + 2) == clrGreen && UpperColor(X() + 1) == clrGreen && UpperColor(X()) == clrGreen) { return(true); } else if(T == POSITION_TYPE_SELL && AO(X() + 2) < 0.0 && fabs(AO(X() + 2)) >= 8.0 * m_symbol.Spread()*m_symbol.Point() && LowerColor(X() + 2) == clrRed && LowerColor(X() + 1) == clrRed && LowerColor(X()) == clrRed) { return(true); } return(false); }
A tese principal aqui é que barras menores (sejam verdes ou vermelhas) sugerem tendência enfraquecida e, portanto, um período de consolidação, enquanto um histograma mais longo e proeminente sugere momentum forte e que a tendência prevalente tem alguma sustentação. Um teste apenas para este padrão nos dá o seguinte relatório:

Nossa classe de sinal customizada também pode operar em múltiplos padrões e, se realizarmos otimizações para os pesos adequados dos padrões com GBP JPY no mesmo ano e timeframe das execuções individuais, obtemos os seguintes resultados:


Conclusão
Consideramos outro indicador de Bill Williams, o Awesome Oscillator, em uma análise padrão por padrão, como fizemos com indicadores anteriores. Existem várias implementações e aspectos que não abordamos ao codificar esses padrões, como adicionar mais parâmetros de entrada para gerenciar melhor os limites de cada padrão e, claro, validar adequadamente quaisquer parâmetros de entrada preferidos antes do uso. Isso, como sempre, é deixado para o leitor, já que nosso código-fonte completo está anexado ao final do artigo.
| Nome do Arquivo | Descrição |
|---|---|
| SignalWZ_50.mqh | Arquivo da Classe de Sinal Customizado, baseado no Awesome Oscillator |
| wz_50.mq5 | Exemplo de Expert Advisor Montado pelo Assistente, mostrando arquivos incluídos/usados |
Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/16502
Aviso: Todos os direitos sobre esses materiais pertencem à MetaQuotes Ltd. É proibida a reimpressão total ou parcial.
Esse artigo foi escrito por um usuário do site e reflete seu ponto de vista pessoal. A MetaQuotes Ltd. não se responsabiliza pela precisão das informações apresentadas nem pelas possíveis consequências decorrentes do uso das soluções, estratégias ou recomendações descritas.
Price Action Analysis Toolkit Development (Part 3): Analytics Master — EA
Migrando para o MQL5 Algo Forge (Parte 3): Uso de repositórios de terceiros em seu próprio projeto
Do básico ao intermediário: Filas, Listas e Árvores (IV)
Negociando com o Calendário Econômico do MQL5 (Parte 3): Adicionando Filtros de Moeda, Importância e Tempo
- 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