Introdução à linguagem MQL5 (Parte 20): Introdução aos padrões harmônicos
Introdução
Sejam bem-vindos a mais um artigo da série "Introdução à linguagem MQL5"! Nesta Parte 20, vamos explorar outro tipo avançado de padrão gráfico: os padrões harmônicos. Esses padrões utilizam proporções precisas de Fibonacci para identificar possíveis zonas de reversão e são amplamente reconhecidos na análise técnica.
Se você deseja compreender melhor esse conceito, este artigo é para você. Vamos conhecer a estrutura dos padrões harmônicos e as principais ferramentas de retração e extensão de Fibonacci utilizadas para identificá-los.
Exploraremos os elementos fundamentais de algumas das estruturas harmônicas mais conhecidas, incluindo os padrões Gartley, Morcego, Borboleta e Caranguejo, além das proporções exatas de Fibonacci que definem cada um deles. Como até mesmo pequenos desvios podem invalidar um setup, é fundamental compreender essas proporções. No próximo artigo, vamos nos concentrar em aplicar esses conhecimentos por meio de programas em MQL5, permitindo identificar automaticamente padrões harmônicos tanto de baixa quanto de alta.
Neste artigo, você aprenderá:
- Os fundamentos dos padrões harmônicos e suas aplicações no trading.
- Os conceitos matemáticos por trás dos níveis de Fibonacci e sua importância para a identificação dos padrões.
- Como funcionam as extensões de Fibonacci e qual é seu papel na definição de possíveis alvos de preço.
- Como implementar a detecção de padrões harmônicos em MQL5, incluindo o uso das proporções de Fibonacci no código.
- A estrutura dos diferentes padrões harmônicos e como reconhecê-los no gráfico.
Extensão e retração de Fibonacci
Antes de abordarmos os padrões harmônicos, é importante compreender as ferramentas de extensão e retração de Fibonacci. Você provavelmente já conhece esses objetos disponíveis no MetaTrader 5, mas já parou para pensar nas fórmulas matemáticas utilizadas para calcular seus níveis?
Se já pensou nisso, ótimo! Esta seção permitirá aprofundar seus conhecimentos. Caso contrário, não se preocupe, vamos explorar tudo isso. Ao final desta explicação, você entenderá exatamente como os níveis de Fibonacci são calculados e por que são tão importantes para identificar padrões harmônicos.
Retração de FibonacciTanto a retração quanto a extensão de Fibonacci utilizam proporções percentuais. Em termos simples, elas permitem medir quanto o preço recuou em relação a um movimento anterior ou até que ponto esse movimento pode se estender. Vamos considerar um exemplo simples. Imagine que o mercado apresenta um swing de alta bem definido, partindo de uma mínima até atingir uma máxima.

Para calcular os níveis de retração de Fibonacci, começamos pela diferença entre esses dois pontos, ou seja, pela amplitude do movimento.
Exemplo:
double price_differecence; double swing_high; double swing_low; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- swing_high = 1.16985; swing_low = 1.15656; price_differecence = swing_high - swing_low; }
Sempre subtraia swing_low de swing_high para obter uma diferença de preço positiva. Se inverter a ordem, o resultado será negativo.
Mas o que acontece se o mercado inverter a direção na metade desse movimento? Teremos uma retração de 50%. Isso significa que o preço devolveu metade do movimento de alta anterior.
Exemplo:
double price_diff_50_percent; //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- swing_high = 1.16985; swing_low = 1.15656; price_differecence = swing_high - swing_low; price_diff_50_percent = (50.0/100.0) * price_differecence; // (Fibonacci Retracement level / 100) * Price Difference }
Essa linha calcula 50% da diferença total de preço. Como são utilizados os valores 50,0 e 100,0, em vez de apenas números inteiros, o cálculo é realizado por meio de uma divisão de ponto flutuante. Isso é importante porque esse tipo de divisão permite obter um resultado decimal preciso. Se utilizássemos apenas números inteiros, algumas linguagens de programação interpretariam 50/100 como uma divisão inteira.

