English Русский 中文 Español Deutsch 日本語
preview
Conhecendo a linguagem MQL5 (Parte 18): Introdução ao padrão "Ondas de Wolfe"

Conhecendo a linguagem MQL5 (Parte 18): Introdução ao padrão "Ondas de Wolfe"

MetaTrader 5 — Negociação |
33 0
ALGOYIN LTD
Israel Pelumi Abioye

Introdução

Olá novamente! Sejam bem-vindos à Parte 18 da série "Conhecendo a linguagem MQL5"! Nesta etapa, vamos aprofundar os conhecimentos adquiridos até aqui, mantendo nossa abordagem prática baseada em projetos e utilizando exemplos reais para ajudar você a aprimorar suas habilidades em MQL5. Na Parte 17, abordamos os rompimentos de linhas de tendência e os setups de reversão, mostrando como desenvolver EAs capazes de reagir a níveis importantes e executar operações de acordo com o comportamento do preço nas proximidades dessas linhas.

Neste artigo, vamos avançar um pouco mais e explorar um padrão gráfico mais sofisticado: as Ondas de Wolfe. Diferentemente dos padrões básicos, que dependem principalmente de rompimentos de níveis de suporte e resistência, o padrão de Ondas de Wolfe apresenta uma estrutura precisa de cinco pontos e busca projetar o movimento do preço até uma linha-alvo específica. Trata-se de uma ferramenta poderosa para antecipar reversões e identificar o momento de entrada com a maior precisão possível.

Nesta parte, vamos apresentar os principais conceitos relacionados ao padrão de Ondas de Wolfe, incluindo os critérios para identificar setups de alta e de baixa. Você aprenderá a reconhecer essas formações no gráfico e compreenderá as condições necessárias para que uma estrutura de Ondas de Wolfe seja considerada válida. Também abordaremos o sistema de identificação programática do padrão e a criação de um EA com base nesse sistema. No próximo artigo, implementaremos essa lógica em MQL5 para detectar automaticamente as Ondas de Wolfe e desenvolver um EA capaz de operar com base nesse padrão.



1. Padrão de Ondas de Wolfe

As Ondas de Wolfe constituem um padrão gráfico de reversão que pode ser utilizado para identificar possíveis mudanças na direção do mercado. O movimento do preço é composto por cinco ondas distintas. Para definir os cinco pontos do padrão, é necessário identificar topos e fundos de swing relevantes. Depois de localizados esses pontos, o padrão sugere que o preço deverá reverter no quinto ponto e seguir em direção à linha-alvo, traçada entre os pontos 1 e 4. Para aumentar a precisão da estratégia, também é estimada uma região-alvo provável, enquanto o padrão é verificado com o auxílio de uma extensão de Fibonacci.

Padrão baixista de Ondas de Wolfe

Para identificar um padrão baixista de Ondas de Wolfe, é necessário localizar, em sequência, cinco pontos de preço que atendam a critérios estruturais bem definidos. O padrão começa na onda 1, que deve corresponder a um topo de swing. A onda 2 deve estar abaixo da onda 1, pois representa um fundo de swing. Em seguida, a onda 3 forma um novo topo de swing, acima da onda 1, e deve estar dentro de uma faixa predefinida de extensão de Fibonacci, calculada com base no movimento do preço entre as ondas 1 e 2. Na sequência, a onda 4 forma um fundo de swing que deve permanecer acima da onda 2, mas abaixo das ondas 1 e 3.

A onda 5 é o ponto mais importante do padrão: ela forma um topo de swing acima da onda 3 e deve estar dentro de uma faixa específica de extensão de Fibonacci, calculada com base no movimento entre as ondas 3 e 4. Como a conclusão da onda 5 costuma indicar um impulso de alta excessivo, o cumprimento de todos esses critérios sugere que o mercado pode estar prestes a iniciar uma reversão de baixa.

Figura 1. Padrão baixista de Ondas de Wolfe

