English Русский 中文 Español Deutsch 日本語
Melhorando o reconhecimento de padrões de velas por meio de velas Doji

Melhorando o reconhecimento de padrões de velas por meio de velas Doji

MetaTrader 5Indicadores | 2 março 2022, 13:10
818 0
ds2
ds2

Introdução

Uma das vantagens dos padrões de velas é sua simplicidade: a descrição consiste em apenas algumas frases, apenas algumas barras ou mesmo uma são analisadas, e essa análise é acessível até para traders iniciantes.

Outra vantagem é que é pouco exigente para o terminal e seu hardware, já que nenhum indicador precisa ser construído. Isso era especialmente verdade décadas atrás, quando os computadores não eram tão avançados quanto são hoje. Naqueles dias, foram inventados muitos dos padrões de velas.

Mas por trás da simplicidade dos padrões de velas, há também uma séria desvantagem, que pode ser eliminada usando os abundantes recursos das modernas ferramentas de automação de negociação. Essa desvantagem é um arredondamento grosseiro das situações de mercado no contexto dos limites das barras, o que não pode deixar de afetar a eficiência da negociação.


Desvantagem das velas clássicas e a ideia de eliminá-la

As barras no gráfico têm horários de início e término discretos e predefinidos. E os eventos nos mercados ocorrem continuamente. Algum movimento importante de preço pode começar em uma barra e terminar em outra e, portanto, parecerá completamente diferente no gráfico do que se tivesse acontecido inteiramente dentro da barra. O mesmo movimento.

Vejamos o exemplo das velas Doji. O mais interessante deles é chamado de "lápide" (ou invertido - "Libélula"), pois tem uma forma bem reconhecida e é um sinal potencial para o fim da tendência e sua reversão. Em tal vela, os preços de abertura e fechamento são aproximadamente iguais, a sombra superior é muito alta e quase não há sombra inferior:

Figura 1. Vela Doji 'lápide' ideal


No exemplo do gráfico de preços abaixo, não existem essas velas Doji:

Figura 2. Barras comuns no período H4


Mas é? Vamos ver quais movimentos ocorreram dentro dessas barras, vamos mudar para um período menor:


Figura 3. Barras comuns no período H1


Na figura acima, você pode ver que algumas barras têm preços de fechamento aproximadamente iguais aos preços de abertura de outras barras. E se você combinar todas as barras no intervalo da 1ª à 5ª hora, obterá uma vela Doji. Da mesma forma para barras de 6 a 9 e de 7 a 9 horas. Vamos chamar esses grupos de barras de "metabarras":

Figura 4. Metabarras no período H1


Isso não é algum tipo de mágica ou truque. Estas são velas Doji reais, baseadas em movimentos de preços reais de barras de 5, 4 e 3 horas, que não eram visíveis no período H4 padrão, simplesmente porque há um comprimento de barra codificado de 4 horas e um horário de início de barra rígido. Uma diferença de comprimento de apenas 1 hora ou um deslocamento dos limites da barra em 1 hora leva a uma diferença séria no resultado.

Quantas dessas velas Doji os traders não veem? Afinal este é um grande número de sinais perdidos para negociação.

É muito demorado analisar manualmente os gráficos procurando por essas metabarras. Seria ótimo criar um indicador que fizesse isso automaticamente.


Desenvolvimento de um indicador Doji melhorado

Vamos decidir quais parâmetros de entrada esse indicador deve ter.

Vamos relembrar com mais detalhes em que partes consiste a vela Doji.

Figura 5. Estrutura da vela

Height — altura total da vela.

Body — altura do corpo da vela.

Shadow — altura da sombra mais curta da vela. Uma barra regular tem duas sombras: superior e inferior. Mas é justamente na vela Doji que nos interessa apenas a mais curta delas, pois a descrição das velas Doji diz que ela deve estar quase ausente, porém nada é dito sobre a sombra oposta a ela.

As velas Doji diferem de outras barras e velas nas proporções especiais de suas partes. Ou seja, o corpo da vela deve estar quase ausente e uma das sombras também. Mas “quase ausente” é um conceito difuso. Supõe-se que cada trader decida por si mesmo se a barra é semelhante o suficiente à vela Doji ou não. Mas para um indicador programado, são necessários critérios claros e formais. Isso significa que precisamos de, de alguma forma, definir todas essas proporções nos parâmetros de entrada do indicador.

input double  Candle_BodyPowerMax      = 0.2;    // Максимальная высота тела относительно высоты свечи

Ou seja, Candle_BodyPowerMax = Body / Height (veja a figura acima), ou melhor, qual pode ser o limite dessa proporção. Todas as barras nas quais essa proporção é igual ou menor (até zero) que a especificada é uma vela Doji.