Imagine que você subiu dez degraus de uma escada. Se descer cinco, terá recuado metade do percurso. Na retração de Fibonacci, podemos analisar diferentes níveis percentuais. Esses níveis podem atuar como zonas de suporte ou resistência, nas quais o preço pode fazer uma pausa ou inverter sua direção. Quando você ouve que "o mercado recuou até o nível de 61,8%", isso significa simplesmente que o preço devolveu quase dois terços do movimento entre a máxima e a mínima do swing.
Extensão de FibonacciEnquanto a retração de Fibonacci é utilizada principalmente para medir quanto o mercado recuou em relação a um movimento anterior, a extensão de Fibonacci permite estimar até onde um novo movimento de preço pode se estender além dos limites do swing original. Ambas as ferramentas utilizam proporções percentuais, mas os níveis de extensão podem projetar movimentos que ultrapassam 100% da amplitude do swing inicial.
As extensões de Fibonacci podem ser utilizadas de duas maneiras diferentes para analisar os movimentos do mercado.
Primeiro cenário (uso padrão com retração):
Na aplicação convencional, é necessário que o mercado apresente uma retração antes de traçarmos os níveis de extensão de Fibonacci. Para isso, utilizamos três pontos de referência:
- O primeiro ponto de referência é definido em X.
- O segundo ponto de referência é definido em A.
- O terceiro ponto de referência é definido em B, que corresponde a uma retração do movimento XA.

Nesse primeiro cenário, começamos com um swing de preço que chamaremos de XA. Os pontos X e A representam, respectivamente, o início e o fim desse movimento. Após esse deslocamento inicial, o mercado geralmente apresenta uma retração até o ponto B, situado no meio do movimento entre X e A. Esses três pontos servem de referência para calcular as extensões de Fibonacci. A ferramenta permite projetar possíveis alvos de preço além do ponto A, indicando possíveis níveis que o preço poderá alcançar após o término da retração.
Matematicamente, começamos calculando a diferença de preço entre X e A:
price difference=A−X
O resultado corresponde à amplitude total do movimento XA. Em seguida, escolhemos uma proporção de extensão de Fibonacci, como 61,8%, e a convertemos para a forma decimal, dividindo-a por 100:
fibo ratio= 61.8/100.0
Agora, multiplicamos essa proporção pela diferença de preço para calcular a distância da extensão além do ponto A:
extension distance = fibo ratio×price difference
Por fim, somamos essa distância ao valor do ponto B para obter o nível de extensão de Fibonacci:
fibo extension = B+extension distance
Na prática, isso significa que, se XA representar um movimento de alta e B corresponder à retração desse movimento, a ferramenta de extensão permite projetar onde o próximo movimento de alta poderá terminar, possivelmente além do ponto A. Da mesma forma, em um mercado de baixa, a ferramenta ajuda a identificar possíveis alvos de preço abaixo do ponto A. Esse procedimento matemático permite calcular projeções sistemáticas com base nas proporções dos movimentos de preço, em vez de simplesmente traçar linhas arbitrárias no gráfico.
Segundo cenário (uso direto em padrões harmônicos):
Na análise de padrões harmônicos, a extensão de Fibonacci é aplicada de maneira diferente do método convencional que utiliza uma retração. Em vez de posicionar a ferramenta sobre um movimento de retração, definimos o primeiro ponto de referência em X e os outros dois em A. Essa configuração não busca medir retrações, mas projetar possíveis alvos de preço.
Embora as extensões e retrações de Fibonacci possam parecer semelhantes nessa configuração, há uma diferença fundamental entre elas. Quando o ponto A representa a máxima de um swing, normalmente subtraímos desse valor uma proporção de Fibonacci calculada sobre o segmento XA para obter um nível de retração. Se A representar a mínima do swing, somamos essa proporção. Já no cálculo da extensão além de uma máxima em A, somamos o valor correspondente à proporção, em vez de subtraí-lo. É isso que caracteriza uma extensão, e não uma retração.

