English Русский 中文 Español Deutsch 日本語 한국어 Français Italiano Türkçe
Criando Filtros Digitais Sem Atraso

Criando Filtros Digitais Sem Atraso

MetaTrader 5Indicadores | 14 julho 2014, 09:54
1 715 0
Konstantin Gruzdev
Konstantin Gruzdev

Introdução

O artigo descreve uma das abordagens para a determinação de um sinal útil (tendência) num fluxo de dados. Pequenos testes de filtragem (suavização) aplicados às cotações do mercado demonstram o potencial para a criação de filtros digitais sem atrasos (indicadores) que não são redesenhados nas últimas barras.


Abordagem Padronizada

Esta abordagem é baseada nos métodos clássicos de séries temporais para suavização. Existem muitos artigos dedicados a este tema tanto aqui como em outros websites. Os resultados também são clássicos:

  1. As mudanças nas tendências são exibidas com latência;
  2. Melhor resposta do indicador (filtro digital) suavizando a diminuição da qualidade;
  3. As tentativas de implementar indicadores sem atrasos levam ao redesenho das últimas amostras (barras).

Ao passo que os traders aprenderam a lidar com essas coisas usando a persistência dos processos econômicos e outros truques, isso seria inaceitável na avaliação de dados experimentais em tempo real, por exemplo, ao testar aeroestruturas.


O Problema Principal

É um fato conhecido que a maioria dos sistemas de negociação se tornam obsoletos com o decorrer do tempo e que os indicadores são úteis ao longo de certos intervalos. Isto pode ser facilmente explicado: cotações de mercado não são estacionárias. A definição de um processo estacionário está disponível no site da Wikipedia:

Um processo estacionário é um processo estocástico, cuja distribuição de probabilidade conjunta não muda quando deslocado no tempo.

A julgar por esta definição, os métodos de análise de séries temporais estacionários não são aplicáveis ​​na análise técnica e isso é compreensível. Um habilidoso fazedor de mercado entra no mercado bagunçando todos os cálculos antes que possamos fazer algo com relação aos parâmetros de uma série conhecida das cotações do mercado.

Mesmo que isso pareça óbvio, muitos indicadores são baseados na teoria da análise de séries temporais estacionárias. Exemplos de tais indicadores são as médias móveis e suas modificações. No entanto, existem algumas tentativas para criar indicadores adaptativos. Até certo ponto eles supostamente levam em conta que as cotações de mercado não são estacionárias, mas não parecem fazer maravilhas. As tentativas de "punir" o fazedor de mercado usando os métodos atualmente conhecidos de análise de séries não-estacionárias (wavelets (ondaletas), modo empírico e outros) também não são bem sucedidos. Parece que um certo fator chave está constantemente sendo ignorado ou não identificado.

A principal razão para isso é que os métodos utilizados não são projetados para trabalhar com dados de fluxo. Todos (ou quase todos) foram desenvolvidos para análise técnica já conhecida, ou seja, falando em termos de análise dos dados históricos. Estes métodos são convenientes, por exemplo, em geofísica: Você sentiu o terremoto, obteve um sismograma e depois foi analisá-lo por alguns meses. Em outras palavras, estes métodos são apropriados onde as incertezas resultam na conclusão de uma série de tempo no decurso de uma de filtragem afetando o resultado final.

Quando analisamos os dados de fluxo experimentais ou cotações de mercado, estamos focados nos dados mais recentes recebidos e não no histórico. Estes são dados que não podem ser tratados com o uso dos algoritmos clássicos.


Filtro Cluster

Filtro Cluster é um conjunto de filtros digitais aproximando a sequência inicial. Filtros de cluster não devem ser confundidos com indicadores cluster.

Filtros cluster são convenientes ao analisar séries temporais não-estacionárias em tempo real, em outras palavras, o fluxo de dados. Isso significa que estes filtros tem o interesse principal em não suavizar os valores das séries de tempo já conhecidas, mas sim obter os valores suavizados mais prováveis ​​dos novos dados recebidos em tempo real.

Ao contrário de vários métodos de decomposição ou simplesmente filtros de frequência desejada, filtros cluster criam uma composição ou um leque de prováveis valores ​​de séries iniciais que são posteriormente analisados ​​para aproximação da sequência inicial. A sequência de entrada atua mais como uma referência do que o alvo da análise. A análise principal diz respeito aos valores calculados por um conjunto de filtros depois de processar os dados recebidos.

Figura 1. O diagrama de um filtro cluster simples

Figura 1. O diagrama de um filtro cluster simples