Da mesma forma com a sombra:

input double  Candle_ShadowPowerMax    = 0.2;    // Максимальная высота тени относительно высоты свечи

Candle_ShadowPowerMax = Shadow / Height (veja a figura acima), ou melhor, qual pode ser o limite dessa proporção. Todas as barras com essa proporção igual ou menor que (até zero) a especificada é uma vela Doji.

Para um indicador que gera velas Doji com base em barras únicas, esses parâmetros de entrada podem ser suficientes. Mas, no nosso caso, o indicador funcionará com metabarras, portanto, também precisamos de um recuso que defina o número de barras incluídas na metabarra. Ou seja, devemos definir a largura da metabarra.


Figura 6. Parâmetro especial de vela construída em metabarras


Essa largura pode não ser fixa (esta é a vantagem das metabarras sobre os timeframes comuns), mas definida pelo trader como um intervalo:

input int     Candle_WidthMin          = 1;      // Минимальная ширина свечи, баров
input int     Candle_WidthMax          = 2;      // Максимальная ширина свечи, баров

A propósito, se um trader definir Candle_WidthMin e Candle_WidthMax iguais a 1 para o indicador, todas as metabarras serão iguais às barras comuns, ou seja, o indicador construirá velas Doji da maneira clássica. Caso contrário, o indicador irá percorrer todas as sequências de barras na faixa de largura especificada e verificar se elas juntas formam uma vela Doji.

Como no caso de metabarras, o indicador em cada barra opera não apenas na própria barra, mas também em várias outras mais antigas, no evento OnInit (inicialização do indicador) precisamos informar ao terminal que não desenhe o indicador para todo o histórico e faça no início um pequeno recuo:

SkipBars = Candle_WidthMax;
PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, SkipBars);

A variável SkipBars deve ser declarada como uma variável global (do tipo int) e utilizada nos cálculos do indicador (no OnCalculate), para que o indicador não seja desenhado nas barras mais antigas do histórico nem calculado (o que causará uma metabarra além do histórico e, portanto, um erro).

A seguir, descreverei o algoritmo da parte principal do indicador em termos gerais.

OnCalculate() organiza o ciclo de indicador usual — enumeração de todas as barras do indicador não calculadas. Para realmente calcular todos os valores do indicador.
Dentro deste ciclo geral, outro ciclo é efetuado para construir todas as metabarras possíveis que começam com a barra indicadora calculada atual e são expandidas para o passado. Este é um ciclo de 1 a Candle_WidthMax (parâmetro de entrada do indicador). Ou seja, inicialmente a metabarra é igual a uma barra de preço normal. A cada iteração, outra barra do histórico de preços é adicionada à metabarra e assim por diante.

Adicionar uma barra a uma metabarra é uma comparação dos preços OHLC da barra com o OHLC da mesma. Como resultado, a metabarra acumula os valores mais extremos, de forma gradual, passo a passo, calculando suas dimensões crescentes.

Para cada metabar, são calculados os parâmetros da vela correspondente (altura do corpo, altura da sombra, largura). E eles são verificados quanto ao cumprimento dos valores limite especificados nos parâmetros de entrada do indicador.

Se a vela for a vela Doji desejada, acontece o seguinte:

O indicador desenha uma linha vertical na direção (para cima ou para baixo) na qual a vela está orientada. A altura da linha é igual à largura desta vela.

O ciclo de expansão da metabarra é interrompido.

O código completo do indicador está no apêndice do artigo.

Vamos ver como esse indicador funciona no terminal.

Aqui está o indicador encontrado as velas Doji de uma barra:

Figura 7. O indicador sinaliza a presença de velas Doji com largura de 1 barra


As velas Doji no gráfico estão 1 barra atrás dos sinais do indicador, pois este último analisa apenas as barras concluídas. O objetivo do indicador não é mostrar as velas em si, mas dar um sinal em tempo real de que a vela Doji acabou de ser concluída (e que não mudará). Uma vela neste caso pode consistir em muitas barras. O indicador informa a largura da vela encontrada por seu valor (a altura de sua linha); neste caso, é "1" para uma vela direcionada para cima e "-1" para uma para baixo.

E aqui está um exemplo de uma vela Doji composta por cinco barras. Para procurar apenas essas velas compostas, foi criado este indicador:

Figura 8. O indicador sinaliza a presença de uma vela Doji com largura de 5 barras


Pode-se ver que o algoritmo de busca de velas Doji funciona corretamente. Na figura acima, destaquei as dimensões da metabarra encontrada e seus níveis de preços OHLC.