Exemplo:
double price_differecence; double swing_high; //A double swing_low; //X double price_diff_161_8_percent; double fibo_extension_161_8; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- swing_high = 1.16985; swing_low = 1.15656; price_differecence = swing_high - swing_low; price_diff_161_8_percent = (61.8/100.0) * price_differecence; fibo_extension_161_8 = swing_high + price_diff_161_8_percent; }
Considere que a distância entre X e A corresponde a 100% do movimento. Se utilizarmos uma proporção de Fibonacci de 61,8% sobre XA para projetar um nível além de A, somaremos ao ponto A a distância correspondente a 61,8% da amplitude de XA, em vez de subtraí-la. Assim, o nível resultante corresponderá a 161,8% do movimento original. É por isso que extensões como 127,2% e 161,8% são frequentemente utilizadas em padrões harmônicos: elas não representam retrações do movimento XA, mas projeções que ultrapassam seus limites.
Esse método dispensa a necessidade de uma retração efetiva após o movimento XA e facilita a identificação dos possíveis níveis que o próximo swing poderá alcançar dentro de um padrão harmônico. Em termos matemáticos, projetamos a amplitude do movimento entre X e A para além de seus limites originais. Essas projeções ajudam a identificar pontos importantes nos quais o mercado pode apresentar uma reversão ou completar uma estrutura harmônica.
Padrão harmônico
Agora que compreendemos os conceitos de retração e extensão de Fibonacci, fica muito mais fácil entender os padrões harmônicos. Isso porque as proporções de Fibonacci constituem a base de todos esses padrões. Na prática, o que caracteriza um padrão harmônico é a combinação de sua formação geométrica no gráfico com o grau de correspondência entre seus segmentos de preço e os níveis específicos de retração e extensão de Fibonacci.
Os padrões harmônicos são formações geométricas de preço que se repetem em diferentes períodos gráficos. Eles são compostos por uma sequência de swings, representados pelos segmentos XA, AB, BC e CD. Para que o padrão seja considerado válido, cada segmento deve atender a critérios específicos de Fibonacci. Por se basearem em proporções matemáticas bem definidas, os padrões harmônicos oferecem critérios de identificação mais objetivos do que padrões gráficos tradicionais, como triângulos e bandeiras.

Entre os padrões harmônicos mais conhecidos estão Gartley, Morcego, Borboleta e Caranguejo. Cada um possui uma combinação específica de proporções de Fibonacci que determina as relações entre seus segmentos. Por exemplo, para validar um padrão, a retração de AB em relação a XA ou a extensão de CD em relação a BC deve estar dentro de determinados intervalos de Fibonacci, e não assumir valores arbitrários.
Padrão harmônico "Borboleta"Em um padrão "Borboleta" típico, o primeiro segmento vai do ponto X ao ponto A, formando o movimento inicial de preço.

O ponto B deve corresponder a uma retração de 76% a 79% do movimento XA. Embora o nível de 78,6% seja frequentemente considerado a retração "ideal", o preço raramente atinge esse valor com exatidão. Por isso, é mais seguro trabalhar com um intervalo do que exigir um nível fixo.