No caso geral, cada filtro incluído no cluster tem suas próprias características individuais e não está relacionado com os outros de qualquer forma. Algumas vezes estes filtros são personalizados para a análise de séries de tempo estacionária próprias, descrevendo as propriedades individuais da série inicial de tempo não estacionária. No caso mais simples, se a série não estacionária inicial modifica os seus parâmetros, os filtros de "switch" desligam. Assim, um filtro cluster controla as alterações em tempo real nas características.


Procedimento de Desenvolvimento do Filtro Cluster

Qualquer filtro cluster pode ser desenvolvido em três passos:

1. O primeiro passo é normalmente o mais difícil, mas é aqui que os modelos probabilísticos de fluxo de dados recebidos são formados. O número destes modelos pode ser arbitrariamente grande. Eles nem sempre estão relacionados a processos físicos que afetam os dados aproximados. Quanto mais os modelos precisamente descrevem a sequência aproximada, maior é a probabilidade de obter um conjunto de filtro cluster sem atraso.

2. No segundo passo, uma ou mais filtros digitais são criados para cada modelo. A condição mais geral para unir filtros conjuntamente num cluster é que eles pertençam aos modelos descrevendo a sequência aproximada.

3. Assim podemos ter um ou mais filtros num cluster. Consequentemente com cada nova amostra, temos o valor da amostra e um ou mais valores de filtro. Assim com cada amostra temos um vetor ou um ruído artificial composto de vários (dois no mínimo) valores. Tudo o que precisamos fazer agora é selecionar o valor mais adequado.


Um Exemplo de um Filtro Cluster Simples

Para ilustração vamos implementar um filtro cluster simples correspondente ao diagrama acima, utilizando cotações de mercado como sequência de entrada. Você pode simplesmente usar os fechamentos de preços de qualquer timeframe.

1. Descrição do modelo, nós vamos prosseguir com a seguinte premissa:

  • A sequência aproximada é não-estacionária, isto é, as suas características tendem a mudar com o decorrer do tempo.
  • O fechamento do preço de uma barra não é o preço real da barra. Em outras palavras, o fechamento do preço registrado de uma barra é um dos movimentos de ruído, assim como outros movimentos de preços nesta barra.
  • O preço real ou o valor real da sequência aproximada é entre o fechamento do preço da barra atual e o fechamento do preço da barra anterior.
  • A sequência aproximada tende a manter sua direção. Ou seja, se ela foi crescendo na barra anterior, ele tenderá a continuar crescendo na barra atual.

2. Seleção de filtros digitais. Por uma questão de simplicidade, usaremos dois filtros:

  • O primeiro filtro será uma Média Móvel Simples calculada com base nos últimos dois fechamentos dos preços. Eu acredito que isso se encaixa bem na terceira suposição especificada para o nosso modelo.
  • Uma vez que temos um filtro não-estacionário, vamos tentar também usar um filtro adicional que venha a facilitar a identificação de alterações nas características das séries temporais. Escolhi uma Média Móvel Exponencial, esta opção parece-me razoável e bastante apropriada, devido ao fato de que a EMA é mais rápida do que a MA, por isso não deve causar qualquer atraso ao longo da evolução e terá uma melhor resposta ao ruído. A EMA também será calculada com base nos últimos dois fechamentos dos preços.

3. Selecionando o valor apropriado para o filtro cluster.

Portanto, cada nova amostra terá o valor de amostra (fechamento do preço) de acordo com os valores das MA e EMA. O fechamento do preço será ignorado de acordo com a segunda hipótese especificada para o nosso modelo. Além disso, nós selecionamos o valor da МА ou da ЕМА com base na última hipótese, ou seja, a manutenção da direção de tendência:

  • Para uma tendência de alta, ou seja, CF(i-1)>CF(i-2), selecione uma das quatro variantes seguintes:

    if CF(i-1)<MA(i) and CF(i-1)<EMA(i), then CF(i)=MIN(MA(i),EMA(i));

    if CF(i-1)<MA(i) and CF(i-1)>EMA(i), then CF(i)=MA(i);

    if CF(i-1)>MA(i) and CF(i-1)<EMA(i), then CF(i)=EMA(i);

    if CF(i-1)>MA(i) and CF(i-1)>EMA(i), then CF(i)=MAX(MA(i),EMA(i)).


  • Para uma tendência de baixa, ou seja, CF(i-1)<CF(i-2), selecione uma das quatro variantes seguintes:

    if CF(i-1)>MA(i) and CF(i-1)>EMA(i), then CF(i)=MAX(MA(i),EMA(i));

    if CF(i-1)>MA(i) and CF(i-1)<EMA(i), then CF(i)=MA(i);

    if CF(i-1)<MA(i) and CF(i-1)>EMA(i), then CF(i)=EMA(i);

    if CF(i-1)<MA(i) and CF(i-1)<EMA(i), then CF(i)=MIN(MA(i),EMA(i)).