O movimento entre as ondas 3 e 4 deve corresponder a pelo menos 70% da amplitude do movimento entre as ondas 1 e 2, o que aumenta a precisão na identificação da reversão. Três linhas de tendência são fundamentais para reconhecer o padrão de Ondas de Wolfe. A primeira é traçada entre as ondas 1 e 3 e ajuda a definir o limite superior da estrutura. A segunda conecta as ondas 2 e 4, estabelecendo o limite inferior. Juntas, essas duas linhas delimitam a estrutura convergente que caracteriza visualmente o padrão. A terceira linha de tendência desempenha uma função mais estratégica: traçada entre as ondas 1 e 4, ajuda a determinar a trajetória esperada da onda 5. Essa última linha também serve como uma referência importante para a entrada na operação, pois o preço, ao alcançá-la ou se aproximar dela, costuma sinalizar uma possível reversão.

Padrão altista de Ondas de Wolfe

Para identificar um padrão altista de Ondas de Wolfe, é necessário localizar, em uma sequência específica, cinco pontos de swing que atendam a critérios estruturais bem definidos. O padrão começa na onda 1, que corresponde a um fundo de swing. Em seguida, a onda 2 forma um topo de swing que deve estar acima da onda 1. A onda 3 representa um novo fundo de swing, abaixo da onda 1, e deve estar dentro de uma faixa específica de extensão de Fibonacci, calculada com base no movimento entre as ondas 1 e 2. Na sequência, a onda 4 forma um topo de swing que deve ficar acima das ondas 1 e 3, mas abaixo da onda 2.

O elemento mais importante desse setup de alta é a onda 5. Ela deve estar dentro de uma faixa específica de extensão de Fibonacci, calculada com base no movimento entre as ondas 3 e 4, e corresponder a um fundo de swing abaixo da onda 3. Após a conclusão da onda 5, o mercado é considerado relativamente subvalorizado, o que indica uma alta probabilidade de reversão de alta.

Assim como o padrão baixista, o padrão altista de Ondas de Wolfe depende da simetria entre suas ondas. O movimento da onda 3 à onda 4 deve ter, preferencialmente, uma duração semelhante à do movimento da onda 1 à onda 2. Mais especificamente, a duração do movimento da onda 3 à onda 4 deve corresponder a pelo menos 70% da duração do movimento da onda 1 à onda 2.

Três linhas de tendência são fundamentais para confirmar o padrão altista de Ondas de Wolfe. A primeira, traçada entre as ondas 1 e 3, define o limite inferior da estrutura. A segunda conecta as ondas 2 e 4, estabelecendo o limite superior. Essas duas linhas de tendência frequentemente formam uma estrutura convergente, que se estreita progressivamente. A terceira linha de tendência, considerada a mais importante, é traçada entre as ondas 1 e 4. Ela ajuda a projetar a trajetória esperada da onda 5 e serve como uma referência importante para a entrada na operação.

Figura 2. Padrão altista de Ondas de Wolfe

Identificação das ondas

Para identificar as Ondas de Wolfe, precisamos primeiro saber reconhecer os topos e fundos de swing. Nos artigos anteriores, expliquei como identificar esses pontos essenciais. Um topo de swing se forma quando a máxima de determinada vela supera as máximas de um número definido de velas anteriores e posteriores. Da mesma forma, um fundo de swing ocorre quando a mínima de uma barra fica abaixo das mínimas de uma quantidade definida de barras anteriores e posteriores. Esses pontos de swing servem de base para identificar a estrutura de cinco ondas do padrão de Wolfe. Sem detectá-los com precisão, não é possível reconhecer de maneira confiável o restante do padrão.