Exemplo:
double swing_low_x; //X double swing_high_x; //A double price_differecence; double fib_ret_79; double fib_ret_76; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- swing_low_x = 1.15656; swing_high_x = 1.16985; price_differecence = swing_high_a - swing_low_x; fib_ret_79 = swing_high_x - ((79.0/100.0) * price_differecence); fib_ret_76 = swing_high_x - ((76.0/100.0) * price_differecence); /* if(B <= fib_ret_76 && B>= fib_ret_79) { } */ }
Explicação:
Esse algoritmo calcula os níveis de retração de Fibonacci entre os pontos X e A, estabelecendo a base para identificar o ponto B no padrão harmônico "Borboleta". Primeiro, determina-se a diferença de preço entre esses pontos. Em seguida, são calculados os níveis de retração de 79% e 76%, que delimitam o intervalo no qual o ponto B deve se formar.
Após calcular os níveis de retração, podemos verificar se o preço correspondente ao ponto B está dentro desse intervalo. No bloco de código comentado:
if(B <= fib_ret_76 && B >= fib_ret_79) { } Essa condição verifica se o ponto B está dentro do intervalo de retração estabelecido em relação ao segmento XA. Se a condição for verdadeira, o ponto B atende aos critérios do padrão harmônico "Borboleta", permitindo avançar para as verificações adicionais dos pontos C e D.
Normalmente, o segmento BC apresenta uma retração entre aproximadamente 38,2% e 88,6% do movimento anterior, AB. Esse segmento admite uma variação maior do que os demais. Desde que essa retração permaneça dentro do intervalo esperado, o padrão é considerado válido.

double swing_low_x; //X double swing_high_a; //A double price_differecence; double fib_ret_79; double fib_ret_76; double swing_low_b; //B double price_differecence_ab; double fib_ret_88_6_ab; double fib_ret_38_2_ab; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- swing_low_x = 1.15656; swing_high_a = 1.16985; price_differecence = swing_high_a - swing_low_x; fib_ret_79 = swing_high_a - ((79.0/100.0) * price_differecence); fib_ret_76 = swing_high_a - ((76.0/100.0) * price_differecence); price_differecence_ab = swing_high_a - swing_low_b; fib_ret_88_6_ab = swing_low_b + ((88.6/100.0) * price_differecence_ab); fib_ret_38_2_ab = swing_low_b + ((38.2/100.0) * price_differecence_ab); /* if(B <= fib_ret_76 && B>= fib_ret_79 && C >= fib_ret_38_2_ab && C <= fib_ret_88_6_ab) { } */ }
Explicação:
Nesta seção, calculamos a amplitude total do movimento de preço entre dois pontos importantes do mercado. Com base nessa amplitude, são determinados níveis específicos de retração de Fibonacci, que indicam possíveis regiões de reversão ou de suporte e resistência. Para calcular o nível de 38,2%, somamos ao mesmo ponto de referência uma distância correspondente a 38,2% da amplitude do movimento. Para o nível de 88,6%, utilizamos a mesma referência, mas somamos uma distância equivalente a 88,6% dessa amplitude. Dessa forma, obtemos dois níveis de referência para a análise.
Esses níveis ajudam a identificar possíveis zonas de repique do preço durante o movimento de correção. Por fim, na lógica de confirmação do padrão, a condição if comentada verifica se o ponto B está entre os dois níveis de retração calculados e se o ponto C também se encontra dentro do intervalo de Fibonacci especificado.
Por fim, o segmento CD, que define a zona potencial de reversão (PRZ), é o componente mais importante do padrão "Borboleta". Em um padrão "Borboleta" válido, o ponto D corresponde a uma extensão de 127,2% a 161,8% do movimento original XA. Essa extensão determina a região de conclusão do padrão, na qual os traders procuram possíveis sinais de reversão. Considerando que o movimento XA representa 100%, uma extensão adicional de 61,8% posiciona o ponto D aproximadamente no nível de 161,8% de XA.