Onde:

  • CF(i) – valor do filtro cluster na barra corrente;
  • CF(i-1) and CF(i-2) – Os valores do filtro cluster sobre as barras anteriores;
  • MA(i) – valor da Média Móvel Simples na barra corrente;
  • EMA(i) – valor da Média Móvel Exponencial na barra atual;
  • MIN – o valor mínimo;
  • MAX – o valor máximo;


Código do Programa e Desempenho do Filtro Cluster

O código do indicador com nosso filtro cluster não é mais complexo do que o código da média móvel. Ele não apresenta qualquer técnica de conhecimento especial, então não há nenhum ponto a rever. O código de fonte está anexado ao artigo.

Sem perder tempo, você pode assistir o vídeo a seguir para ver o desempenho do nosso indicador:


Video 1. Desempenho de um filtro cluster simples

Mesmo que o processo de desenvolvimento possa parecer mais como uma conjuração ao invés de uma abordagem matemática, o vídeo demonstra claramente que o comportamento da linha de filtro cluster é mais adequada do que as linhas de médias móveis individuais. É especialmente evidente sobre as extremidades das seções das séries iniciais (tipo dente de serra). Se não foi impressionante o suficiente para alguns de vocês, podemos comparar o filtro cluster ainda com o JJMA, considerado um dos melhores indicadores. O próximo vídeo mostra uma competição do indicador JJMA e o nosso filtro cluster ao longo da mesma seção. Tentei selecionar os parâmetros do JJMA de modo que a sua linha coincidisse com a linha de nosso indicador ao máximo.

Video 2. Filtro cluster simples vs JJMA

Nosso filtro demonstra em média o mesmo desempenho que o JJMA em qualquer série de tempo. Mas enquanto JJMA já está no seu melhor, o nosso filtro cluster ainda tem espaço para melhorias.


Avançado Efeito de Suavização

Até agora não existiam provas de que os filtros cluster poderiam suavizar uma sequência de entrada sem latência. Para alcançar este resultado, requer um filtro mais complexo do que o considerado anteriormente.

Para fins de ilustração, tenho desenvolvido um indicador que denomino de GMomentum test. Ele contém duas linhas:

  • Linha azul - impulso clássico.
  • Linha vermelha - clássico indicador Momentum suavizado pelo filtro digital cluster com um algoritmo mais complexo.

As configurações do indicador cobrem várias opções de testes preparadas especificamente para o artigo. Nos testes a seguir, usamos uma dinâmica relativa como descrita por William Blau. Ao efetuar as suas próprias experiências, você pode usar outras variações do Momentum - os resultados serão os mesmos. Uma descrição detalhada do indicador, bem como as instruções para a transferência e uso podem ser encontradas nas especificações do indicador.

Não há nenhuma razão especial por trás do uso do Momentum no artigo. A linha do Momentum tem bastante ruído contaminado e o desempenho do filtro na minha opinião seria mais ilustrativo. Então você roda o indicador GMomentum test e analisa o comportamento da linha vermelha em comparação com a azul.

Primeiro vamos verificar uma coisa interessante. Para isso, antes de executar o indicador, defina o parâmetro "Filter" para "Test No.1 Advance". A configuração do filtro neste modo revela o que pode ser chamado de "efeito principal". Ao testar, você não verá linha inicial suavizada completa do Momentum (linha do filtro e do Momentum sobrepostas uma sobre a outra). O filtro corresponde para as áreas onde existe uma boa possibilidade de obter um efeito principal. Não é de admirar, isso nem sempre é bem sucedido, mas ocorre com a frequência suficiente para perceber.

Uma das partes mais ilustrativas do desempenho do filtro é mostrada na tabela abaixo.

Figura 2. Efeito na suavização da linha do Momentum

Figura 2. Efeito na suavização da linha do Momentum

Deve se notar que apenas parece estar conduzindo a filtragem. Este efeito ocorre exclusivamente devido aos movimentos de ruído da linha do Momentum e não devido ao filtro de estar à frente no tempo. Estudos semelhantes de outros indicadores (a partir de uma MA simples para o JJMA) confirmam que o efeito principal de suavização pode ser visto em cada um deles. Quanto menor o período determinado, mais frequentemente o efeito é observado. Os últimos estudos sugerem que o efeito pode ser melhorado. Tudo depende do método para gerar um vetor de valores prováveis ​​e sua análise.