Depois de identificar corretamente os topos e fundos de swing, o próximo passo é organizá-los na sequência de cinco ondas que caracteriza o padrão de Ondas de Wolfe. As ondas devem obedecer a uma ordem específica e manter relações bem definidas entre si. Por exemplo, a onda 3 deve estar dentro de uma faixa válida de extensão de Fibonacci, calculada com base no movimento anterior, enquanto as ondas 1 e 2 estabelecem a orientação inicial do padrão. Essa estrutura preserva a simetria geométrica e a capacidade preditiva do padrão. É essencial definir corretamente essa sequência antes de implementá-la em um EA.

Exemplo:

//+------------------------------------------------------------------+
//| FUNCTION FOR SWING LOW                                           |
//+------------------------------------------------------------------+
bool IsSwingLow(const double &low_price[], int index, int lookback)
  {
   for(int i = 1; i <= lookback; i++)
     {
      if(low_price[index] > low_price[index - i] || low_price[index] > low_price[index + i])
         return false;
     }
   return true;
  }

//+------------------------------------------------------------------+
//| FUNCTION FOR SWING HIGH                                          |
//+------------------------------------------------------------------+
bool IsSwingHigh(const double &high_price[], int index, int lookback)
  {
   for(int i = 1; i <= lookback; i++)
     {
      if(high_price[index] < high_price[index - i] || high_price[index] < high_price[index + i])
         return false;
     }
   return true;
  }

Figura 3. Topos e fundos de swing

A função IsSwingLow() permite identificar um fundo de swing no gráfico de preços. Esse fundo ocorre quando a mínima de uma barra é inferior às mínimas das barras ao seu redor. A função recebe um array de mínimas, um intervalo de verificação que determina quantas barras devem ser examinadas antes e depois da barra atual e o índice da barra que será analisada. Em seguida, compara a mínima da barra atual com as mínimas de cada uma das barras vizinhas. Se a barra atual não formar um fundo de swing, a função retorna false. Se sua mínima for inferior às mínimas de todas as barras ao redor, retorna true, confirmando o fundo de swing.

Da mesma forma, a função IsSwingHigh() identifica os topos de swing. Um topo ocorre quando a máxima de uma barra supera as máximas das barras situadas dentro do intervalo definido antes e depois dela. O procedimento é semelhante ao da função IsSwingLow(), mas compara as máximas em vez das mínimas. Para isso, a função percorre as barras vizinhas ao índice analisado e verifica se alguma delas apresenta uma máxima superior à da barra atual. Caso isso ocorra, retorna false, pois a barra atual não constitui um topo de swing. O topo de swing é confirmado quando a máxima da barra atual supera as máximas de todas as barras ao seu redor.

Na análise de padrões de ondas, como as Ondas de Wolfe, essas funções são fundamentais para identificar os topos e fundos nos dados de preços. Os topos e fundos de swing são conectados para formar as ondas que compõem esses padrões. Ao identificar programaticamente pontos específicos de reversão, essas funções permitem que o EA construa estruturas de ondas válidas com base no comportamento real do mercado.

Nas duas funções, o parâmetro de intervalo de verificação desempenha um papel fundamental. Ele determina quantas barras serão examinadas antes e depois da barra atual. Um intervalo de verificação maior reduz a quantidade de sinais falsos, pois exige que o ponto de swing se destaque mais em relação à movimentação dos preços nas barras vizinhas. Essas funções constituem a base da lógica de identificação de ondas nos padrões de análise técnica e são frequentemente utilizadas pelo EA para detectar possíveis setups.

Obtenção dos dados das velas e identificação dos pontos de swing

Como de costume, trabalhar com padrões gráficos exige analisar diretamente a ação do preço. Para realizar essa análise de maneira eficaz, o primeiro passo, e também o mais importante, é obter os dados das velas do gráfico. Sem acesso aos dados das barras, não é possível identificar os topos e fundos de swing necessários para reconhecer padrões gráficos como as Ondas de Wolfe. Vamos obter os preços de abertura, máxima, mínima e fechamento, além dos horários, de uma quantidade predefinida de barras recentes. Esses valores serão armazenados em arrays, e os dados das velas anteriores serão examinados para localizar pontos importantes de reversão do preço. A partir desses pontos de swing, podemos começar a identificar sequências de ondas que possam corresponder ao padrão de Ondas de Wolfe. Todas as etapas seguintes, como o traçado das extensões de Fibonacci, a validação da estrutura do padrão e o traçado das linhas de tendência, dependem da identificação precisa desses pontos.