Mas para a efetiva aplicação prática deste indicador, deve ser levado em consideração mais um ponto. As velas vêm em alturas diferentes: muito grandes e muito pequenas. Tão pequenas que estão no nível de ruído, menores que as barras vizinhas usuais, portanto, dificilmente podem ser considerados movimentos de preços significativos. A utilidade prática dessas pequenas velas Doji é zero, elas não podem ser sinais do início ou fim de uma tendência, ou sinais de qualquer outra coisa.

Seria útil melhorar o indicador para que ele mostrasse apenas grandes velas Doji. Parece que a solução para este problema é simples: só precisamos adicionar um parâmetro de entrada ao indicador como:

input double  Candle_HeightMin          = 0.01;   // Минимальная высота свечи (в абсолютных ценах)

E no OnCalculate filtramos todas as velas encontradas com este critério.

Esta solução funcionaria perfeitamente se as velas fossem construídas com base em barras simples comuns. Mas por causa das metabarras, surge um problema que reduz a eficácia de tal solução. Uma barra comum tem uma altura média (estatisticamente) — vamos chamá-la de valor h. Se estivermos procurando por velas Doji grandes, podemos definir o indicador Candle_HeightMin igual a, por exemplo, 2*h. Mas e se estivermos procurando grandes velas Doji construídas em metabarras, que podem ter uma largura de, por exemplo, de 1 a 4 barras? Então, uma metabarra consistindo de 4 barras de altura média pode ter uma altura total de 2*h (se as primeiras duas barras subirem uma após a outra e depois mais duas barras descerem).

Uma vela Doji em tal metabarra será exibida como um indicador, pois passará a condição de altura mínima. Mas será que isso está certo? Na verdade, essa vela consiste em barras medíocres e, portanto, dificilmente pode ser um sinal de um forte movimento de preços.

Mas também seria errado definir Candle_HeightMin como, por exemplo, 4*h nas configurações do indicador neste caso, pois em nosso exemplo as metabarras podem ter 1 barra de largura e, para ela, pode ser um limite muito forte, o indicador perderá boas velas de 2*h e 3*h que gostaríamos de ver.

Então, precisamos criar um filtro para a altura da metabarra que caracterizaria a força do movimento do preço, igualmente poderoso e alcançável tanto para uma metabarra de uma barra quanto para uma de quatro barras.

A solução para este problema é bastante simples. É necessário definir Candle_HeightMin não em preços absolutos, mas em preços relativos. Ou seja, não deve ser a altura absoluta da metabarra, mas sim sua altura por unidade de tempo. Height/Width velas.

Você pode ir ainda mais longe e definir esse parâmetro em pontos de preço. Assim, você obtém um indicador cujas configurações nem dependem do par de moedas selecionado. Afinal, todas as outras configurações (a altura do corpo e a sombra da vela Doji) também não estão vinculadas a preços absolutos.

Desse modo, em vez do parâmetro de entrada Candle_HeightMin, fazemos um um pouco diferente:

input double  Candle_HeightPowerMin          = 0.5;   // Мощность свечи = Высота/Ширина, пунктов в минуту

O filtro com este critério no código do indicador ficará assim:

if ((CandleHeight/CandleWidth/_Point) < (Candle_HeightPowerMin*PeriodSeconds()/60)) DojiExists = false;

Agora o indicador está pronto para uso prático. O código completo do indicador está contido no apêndice do artigo.

Teste de indicador

A hora da verdade chegou. Vamos realizar um teste para calcular quantas vezes o indicador resultante em metabarras encontra velas Doji de forma mais eficaz do que a versão clássica de "uma barra - uma vela".

No gráfico EURUSD com o timeframe H4, definimos o indicador com as seguintes configurações:

Candle_WidthMin  
1
Candle_WidthMax    1

Ou seja, vamos configurar o indicador para procurar apenas velas Doji de uma barra.

Definimos as dimensões limitantes das partes da vela para que o corpo total e a sombra da vela Doji sejam menos da metade de toda a altura da vela:

Candle_BodyPowerMax      
0.2
Candle_ShadowPowerMax   
0.2

Essas são configurações bastante liberais para o tamanho das partes da vela e, em uma aplicação real, alguns trades podem querer defini-las como 0,1 ou muito perto de zero para que as velas Doji sejam mais ideais. Mas agora o objetivo do teste é comparar o número de velas encontradas por diferentes métodos (uma barra e com metabarras). E para que essas estatísticas tenham um erro menor, é bom fornecer tamanhos de amostra grandes.