O Efeito Cobra

Aqueles de vocês que já viram o indicador em ação, podem notar outra anomalia. A linha do indicador na última barra incompleta nem sempre segue o preço. Por exemplo, o preço pode estar subindo, o indicador está se movendo para baixo e vice-versa. Quando o mercado é rápido e olhando no visualizador, às vezes se assemelha a uma língua de cobra rastreando a presa.

Video 3. Efeito de suavização e o efeito cobra


Erros à Frente da Tendência

Podemos ver acima que quando a linha inicial do Momentum vai contra a tendência (torna-se ruidoso), o que resulta no efeito principal da linha suavizada sobre a linha inicial. Aparentemente, a linha do Momentum também pode fazer um movimento diferente em outra direção, ou seja, de forma inesperada desvia-se da direção da tendência, às vezes demorando muito tempo, mesmo que a tendência já tenha invertido. Seria lógico se o filtro pudesse reduzir tais movimentos.

Vamos ver como o algoritmo filtra esses erros à frente da tendência. Para isso antes de executar o indicador, definir o parâmetro "Filter" para "Test No.2 Smoothing". O funcionamento do filtro cluster durante este teste está dividido em duas partes.

O nome abreviado do indicador "GMomentum (Parâmetro 1, Parâmetro 2)" exibido na sub-janela gráfico tem dois parâmetros entre parênteses. Se o segundo parâmetro é -1, o algoritmo faz uma tentativa de corrigir (suavizar) erros à frente da tendência. Se o segundo parâmetro é igual ou maior do que zero, as configurações de suavização avançados são colocadas em ação.

O vídeo abaixo demonstra a operação do filtro ao mudar a sua sensibilidade a partir do mínimo até o valor aceitável e para trás. Para obter o efeito de acordo com o vídeo, a sensibilidade do filtro pode ser controlada (desde que a janela do indicador esteja ativa), utilizando as teclas Up e Down.

Video 4. Filtragem dos erros à frente da tendência.

O vídeo acima sugere que a linha de força é suavizada e sem atraso conforme a sensibilidade do filtro aumenta, apesar dos movimentos bruscos do preço e da linha inicial do Momentum. Após a suavização máxima, temos pontos de entrada aceitáveis.

Em movimento lateral, as áreas planas apresentam um problema para a maioria dos indicadores. Aqui, no entanto, alguns deles facilmente degeneram dentro de uma linha quase reta, mesmo com as configurações existentes. Teoricamente, esta técnica pode ser utilizada para melhorar qualquer um dos indicadores existentes, sem produzir um atraso adicional. Do ponto de vista prático, precisa de verificação.

No próximo vídeo, por favor concentrar sua atenção como o filtro achata os principais picos da linha inicial do Momentum e desenha uma linha de tendência mais suave para mais perto do movimento de preços quase sem atraso. A explicação para isto é fornecida no artigo sobre os indicadores William Blau's.

Video 5. Suavização de picos da linha inicial do Momentum.

Os resultados impressionantes obtidos não são os mesmos ao longo de todo histórico das cotações. Mas, considerando o fato de que o Momentum tem um monte de ruído e que o indicador foi implementado apenas para demonstrar a filtragem dos dados de fluxo, sem atrasos, podemos considerar bastante aceitável. Além disso, deve notar-se que o indicador não redesenha.


Resposta de Impulso

O estudo dos parâmetros do Momentum com um filtro embutido pode parecer bastante interessante. Por exemplo, a resposta de impulso é um bom exemplo de como e onde os picos desaparecem da linha do indicador. Para realizar o teste, o parâmetro "Filter" deve ser definido como "Test No.3 Impulse". Durante o teste, a cada 1024 barra recebe um impulso unitário. Após a execução do indicador, encontra o lugar relevante no gráfico. Deve parecer mais ou menos assim:

Figura 3 Resposta de Impulso do Momentum

Figura 3 Resposta de Impulso do Momentum

Quando o indicador está em execução, o filtro é desativado. Você verá dois picos na linha azul e vermelho: um pico apareceu no momento do impulso unitário e igual a ele e outro pico no sentido oposto apareceu após o número determinado de períodos. Isto é a resposta de impulso "despida" do Momentum. Além disso, aumentar ou diminuir gradualmente a sensibilidade do filtro usando as teclas Up e Down poderá ser obtido algo parecido com isto:

Video 6. Resposta de Impulso do Momentum