Exemplo:
input ENUM_TIMEFRAMES timeframe = PERIOD_CURRENT;
int bars_check  = 500;
datetime time_bar;
double total_symbol_bars;

double open[];
double close[];
double low[];
double high[];
datetime time[];

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   total_symbol_bars = Bars(_Symbol, timeframe);
   time_bar = iTime(_Symbol, timeframe, 0);
   CopyOpen(_Symbol, timeframe, time_bar, bars_check, open);
   CopyClose(_Symbol, timeframe, time_bar, bars_check, close);
   CopyLow(_Symbol, timeframe, time_bar, bars_check, low);
   CopyHigh(_Symbol, timeframe, time_bar, bars_check, high);
   CopyTime(_Symbol, timeframe, time_bar, bars_check, time);
  }

//+------------------------------------------------------------------+
//| FUNCTION FOR SWING LOW                                           |
//+------------------------------------------------------------------+
bool IsSwingLow(const double &low_price[], int index, int lookback)
  {
   for(int i = 1; i <= lookback; i++)
     {
      if(low_price[index] > low_price[index - i] || low_price[index] > low_price[index + i])
         return false;
     }
   return true;
  }

//+------------------------------------------------------------------+
//| FUNCTION FOR SWING HIGH                                          |
//+------------------------------------------------------------------+
bool IsSwingHigh(const double &high_price[], int index, int lookback)
  {
   for(int i = 1; i <= lookback; i++)
     {
      if(high_price[index] < high_price[index - i] || high_price[index] < high_price[index + i])
         return false;
     }
   return true;
  }

Explicação:

Para controlar a quantidade de barras históricas analisadas, o EA inicializa variáveis importantes, como timeframe e bars_check. Também declara arrays para armazenar os dados das velas, necessários para identificar os pontos de swing e os padrões gráficos. O EA utiliza as funções Bars() e iTime() para determinar quantas barras estão disponíveis e definir o momento a partir do qual os dados devem ser copiados. Em seguida, as funções Copy*() carregam os dados históricos de preços nos arrays para análise.

Considerando um período e uma quantidade de barras definidos, funções como CopyOpen() carregam nos arrays dados específicos de preços, como abertura, fechamento, máxima ou mínima. Embora cada função trabalhe com um tipo de preço diferente, todas seguem a mesma lógica. As funções IsSwingLow e IsSwingHigh ajudam a identificar pontos importantes de reversão ao verificar se a mínima ou a máxima de uma vela constitui um extremo local em relação às velas vizinhas, dentro do intervalo de verificação. Quando essa condição é satisfeita, a vela é identificada como um ponto de swing válido.

O uso dessas funções é essencial para identificar os cinco pontos que compõem padrões gráficos como as Ondas de Wolfe. Essas funções de identificação de pontos de swing continuarão sendo úteis sempre que trabalharmos com padrões gráficos. Elas são a base da nossa abordagem, e este artigo, assim como os demais da série, aprofunda os conceitos fundamentais já apresentados. Ainda assim, cada novo artigo precisa explicar esses conceitos com clareza, especialmente para quem está acompanhando apenas esta parte da série e não leu as anteriores.

Figura 4. Dados das barras


2. Criação de um EA

Como funciona o EA

Desenvolver um EA baseado nas Ondas de Wolfe exige compreender a lógica que define oportunidades válidas de compra e venda. Para funcionar de maneira eficaz, o EA precisa identificar essas ondas nos dados históricos de preços e verificar se elas atendem a determinados critérios, como simetria e conformidade com os níveis de Fibonacci.