Pelas mesmas razões, não definiremos requisitos muito altos para a altura da vela. Vamos definir este filtro como zero para ver todas as velas Doji, fortes e fracas:

Candle_HeightPowerMin   
0

Assim, todos os parâmetros de entrada são definidos. O seguinte gráfico do indicador foi obtido no terminal:


Figura 9. Indicador de velas Doji baseado em barras H4 clássicas (simples)


Se você observar o gráfico, poderá contar que, por exemplo, havia apenas 9 velas Doji em dois meses. Relembro que este é um método clássico de construção de velas, ou seja, em barras simples.

Para avaliar a vantagem de usar metabarras, vamos agora alterar o timeframe para H1 e alterar os parâmetros de entrada do indicador:

Candle_WidthMin  
4
Candle_WidthMax   
4

Ou seja, o indicador agora procurará velas com largura de 4 barras H1. Em largura, esta metabarra é equivalente à versão anterior — 1 barra H4 clássica. A única diferença é que as barras clássicas têm horas de início rigorosas: 0:00, 4:00, 8:00, etc. E a metabarra terá 4 vezes mais variações de início: 0:00, 1:00, 2:00, 3:00, 4:00, etc. A largura é a mesma, mas com muito mais flexibilidade ao longo do tempo. Vamos ver o que isso vai levar na prática:


FIgura 10. O indicador de velas Doji construído em metabarras de 4 barras H1


A Figura 10 mostra o mesmo segmento de preço da Figura 9. Você pode ver quantas velas Doji adicionais o indicador encontrou. E durante dois meses, no total, o indicador baseado nas metabarras identificou 54 velas Doji.

Isso é 6 vezes mais do que o método clássico! A vantagem do novo método é óbvia.

Bem, agora vamos verificar a variação não apenas com um horário de início flexível, mas também com uma largura de metabarra flexível em H1, ligeiramente flutuante em relação à barra clássica em H4:

Candle_WidthMin  
3
Candle_WidthMax   
5


Figura 11. Indicador de vela Doji construído em metabarras de 3-5 barras de largura H1


Como resultado, o número de velas Doji no mesmo período aumentou ainda mais. Observe também que o timeframe H5 não existe no terminal, ou seja, velas Doji de tal largura seriam impossíveis de construir usando métodos clássicos em princípio.

O aumento máximo na detecção de velas Doji em relação ao método clássico pode ser obtido se todos os timeframes não padrão possíveis forem cobertos. Para fazer isso, definimos o indicador usando o timeframe mínimo disponível M1 com as seguintes configurações:

Candle_WidthMin  
180
Candle_WidthMax   
300

À primeira vista, isso é equivalente ao intervalo 3-5 em H1. Mas com um tempo de início de barra muito mais flexível - agora medido em minutos em vez de horas. No entanto, a diferença é muito mais profunda, porque, afinal, agora teremos metabarras com uma largura extremamente flexível: agora podem ser não apenas valores inteiros de H1 (3, 4, 5), mas também reais: por exemplo, 199 M1 é 3,32 H1 ou 6,63 M30, ou 39,8 M5 etc. Estes são timeframes extremamente fora do padrão para os padrões de negociação clássica, com os quais os traders nunca construíram nenhuma vela. E aqui centenas desses timeframes são combinados em um indicador, em um gráfico:


Figura 12. Indicador de vela Doji baseado em metabarras com largura de 180-300 barras M1


O número de sinais indicadores aqui já está na casa dos milhares. Figurativamente falando, o indicador já está “enlouquecendo” – as velas Doji são encontradas em quase todos os lugares. Como as metabarras neste exemplo são muito largas (duas ordens (!) mais largas que uma barra), elas se sobrepõem fortemente. Como o indicador informa a largura de todas as velas Doji encontradas, isso permite que você encontre seus limites no gráfico de preços. Por exemplo, eu circulei algumas dessas metabarras com retângulos coloridos.

O que é particularmente impressionante (como visto na figura acima) é que a mesma longa sequência de preços neste caso pode ser parte de uma vela Doji subindo e parte de uma vela caindo! Isso pode parecer loucura, caos, incompatível com qualquer tipo de negociação. Mas, na verdade, não há erro ou problema com isso. Afinal, não colocamos um filtro na altura das velas detectadas – é por isso que muitas delas têm uma altura pequena – ou seja, no nível de ruído das flutuações dos preços de mercado, e, por isso, mudam de direção tão facilmente em pouco deslocamento de tempo ou uma pequena mudança na largura. Vamos tentar ir além desse ruído com um filtro nas configurações do indicador:

Candle_HeightPowerMin   
2