Como pode ser visto, o segundo pico é completamente achatada pelo filtro, enquanto o primeiro continua absolutamente intacto. O filtro corrige todos os efeitos de Momentum e reconstrói com precisão o quadro inicial: um impulso unitário por si só. Não existe atrasos. Não há nenhuma distorção de amplitude ou na forma do impulso unitário. Pode ser o filtro perfeito em ação?


O Filtro Perfeito

Há um fator material que não nos permitem julgar imediatamente o filtro em questão como perfeito. Isso será explicado um pouco mais tarde.

Acredita-se que não pode existir o filtro perfeito e que todos os filtros (indicadores) têm defasagem. Mas como podemos explicar os resultados obtidos? Todos eles são apresentados como algo que pode ser observado. É um truque de desenvolvedor? Provavelmente poderia se usar de um truque de codificação num código de unidade de impulso, mas o efeito pode ser observado em todas as cotações. Além disso, não existe a necessidade de definir especificamente ou redefinir o indicador para cada instrumento de negociação (ativos).

O filtro perfeito não pode existir quando um filtro é construído usando os objetos físicos (condensadores, indutores, etc.) Isso tem sido cuidado pela própria natureza. No entanto, é impossível a existência de um filtro perfeito no mundo digital? A resposta a esta pergunta deve certamente ser dada sem levar em conta os limites físicos de sistemas de computador (precisão, velocidade de computação, etc.)

Vamos voltar ao nosso indicador. O filtro digital embutido não pertence aos filtros lineares. Para um indicador com filtro embutido, a resposta de impulso considerada acima é apenas um caso especial de filtragem que aconteceu de se sair bem. Para podermos tirar conclusões a longo alcance, é necessário um estudo mais adequado e cuidadoso.


Conclusão

Espero que as informações fornecidas no artigo venham ajudar a quebrar alguns estereótipos sobre a criação de filtros digitais (indicadores).

Tudo o que foi descrito pode ser analisado utilizando os indicadores propostos. A versão de teste introduzido pelo GMomentum lhe permitirá avaliar o desempenho e capacidades potenciais dos filtros cluster, o exemplo do filtro simples pode dar um impulso aos desenvolvedores para criarem seus próprios filtros.

Finalmente, tomo a liberdade de chegar a seguinte conclusão: é potencialmente possível a criação de indicadores sem atrasos e com recursos completos (filtros digitais).

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

Arquivos anexados |
clusterfilter.mq5 (6.67 KB)
Provedores de Sinal Johnpaul77: "Nossa estratégia continua a ser rentável por mais de três anos. Então, por que devemos mudar isso?" Provedores de Sinal Johnpaul77: "Nossa estratégia continua a ser rentável por mais de três anos. Então, por que devemos mudar isso?"
Vamos revelar um pequeno segredo: Os visitantes do site MQL5.com passam a maior parte do seu tempo na página do sinal Johnpaul77. Ele é líder em nosso ranking de sinais, com cerca de 900 assinantes e com fundos de contas reais no valor total de $5.7 milhões. Entrevistamos o provedor deste sinal. Acontece que há quatro deles! Como são distribuídos os deveres entre os membros da equipe? Quais são as ferramentas técnicas que eles usam? Por que eles se auto-denominam de John Paul? E, finalmente, como que simples jogadores da Indonésia se tornaram os principais provedores de sinais no MQL5.com? Descubra tudo neste artigo.
Contos de Robôs de Negociação: É Mais ou Menos? Contos de Robôs de Negociação: É Mais ou Menos?
Dois anos atrás, no artigo "A Última Cruzada" analisamos bastante um método que ainda não é amplamente utilizado na atualidade e interessante para a exibição das informações de mercado - gráficos de ponto e figura. Agora eu sugiro que você tente escrever um robô de negociação com base nos padrões detectados no gráfico ponto e figura.
Como criar um robô de negociação rapidamente Como criar um robô de negociação rapidamente
Negociar em mercados financeiros envolve muitos riscos, incluindo o mais crítico destes - o risco de tomar uma decisão de negociação errada. O sonho de todo negociador é encontrar um robô de negociação, que está sempre em boa forma e não está sujeito às fraquezas humanas - medo, cobiça e impaciência.
SQL e MQL5: Trabalhando com Banco de Dados SQLite SQL e MQL5: Trabalhando com Banco de Dados SQLite
Este artigo é destinado aos desenvolvedores interessados ​​em usar SQL em seus projetos. Ele explica as funcionalidades e vantagens do SQLite. O artigo não exige conhecimentos especiais de funções SQLite, mas é interessante um conhecimento mínimo de SQL.