Antes de começar a programar, é essencial definir o conjunto básico de regras que orientará as decisões do EA. Isso inclui estabelecer o que caracteriza um padrão válido, quando considerar uma possível entrada e como evitar formações falsas. Com essas regras definidas, o EA reagirá apenas a setups de alta probabilidade que sigam a estrutura clássica das Ondas de Wolfe.

Esta parte do artigo estabelece a base necessária para posteriormente transformar a lógica do padrão em etapas de programação. Vamos examinar como representar visualmente a estrutura no gráfico a partir dos principais pontos das ondas e preparar os dados que o EA utilizará em sua análise.

Lógica de venda

  • O EA identificará quatro pontos correspondentes às ondas 1, 2, 3 e 4 de um padrão baixista de Ondas de Wolfe.
  • Serão traçadas três linhas de tendência no gráfico. A primeira conecta as ondas 1 e 3 e delimita a parte superior da estrutura. A segunda liga as ondas 2 e 4, definindo o limite inferior. A terceira conecta as ondas 1 e 4 e é utilizada para projetar uma possível região-alvo de lucro.
  • Um objeto de extensão de Fibonacci será adicionado ao gráfico para os segmentos entre as ondas 1 e 2 e entre as ondas 3 e 4. Isso permitirá verificar se as ondas 3 e 5 atendem aos critérios de extensão exigidos pela estrutura do padrão de Ondas de Wolfe.
  • O EA monitorará um rompimento de alta, caracterizado pelo cruzamento da linha de tendência traçada entre as ondas 1 e 3 e pelo fechamento do preço acima dela.
  • Após o rompimento, o EA aguardará uma vela baixista de confirmação, que cruze essa mesma linha de volta para baixo e feche abaixo dela.
  • Assim que essa vela de confirmação da reversão fechar, o EA enviará imediatamente uma ordem de venda.
  • Em seguida, o EA examinará todas as barras entre a vela de rompimento e a vela de reversão para identificar a maior máxima desse intervalo. Essa máxima será considerada o topo da onda 5 e utilizada como nível de stop-loss.
  • O take-profit será definido. Isso permitirá manter a operação aberta até que o preço alcance a projeção da linha de tendência traçada entre as ondas 1 e 4. Essa linha servirá de gatilho final para a realização do lucro.
  • Assim que o preço tocar a linha de tendência traçada entre as ondas 1 e 4, o EA fechará automaticamente a operação de venda.

Figura 5. Lógica de venda

Lógica de compra

  • O EA identificará quatro pontos correspondentes às ondas 1, 2, 3 e 4 de um padrão altista de Ondas de Wolfe.
  • Serão traçadas três linhas de tendência no gráfico. A primeira conecta as ondas 1 e 3 e delimita a parte inferior da estrutura. A segunda liga as ondas 2 e 4, estabelecendo o limite superior. A terceira conecta as ondas 1 e 4 e é utilizada para projetar uma possível região-alvo de lucro.
  • Um objeto de extensão de Fibonacci será adicionado ao gráfico para os segmentos entre as ondas 1 e 2 e entre as ondas 3 e 4. Isso permitirá verificar se as ondas 3 e 5 estão dentro das faixas de extensão exigidas para um padrão válido de Ondas de Wolfe.
  • O EA monitorará um rompimento de baixa, caracterizado pelo cruzamento da linha de tendência traçada entre as ondas 1 e 3 e pelo fechamento do preço abaixo dela.
  • Após o rompimento, o EA aguardará uma vela altista de confirmação, que cruze essa mesma linha de volta para cima e feche acima dela.
  • Assim que essa vela de confirmação fechar, o EA enviará imediatamente uma ordem de compra.
  • Em seguida, o EA examinará todas as barras entre a vela de rompimento e a vela de reversão para identificar a menor mínima desse intervalo. Essa mínima será considerada o fundo da onda 5 e utilizada como nível de stop-loss.
  • O take-profit será definido. A operação permanecerá aberta até que o preço alcance a projeção da linha de tendência traçada entre as ondas 1 e 4, que representa a região-alvo de lucro.
  • Assim que o preço tocar a linha de tendência que conecta as ondas 1 e 4, o EA fechará automaticamente a operação de compra.