Bem, é uma questão completamente diferente - agora apenas as velas fortes são deixadas no gráfico, e as sequências dessas velas detectadas agora têm as mesmas direções:


Figura 13. Indicador de velas Doji com base nas metabarras de 180-300 barras de largura M1, filtradas pela altura das velas


O timeframe M1 com metabarras largas também possibilitou olhar para uma nova dimensão que antes era inacessível. Cada densa sequência de velas exibida com tal indicador descreve, de fato, uma vela, mas mudando ao longo do tempo. Talvez, a análise dessa dinâmica permita que alguém tire algumas conclusões adicionais sobre velas que não estão disponíveis na abordagem clássica, onde uma vela era considerada algo estático, rigidamente preso a uma barra. E não havia nenhuma informação sobre o que acontece com a vela se ela for movida um pouco, expandida no tempo... Agora essa medida está disponível para pesquisa.


Conclusão

Experimentos mostraram de forma convincente que o uso de metabarras permite uma abordagem mais detalhada para a análise de padrões de velas:

  • encontrá-los com muito mais frequência do que os métodos clássicos;

  • encontrá-los mesmo em timeframes onde os métodos clássicos são basicamente indisponíveis;

  • fazê-lo de forma flexível e conveniente (usando um gráfico em vez de muitos), com configurações para tarefas específicas do trader;

  • acompanhe com precisão o início e o fim da aparência das velas, veja a dinâmica das mudanças em cada vela ao longo do período de sua vida.

E como as técnicas descritas neste artigo são aplicáveis não apenas ao Doji, isso abre espaço para uma nova interpretação de todos os clássicos de velas.

Por uma questão de objetividade, vale acrescentar que nem todas as nuances foram consideradas no artigo. Afinal, um indicador é apenas isso. O efeito prático do uso de metabarras na forma de indicadores pode diferir do uso em estratégias de negociação. As próprias velas Doji não são sinais de negociação, portanto, você não deve esperar que o número de negócios com metabarras aumente tanto quanto as leituras do indicador aumentarem. A negociação usando velas Doji requer análise adicional, verificação de condições de mercado adicionais. Será possível combinar metabarras com outros tipos de análise (em barras clássicas), quão conveniente será? Quão realista o número de negócios aumentará? Afinal, vimos no timeframe M1 que um grande número de sinais indicadores sucessivos são essencialmente uma vela. Sem dúvida, sua extensão no tempo e sua volatilidade lhe dão muitas oportunidades de se encaixar em várias situações de mercado que surgiram durante sua existência. O que aumenta as chances de dar um sinal útil (para abrir/fechar um negócio) onde uma vela clássica não teria dado (teria dado na hora errada).

Apenas um experimento fornecerá estatísticas específicas sobre o aumento do número de negócios. Este é um tópico bastante grande para um estudo separado. Portanto, se um artigo sobre o indicador despertar o interesse dos traders, provavelmente, em um dos artigos a seguir, continuarei o experimento - já com uma estratégia de negociação.

Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/9801

Arquivos anexados |
MetaDoji.mq5 (10.49 KB)
Usando o AutoIt com MQL5 Usando o AutoIt com MQL5
Este artigo descreve como criar scripts para o terminal MetraTrader 5, integrando MQL5 com AutoIt. Vou mostrar como automatizar várias tarefas usando a interface do usuário do terminal e apresentar uma classe que usa a biblioteca AutoItX.
Indicadores múltiplos em um gráfico (Parte 03): Desenvolvendo definições para usuários Indicadores múltiplos em um gráfico (Parte 03): Desenvolvendo definições para usuários
Primeira atualização nas funcionalidades no sistema indicador. No artigo anterior Indicadores múltiplos em um gráfico eu expliquei o código base para poder usar mais de um indicador dentro de uma sub janela, mas aquilo que foi apresentado foi apenas a base inicial de um sistema muito maior.
Matrizes e vetores em MQL5 Matrizes e vetores em MQL5
Os tipos de dados especiais matrix e vector permitem escrever um código que se aproxima da notação matemática. Isto poupa o trabalho de criar laços aninhados e de lembrar de indexar corretamente as matrizes que estão envolvidas no cálculo. Isto aumenta a confiabilidade e a velocidade de desenvolvimento de programas complexos.
Indicadores múltiplos em um gráfico (Parte 04): Iniciando pelo EA Indicadores múltiplos em um gráfico (Parte 04): Iniciando pelo EA
Em artigos anteriores, eu expliquei como criar um indicador com múltiplas sub janela, mas apesar de ser interessante de se fazer, quando usamos um indicador personalizado. Aqui vamos entender como adicionar múltiplas janelas em um EA.