Exemplo:
double swing_low_x; //X double swing_high_a; //A double price_differecence; double fib_ret_79; double fib_ret_76; double swing_low_b; //B double price_differecence_ab; double fib_ret_88_6_ab; double fib_ret_38_2_ab; double xa_price_differecence; double fib_ext_127_2_xa; double fib_ext_161_8_xa; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- swing_low_x = 1.15656; swing_high_a = 1.16985; price_differecence_ab = swing_high_a - swing_low_b; fib_ret_79 = swing_high_a - ((79.0/100.0) * price_differecence); fib_ret_76 = swing_high_a - ((76.0/100.0) * price_differecence); fib_ret_88_6_ab = swing_low_b + ((88.6/100.0) * price_differecence_ab); fib_ret_38_2_ab = swing_low_b + ((38.2/100.0) * price_differecence_ab); xa_price_differecence = swing_high_a - swing_low_x; fib_ext_127_2_xa = MathAbs(swing_low_x - ((127.2/100.0) * xa_price_differecence)); fib_ext_161_8_xa = MathAbs(swing_low_x - ((161.8/100.0) * xa_price_differecence)); /* if(B <= fib_ret_76 && B>= fib_ret_79 && C >= fib_ret_38_2_ab && C <= fib_ret_88_6_ab && D <= fib_ext_127_2_xa && D >= fib_ext_161_8_xa) { } */ }
Explicação:
Este trecho de código calcula a distância de preço entre dois pontos importantes de um swing. A amplitude desse movimento é então utilizada para determinar os níveis de extensão de Fibonacci do padrão. Ao calcular a diferença entre os pontos inicial e final do swing e aplicar as proporções de Fibonacci de 127,2% e 161,8%, o código projeta possíveis níveis que o preço poderá alcançar caso o movimento continue. Para que os cálculos funcionem tanto em movimentos de alta quanto de baixa, o código utiliza uma função que converte qualquer resultado em um valor inteiro positivo. Em seguida, as proporções são aplicadas à amplitude do movimento original. As distâncias calculadas são somadas ou subtraídas do preço de referência, conforme a direção do movimento, para determinar os níveis de extensão projetados.
A essa altura, você já deve compreender os fundamentos matemáticos das retrações e extensões de Fibonacci, bem como sua aplicação em MQL5. Aprendemos a utilizar as proporções de Fibonacci, calcular diferenças de preço entre pontos de um swing e determinar níveis importantes para validar padrões harmônicos. A lógica apresentada também pode ser aplicada a outros padrões harmônicos, pois todos utilizam cálculos semelhantes com base nas proporções de Fibonacci para identificar possíveis zonas de reversão ou continuação do movimento. Com essa base estabelecida, podemos explorar outros padrões harmônicos com mais segurança. Esses conceitos permitirão identificar possíveis oportunidades de trading com base na ação do preço (price action) e nas proporções de Fibonacci.
Padrão Gartley: O padrão Gartley é formado pelos segmentos XA, AB, BC e CD. O ponto D situa-se na região de extensão de XA, entre os níveis de 127,2% e 161,8%. O ponto B corresponde a uma retração de aproximadamente 61,8% de XA, enquanto o ponto C apresenta uma retração de 38,2% a 88,6% de AB. Essa configuração indica uma possível zona de reversão do preço.
Padrão "Morcego": O padrão harmônico "Morcego" é definido por proporções específicas de Fibonacci. O ponto D, geralmente localizado na região de retração de 88,6% do movimento XA, marca a conclusão do padrão. Já o ponto B corresponde a uma retração entre 38,2% e 50% do movimento XA.
Conclusão
Neste artigo, exploramos os princípios dos padrões harmônicos e suas aplicações no trading. Agora você compreende como utilizar os níveis de retração e extensão de Fibonacci em MQL5 e conhece os fundamentos matemáticos por trás desses cálculos. No próximo artigo, passaremos da teoria à prática, utilizando padrões harmônicos para desenvolver um EA completo e funcional. Você também aprenderá a reconhecer e destacar visualmente esses padrões nos gráficos de trading, utilizando os elementos gráficos disponíveis em MQL5. Ao final do próximo artigo, você terá os conhecimentos e os recursos necessários para automatizar com sucesso estratégias de trading baseadas em padrões harmônicos.
Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/19179
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.