Figura 6. Figura 5. Lógica de compra

Observação: Este projeto tem como objetivo ensinar programação em MQL5 e estratégias baseadas em padrões gráficos, não sendo destinado à negociação em tempo real. Consulte sempre um consultor financeiro antes de aplicar qualquer estratégia em operações reais.


Conclusão

Neste artigo, você conheceu o padrão de Ondas de Wolfe, sua estrutura e a lógica necessária para desenvolver um EA baseado nele. Examinamos como identificar pontos válidos das ondas a partir de topos e fundos de swing, além dos principais critérios que definem os setups de compra e venda. No próximo artigo, veremos como implementar essa lógica em MQL5 e transformar a estratégia de Ondas de Wolfe em um sistema de negociação automatizada.

Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/18555

Arquivos anexados |
Caminhe em novos trilhos: Personalize indicadores no MQL5 Caminhe em novos trilhos: Personalize indicadores no MQL5
Vou agora listar todas as possibilidades novas e recursos do novo terminal e linguagem. Elas são várias, e algumas novidades valem a discussão em um artigo separado. Além disso, não há códigos aqui escritos com programação orientada ao objeto, é um tópico muito importante para ser simplesmente mencionado em um contexto como vantagens adicionais para os desenvolvedores. Neste artigo vamos considerar os indicadores, sua estrutura, desenho, tipos e seus detalhes de programação em comparação com o MQL4. Espero que este artigo seja útil tanto para desenvolvedores iniciantes quanto para experientes, talvez alguns deles encontrem algo novo.
Recursos do Assistente MQL5 que você precisa conhecer (Parte 73): Uso de padrões do Ichimoku e do ADX-Wilder Recursos do Assistente MQL5 que você precisa conhecer (Parte 73): Uso de padrões do Ichimoku e do ADX-Wilder
O indicador Ichimoku (Ichimoku-Kinko-Hyo) e o oscilador ADX-Wilder formam uma combinação de indicadores complementares que pode ser utilizada em um EA MQL5. O Ichimoku oferece diversas possibilidades de análise, mas, neste artigo, vamos utilizá-lo principalmente para identificar níveis de suporte e resistência. Também usaremos o ADX para identificar a tendência. Como de costume, recorreremos ao Assistente MQL5 para construir os padrões e testar o potencial dessa combinação de indicadores.
Está chegando o novo MetaTrader 5 e MQL5 Está chegando o novo MetaTrader 5 e MQL5
Esta é apenas uma breve resenha do MetaTrader 5. Eu não posso descrever todos os novos recursos do sistema por um período tão curto de tempo - os testes começaram em 09.09.2009. Esta é uma data simbólica, e tenho certeza que será um número de sorte. Alguns dias passaram-se desde que eu obtive a versão beta do terminal MetaTrader 5 e MQL5. Eu ainda não consegui testar todos os seus recursos, mas já estou impressionado.
Automatização de estratégias de negociação em MQL5 (Parte 22): Desenvolvimento de um sistema de recuperação por zonas para negociação a favor da tendência com o indicador Envelopes Automatização de estratégias de negociação em MQL5 (Parte 22): Desenvolvimento de um sistema de recuperação por zonas para negociação a favor da tendência com o indicador Envelopes
Desenvolveremos um sistema de recuperação por zonas (Zone Recovery System) integrado a uma estratégia de negociação a favor da tendência baseada no indicador Envelopes (Envelopes trend-trading strategy), utilizando MQL5. Também apresentaremos a arquitetura que combina os indicadores RSI e Envelopes para abrir operações e gerenciar a recuperação por zonas, com o objetivo de minimizar as perdas. Por meio da implementação prática e dos testes, demonstraremos como criar um sistema de negociação automatizada eficiente para mercados dinâmicos.