English Русский 中文 Español Deutsch 日本語 한국어 Français Italiano Türkçe
Introdução ao Método de decomposição do modo empírico

Introdução ao Método de decomposição do modo empírico

MetaTrader 5Estatística e análise | 12 março 2014, 13:12
3 085 0
Victor
Victor

Introdução

Todos os processos reais que temos que lidar na prática são complexos, por via de regra, consistindo em um grande número de componentes. Por exemplo, clima. Ao analisar gráficos de precipitação, devemos ter em mente que eles representam interação entre muitos de vários processos, assim como mudanças periódicas, processos de aquecimento/resfriamento global, mudanças atuais do oceano, dinâmicas de ciclones e anticiclones, a quantia de dióxido de carbono emitido dentro da atmosfera, ciclos de atividade solar, etc. A lista poderia continuar para sempre.

Um gráfico desse tipo é então bem difícil de ser analisado, pois seus componentes, ao interagirem um com o outro, mascaram e distorcem as regularidades que gostaríamos de identificar. Isso aumenta o desejo legítimo de dividir o processo sob consideração em componentes individuais e analisar cada um dos componentes separadamente. A análise de componentes individuais e a consideração da contribuição que elas fazem no processo próximo, nos ajuda a entender melhor o processo em progresso, assim como, por exemplo, aumentar a confiabilidade da previsão.

E não há nenhuma exceção quando se trata de várias informações sobre negociação, incluindo cotas de moeda corrente que são também formadas baseadas em um grande número de fatores diferentes. é por isso que é natural esperar que uma diminuição de ante mão em componentes individuais pode facilitar muito sua análise futura.

O termo ''decomposição'' formalmente significa a divisão de um processo combinado ou um material composto em componentes que o constituam. Mas em muitas áreas próximas da análise de diferentes processos, análise de sinal, análise de vários tipos de sequência, etc., esse termo foi usado em um amplo significado muito frequente que sugere não uma divisão de componentes inicial atual, mas sim uma divisão em certas funções que não estavam, na verdade, presentes quando os dados iniciais foram formados. Essas funções são tipo de formadas artificialmente no processo de decomposição de dados, mas apesar de sua origem ''artificial'', permitem uma análise profunda de dados que ajudam a identificar padrões ocultos.

A vasta maioria de métodos usados na análise do mercados pode explicitamente ou implicitamente ser atribuída aos métodos que escolhem certos componentes do processo analisado, por ex.: métodos de decomposição. Deixe-nos brevemente revisar alguns deles.


1. Decomposição

Há uma grande quantidade de métodos de decomposição que podem ser aplicados na prática para uma dada sequência sob consideração. Esses métodos podem ter diferentes bases matemáticas ou abordagens empíricas, diferente grau de complexidade e diferentes áreas de aplicação.

Por exemplo, até mesmo uma análise fundamental do mercado pode - a um certo ponto - ser considerada um dos métodos de decomposição. Esta análise lida com o efeito produzido por um conjunto de eventos iniciais que influenciam diretamente condições de mercado. Em outras palavras, um processo de mercado analisado é implicitamente decomposto em um número de eventos que a constituem.

Problemas relacionados a análise fundamental não serão abordados até mais tarde. Nós iremos supor que qualquer informação adicional sobre o processo sob consideração não está disponível; o que temos é apenas uma sequência representando o comportamento de um dado processo

O exemplo de decomposição mais simples pode ser ilustrado pela decomposição de uma sequência em severos componentes usando os métodos comuns mais conhecidos. Por exemplo, desenhamos uma MA em um gráfico para um par de moedas. Em seguida, subtraia a curva resultante da sequência inicial. Como resultado, obteremos dois componentes da sequência inicial, a curva MA e o restante. O mesmo procedimento, apenas usando um período mais longo de MA, quando aplicado no restante obtido, resultará em três componentes - duas curvas MA e no restante da transformação. Como você pode ver, o processo de decomposição pode ser facilmente organizado, usando qualquer meio disponível. Todo ponto encontra-se em propriedades dos resultados de tal processo.

Entre as decomposições bem conhecidas e métodos de análise espectral, a transformada de Fourier definitivamente vale à pena mencionar aqui. A transformada de Fourier pertence à classe de transformações ortogonais que consertam funções básicas de harmonia. O resultado da transformada de Fourier pode ser mostrado como uma decomposição do processo inicial em funções harmônicas com frequências e amplitudes consertadas. Observe dois pontos de importância particular para nós.

Primeiro, a transformação é sempre realizada em uma base anteriormente estabelecida e fixa de funções ortogonais. Isto é, uma base de transformação não depende da natureza ou da sequência transformada.

Segundo, valores de amplitude e de frequência dos componentes harmônicos são constantes. Isto é, seus valores são constantes ao longo de toda sequência inicial. Isso significa que se a natureza de uma dada sequência inicial estava mudando ao longo do intervalo sob consideração, tais mudanças não serão refletidas nos resultados da transformação. Os resultados obtidos nesse caso refletirão apenas um determinado estado de média do processo,pois essa transformação é baseada na suposição de estacionariedade dos dados iniciais.

Para evitar restrições associadas com a não estacionariedade da sequência inicial, podemos tornar uma transformada de Fourier em uma transformação de pequena onda. Uma transformação de pequena onda, como uma transformação de Fourier, desempenha decomposição em uma base fixa de funções. Diferente da transformada de Fourier, essa base será preparada anteriormente, ex.: uma pequena onda usada na transformação será selecionada.

Mais adiante, no contraste para a transformada de Fourier, todo componente resultante de uma transforma de pequena onda tem parâmetros que determinam em escala e nível ao longo do tempo o qual resolve o problema associado com a possível não estacionariedade de um processo analisado.

A transformada de Fourier e de pequena onda, ambas receberam amplo reconhecimento devido a técnicas matemáticas usadas e implementação efetiva de algoritmos disponíveis. Além disso, ambas transformadas parecem ser bem versáteis e podem ser aplicadas com sucesso e diferentes áreas.

Mas para fins práticos, seria bom ter uma transformação que não só permitisse lidar com processos não-estacionários, mas também usasse uma base de transformação adaptável determinada por dados iniciais. Este tipo de transformação existe e será considerada abaixo de forma sucinta, dirigindo assim o principal assunto deste artigo.


2. Decomposição do modo empírico

A Decomposição de Modo Empírico (EMD) foi proposta como parte fundamental da transformada de Hilbert–Huang (HHT)). A transformada de Hilbert Huang foi realizada, supostamente, em dois estágios. Primeiro, utilizando o algoritmo, obtemos funções do modo intrínseco (IMF).

Em seguida, no segundo estágio, o espectro de frequência instantânea da sequência inicial é obtido mediante a aplicação da transformada de Hilbert para os resultados do passo acima. A HHT permite obter o espectro de frequência instantânea de sequências não-lineares e não estacionárias. Estas sequências podem, consequentemente, também ser tratadas com o uso da decomposição do modo empírico.

No entanto, este artigo não vai cobrir a representação do espectro de frequência instantânea usando a transformada de Hilbert. Vamos nos concentrar apenas no algoritmo EMD.

Em contraste com a transformada de Fourier e a transformada de onda pequena, mencionadas anteriormente, a EMD decompõe quaisquer dados fornecidos em funções de modo intrínsecas (IMF), que não sejam definidas analiticamente e que em vez disso sejam determinadas por uma sequência analisada isoladamente. As funções de base são nesse caso derivadas de forma adaptada e diretamente de dados de entrada. Uma IMF resultante de EMD deve satisfazer apenas os requerimentos a seguir:

  1. O número de extremos IMF (a soma de valores máximos e mínimos) e o número de cruzamentos de zero devem tanto igualar ou diferirem no máximo em um;
  2. Em qualquer ponto de uma IMF, o valor médio do envelope definido pelo máximo local e o envelope definido pelo mínimo local deverá ser zero.

Resultados de decomposição em uma família de frequência ordenou componentes da IMF. Cada IMF sucessiva contém oscilações de baixa frequência do que a precedente. E, embora o termo "frequência" não esteja totalmente correto quando usado em relação a IMFs, é provavelmente o mais adequado para definir sua natureza. O que ocorre é que, apesar de uma IMF ser de natureza oscilatória, ela pode ter amplitude e frequência variáveis ​​ao longo do eixo do tempo.

é muito difícil visualizar os resultados de desempenho de algoritmo da EMD com base somente na descrição, então vamos proceder à sua implementação de software que nos dará uma oportunidade de conhecer as peculiaridades do algoritmo.


3. Algoritmo EMD

O algoritmo conforme proposto por Huang é baseado na produção de envelopes suaves definidos por máximo local e mínimo de uma subtração de sequência e subsequente da média destes envelopes a partir da sequência inicial. Isto requer a identificação de todos os valores máximos locais que são posteriormente conectados por linhas curvas cúbicas para produzir os envelopes superiores e inferiores.

O procedimento de representação dos envelopes é mostrado na figura 1.


Fig. 1. Representação dos envelopes e da sua média.

Fig. 1. Representação dos envelopes e da sua média.


A figura 1 fornece uma sequência analisada na linha azul fina. O valor máximo e mínimo da sequência é mostrado em vermelho e azul, respectivamente. Os envelopes são dados em verde.

A média é calculada com base nos dois envelopes e está mostrada na figura 1 conforme a linha tracejada. O valor médio então calculado é ainda subtraído da sequência inicial.

Os passos acima resultam na extração da função empírica necessária na primeira aproximação. Para obter a IMF final, novos valores máximos e mínimos serão novamente identificados e todos os passos acima repetidos. Este processo repetitivo é chamado de triagem. O processo de triagem é repetido até que um determinado dado critério de parada seja encontrado. Seleção de critérios de paragem de triagem é um dos pontos-chave que afetam o resultado de decomposição como um todo. Voltaremos à discussão desta questão um pouco mais tarde.

Se o processo de triagem for concluído com êxito, obteremos a primeira IMF. A próxima IMF pode ser obtida através da subtração da IMF previamente extraída do sinal original e da repetição do procedimento acima descrito, uma vez mais. Isso continua até que todas as IMFs sejam extraídas. O processo de triagem realmente para quando o restante, por exemplo, não contém mais do que dois extremos.

Como pode ser visto, o procedimento de decomposição de modo empírico descrito não é baseado em rigorosos cálculos matemáticos, mas em vez disso é mais empírico verdadeiramente, justificando assim plenamente o seu nome. Apesar da simplicidade e clareza do algoritmo acima como proposto por Huang, há alguns pontos que podem ser considerados como suas desvantagens.

Várias publicações sobre este assunto fornecem análises detalhadas de seus pontos fracos, bem como formas de modernizar o algoritmo de Huang. Este artigo não vai focar em possíveis modernizações deste método, mas simplesmente demonstrará uma tentativa de criar a sua implementação de software. As peculiaridades de implementação serão resumidamente esquematizadas abaixo.


4. Classe CEMDecomp

A implementação da classe CEMDecomp o algoritmo EMD foi criado baseado nas publicações da internet devotado a transformada de Hilbert-Huang e decomposição do modo empírico. O algoritmo implementado é substancialmente muito similar ao algoritmo inicialmente proposto por Huang e não contem nenhuma modificação maior.

Abaixo está o trecho do código original que pode ser encontrado no file CEMDecomp.mqh no final do artigo.

//------------------------------------------------------------------------------------
// The Empirical Mode Decomposition (EMD).
//------------------------------------------------------------------------------------
class CEMDecomp:public CObject
  {
public:
  int     N;                 // Input and output data size
  double  Mean;              // Mean of input data
  int     nIMF;              // IMF counter
  int     MaxIMF;            // Maximum number of IMF
  int     MaxIter;           // Maximum number of iterations
  int     FixedIter;         // 0-variable number of sifting iterations;
                             // 1-always ten sifting iterations.
  double  IMFResult[];       // Result
private:
  double  X[];
  double  Imf[];
  double  XMax[];            // x of local maxima
  double  YMax[];            // y of local maxima
  double  XMin[];            // x of local minima
  double  YMin[];            // y of local minima
  double  EnvUpp[];          // Upper envelope
  double  EnvLow[];          // Lower envelope
  double  Eps;               // Accuracy comparison of floating-point numbers
  double  Tol;               // Accuracy of calculation IMF
public:  
  void    CEMDecomp(void);
  int     Decomp(double &y[]);          // Decomposition
  void    GetIMF(double &x[], int nn);  // Get IMF number nn
private:
  int     arrayprepare(void);
  void    extrema(double &y[],int &nmax,double &xmax[],double &ymax[], int &nmin,double &xmin[],double &ymin[]);
  int     SplineInterp(double &x[],double &y[],int n,double &x2[], double &y2[],int btype=0);
  };

Deixe-nos dar uma olhada em variáveis públicas e métodos declarados na classe CEMDecomp.

N é o número de elementos da sequência. O valor da variável N é gerado após o chamado método Decomp() e é igual sequência comprida de entrada. A extraída IMFs terá o mesmo tamanho.

Mean é o valor médio de uma sequência de entrada. O valor é gerado após chamar o método Decomp().

nIMF é o contador IMF. Depois de chamar o Decomp(), ele contem um número de IMFs extraídos mais dois. Assim, o valor indica quantos componentes podem ser lidos usando o método GetIMF(). Dito isso, um componente com indicador 0 sempre conterá uma sequência inicial, o que significa que o valor é diminuído, enquanto um componente com indicador nIMF conterá resíduo de composição.

MaxIMF é o máximo permissível número de IMFs. Decomposição da sequência de entrada em separar IMFs parará, quando o número de IMF's alcançar o valor MaxIMF. O valor dessa variável pode ser posto antes de chamar o método Decomp(). O valor padrão é 16.

MaxIter é o número máximo de repetições permitidas no processo de triagem. Se o número de repetições no processo de triagem alcançar este valor, a triagem parará independente se a precisão necessária estiver sido alcançada ou não. O valor dessa variável pode ser posto antes de chamar o método Decomp(). O valor padrão é 2000.

FixedIter é a bandeira que põe um critério de parada na peneiração. Se o valor do FixedIter for zero, o processo de peneiração para cada IMF parará uma vez dada a exatidão é alcançada. O número de repetições pedidas para alcançar a dada exatidão para a extração de diferentes IMFs pode variar. Se o FixedIter é ajustado para um, um IMF sempre será extraído em 10 repetições. O valor dessa variável pode ser posto antes de chamar o método Decomp(). O valor padrão é 0.

Decomp(double &y[]) é o método da classe principal executando a decomposição. Ele recebe uma referência de preparar contendo dados de entrada, como um parâmetro de entrada. Após a conclusão bem-sucedida, a variável N será igual a entrada do comprimento da matriz. Os IMFs extraídos terão o mesmo tamanho. A variável Mean será igual ao valor médio da sequência de entrada, enquanto a variável nIMF será igual ao número de componentes que podem ser lidos utilizando o método GetIMF().

GetIMF(double &x[], int nn) serve para assegurar o acesso aos resultados obtidos utilizando o método Decomp(). O endereço da matriz onde o componente com o número estabelecido por nn será copiado como um parâmetro de entrada. Dito isso, um componente com indicador 0 sempre conterá uma sequência inicial, o que significa que o valor é diminuído, enquanto um componente com indicador nIMF conterá resíduo de composição. Se o comprimento da matriz passa como parâmetro acaba sendo menor que o comprimento dos componentes resultantes, a matriz será cheia até onde seu comprimento permitir.

O uso da classe CEMDecomp pode ser demonstrado pelo exemplo a seguir:

#include "CEMDecomp.mqh"
//------------------------------------------------------------------------------------
// Script program start function
//------------------------------------------------------------------------------------
void OnStart()
  {
  int n,ret;
  double yy[],imf2[];
  
  n=400;                                    // Input sequence length
  ArrayResize(yy,n);                         // Array of input data
  ArrayResize(imf2,n);                       // Array for reading the results
  
  CopyOpen(_Symbol,PERIOD_CURRENT,0,n,yy);      // Generation of input data
  
  CEMDecomp *emd=new CEMDecomp();           // Creation of the CEMDecomp class instance
  ret=emd.Decomp(yy);                       // Decomposition of the input sequence
  
  if((ret==0)&&(emd.nIMF>3))                // If there is no error and the sufficient
                                            // number of components was extracted,
    emd.GetIMF(imf2,2);                     // copy component number 2 into
                                            // array imf2[].
  delete(emd);                              // Deletion of the CEMDecomp class instance
  
  // One of the extracted components in array imf2[].
  }
//------------------------------------------------------------------------------------

Um exemplo completo da decomposição mostrando IMFs extraídos através da interface web pode ser encontrado no arquivo CEMDecomposition.zip no final do artigo. Para executar esse exemplo, você deve descompactar o arquivo especificado e colocar toda a pasta \CEMDecomposition juntamente com o seu conteúdo para a pasta \Indicadores ou \diretório Scripts do terminal. Depois, você pode compilar e executar o script EMDecomp_Test.mq5. Tenha em mente que o uso de bibliotecas externas no terminal devem fazê-lo ser permitido.

A figura 2 mostra um outro exemplo com decomposição de USDJPY diário cita com o comprimento da sequência de 100 elementos. Pode ser visto, que a decomposição desta sequência resultou na extração de quatro IMFs e o resíduo.


Fig. 2. Decomposição da sequência de cotas diárias USDJPY, onde N = 100.

Fig. 2. Decomposição da sequência de citações USDJPY diárias, onde N = 100.


Todos os gráficos da Figura 2 são apresentados na mesma escala que permite avaliar a contribuição de cada um dos IMFs extraídos. No entanto, esta forma de planejar não pode dar uma imagem suficientemente clara para ver as peculiaridades de cada um dos IMFs. A Figura 3 mostra os mesmos resultados, só utilizando o modo automático de escala para cada um dos gráficos.


Fig. 3. Decomposição da sequência de cotas diárias USDJPY, onde N = 100. Modo de escala automático.

Fig. 3. Decomposição da sequência de cotas diárias USDJPY, onde N = 100. Modo de escala automático.

E, embora a Figura 3 não mostre a correlação real de amplitudes dos componentes individuais, o uso do modo automático de escala permite uma visualização mais detalhada de cada um deles.


5. Observações à implementação proposta do algoritmo EMD

A primeira coisa que eu gostaria que chamasse atenção é o método para a identificação de máximos e mínimos da sequência inicial. Nesse caso, há duas opções disponíveis.

A figura 4 mostra os resultados do algoritmo de desempenho para a identificação dos extremos.

Fig. 4. Identificação do extremo. A primeira opção.

Fig. 4. Identificação do extremo. A primeira opção.

Quando se trata de identificação de máximos ou mínimos de uma função, o algoritmo que é mais vulgarmente utilizado é o seguinte:

  1. O valor do elemento corrente da sequência é comparado com os valores anteriores e posteriores;
  2. Se o valor da corrente é maior do que o anterior e o valor posterior, que é identificada como o máximo da função;
  3. Se o valor da corrente é menor do que o anterior e o valor posterior, que é identificada como o mínimo da função;

Para as sequências com extremos claramente definidos, a identificação de máximos e mínimos não envolve qualquer dificuldade. O algoritmo fornecido funciona muito bem. Este caso é demonstrado na primeira metade do gráfico mostrado na figura 4. No entanto, este algoritmo será indiferente para topos planos, onde os valores mais próximos da sequência são iguais.

Tivesse o algoritmo fornecido sido usado, o último valor máximo e os dois últimos valores mínimos mostrados na figura 4 nunca teriam sido identificados. Por um lado, esse resultado teria sido esperado e correto. Mas, por outro, com base na analogia com os processos oscilatórios, se cruzamentos de 0 ocorreram, estes extremos teriam sido desconsiderados. Não está muito claro se os topos planos de uma sequência retangular ou seções de valores iguais de sequência podem ser considerados extremos.

No entanto, o algoritmo utilizado para a identificação de extremo ao implementar a classe EMDecomp é uma versão melhorada do algoritmo fornecido acima. Os resultados de desempenho podem ser observados na Figura 4. Este algoritmo identifica com intervalos de valores de sequência de igualdade com os extremos e coloca pontos de extremo no meio desses intervalos.

O algoritmo para a identificação de máximos e mínimos, cujos resultados de desempenho são mostrados na Figura 4 é utilizado na classe CEMDecomp para o cálculo do número de extremos, ao determinar o ponto onde o ciclo de decomposição deve parar. Por exemplo, se uma IMF extraída não tem nenhum valor extremo, a decomposição para e tal IMF é expulsa.

Caso este algoritmo de identificação seja utilizado na colocação de envelopes, então, nos casos onde a sequência de entrada, por exemplo, toma a forma, como mostrado na fig. 4, os envelopes resultantes serão representados por duas linhas paralelas retas. O processo de triagem falhará ainda mais para transformar a sequência de entrada e esta sequência de entrada, por sua vez, não será adequada para a decomposição nos componentes.

Uma forma para sair desta situação pode ser encontrada na utilização de um algoritmo para identificação de valor extremo um pouco diferente para traçar os envelopes.

A Figura 5 demonstra os resultados obtidos utilizando este algoritmo alternativo para identificação de valor extremo.

Figura 5. Identificação do extremo. A segunda opção.

Fig. 5. Identificação do extremo. A segunda opção


Vamos olhar de perto a figura 5. Ao contrário da figura 4, que mostra os pontos verdes sendo máximos e mínimos, ao mesmo tempo. Se os envelopes são traçadas com base nesses extremos, eles não serão mais linhas paralelas retas e os componentes ocultos da sequência retangular estará disponível para extração posterior do processo de triagem. Uma boa ilustração sobre o anterior pode ser um caso de teste localizado no arquivo CEMDecomposition.zip no final do artigo.

Infelizmente, esta abordagem não resolve todos os problemas relacionados à extração de componentes ocultos. Por exemplo, os componentes ocultos não podem ser extraídos desta maneira por uma sequência triangular. Este fato pode ser uma das desvantagens desta implementação do algoritmo de EMD Esta situação difícil pode provavelmente ser resolvida através de mudar para o algoritmo CEEMD (Método de decomposição empírico de conjunto complementar) para decomposição da revisão do que não for abordado neste artigo.

Além das peculiaridades associadas à implementação de algoritmos para identificação de extremos, também deve ser dada atenção ao problema dos efeitos finais típicos deste tipo de algoritmos. Para elaborar o dito acima, vamos nos voltar para fig. 1. A figura 1 mostra claramente que os máximos estão conectados por uma função de interpolação de ajuste cúbico conforme o envelope superior.

Dito isto, o envelope deve ser definido para as seções situadas tanto à esquerda do primeiro valor máximo e à direita do último valor máximo. A maneira pela qual tal envelope é alongado é suscetível em determinar a natureza de IMFs extraídas próximas às suas extremidades. Sem entrar em muitos detalhes da implementação da correção de efeito final de software, esse fato é simplesmente trazido aqui para a atenção do leitor.

Deve-se notar ainda que a natureza e o número de IMFs extraídos pode e dependerá do método selecionado para interromper o ciclo de triagem. A classe CEMDecomp utiliza o cálculo da razão, indicando a extensão da diferença na IMF atual como determinado pelo último ciclo de triagem, como o principal método que serve para parar o processo de triagem.

Se a triagem não tem quase nenhum efeito sobre uma IMF desconhecida, o processo de triagem para a IMF e a IMF é considerada para ser produzida. Um valor limite por padrão determinando a precisão de extração de IMF é definido no construtor da classe. Tendo definido o valor padrão que limita o número de repetições às vezes pode chegar a 200 e até mesmo 300. Em publicações sobre o assunto, muitos autores advertem contra o uso de um grande número de repetições de seleção. Foi, no entanto, decidido usar este valor limite padrão nesta implementação do algoritmo de EMD.

Esta implementação do algoritmo EMD permite usar um outro critério de paragem. Para este efeito, a variável FixedIter deve ser definida 1 antes de chamar o método Decomp(). Neste caso, todas as IMFs sempre serão extraídas em 10 repetições de seleção. E isso é fácil de ver que os resultados de decomposição obtidos com este critério de paragem será um pouco diferente em relação a tais do método padrão.


6. Aplicação do algoritmo EMD

Uma vez que o algoritmo EMD foi inicialmente uma parte da transformada de Hilbert-Huang, o cálculo do espectro de frequência instantânea de uma sequência pode servir como um exemplo que demonstra a aplicação deste algoritmo. Isto envolve o desempenho da transformada de Hilbert em componentes IMF extraídos com uso de EMD. Este procedimento, entretanto, não é considerado neste artigo.

Além de calcular o espectro, o algoritmo EMD pode ser usado para suavizar sequências.

A figura 6 mostra um exemplo de tal suavização.


Fig. 6. Suavização da sequência de entrada.

Fig. 6. Suavização da sequência de entrada


Um fragmento arbitrário de cotas diárias USDCHF que consiste de 100 valores de preço "Abertos" foram selecionados para suavização. No processo de decomposição, quatro IMFs e o restante foram obtidos. Todas as IMFs, com exceção da primeira, foram posteriormente adicionadas ao restante.

Assim, o componente de frequência mais alta encontrado foi excluído da sequência de entrada. Se desconsiderarmos os dois primeiros componentes ao adicioná-los, a curva resultante seria ainda mais suave.

Um outro exemplo da aplicação de EMD pode ser uma geração de uma previsão com base em IMFs extraídas a partir da sequência de entrada. Para gerar uma previsão, você pode usar qualquer extrapolador cuja previsão é gerada para cada uma das IMFs e o restante separadamente.

As previsões geradas desta maneira são então somadas para se obter o resultado necessário para a previsão da sequência de entrada. Considerando a natureza oscilatória de IMFs individuais, podemos supor que, para gerar uma previsão, seria razoável usar extrapoladores tendo em conta o comportamento periódico de sequências de previsão.

No nosso caso, vamos analisar um exemplo de operação de um extrapolador mais simples onde uma previsão para cada uma das IMFs será gerada usando extrapolação linear de 10 passos à frente. O resultado desta previsão é mostrado na figura 7.


Fig. 7. Geração de uma previsão para cotas USDCHF, H4.

Fig. 7. Geração de uma previsão para cotas USDCHF, H4


Deve notar-se que, ao gerar uma previsão, um ou mais componentes de frequência mais alta podem ser descartados. Assim, o efeito do ruído de alta frequência na previsão pode ser mitigado. O resultado da previsão, que exclui a primeira IMF é demonstrado na Figura 7. A previsibilidade deste método foi, neste caso, não avaliada. Uma análise detalhada dos métodos de previsão que são baseados no modo de decomposição empírico não é fornecido aqui, pois este assunto está além do escopo deste artigo.

Não podemos deixar de mencionar estimativa de tendência também. Depois que os componentes individuais da sequência são obtidos usando EMD, um algoritmo bastante flexível pode ser desenvolvido para estimativa de tendência. O resíduo de decomposição ou o resíduo foi adicionado a uma ou mais das últimas IMFs extraído pode ser feita como uma tendência. O número de IMFs envolvidas na criação de uma linha de tendência, juntamente com o restante pode variar, dependendo do número de componentes de baixa frequência necessários para permanecer na sequência após estimativa de tendência.

Assim, para a estimativa de tendência, basta somar todas as IMFs extraídas como resultado da decomposição, exceto para o último componente ou diversos últimos componentes. Este procedimento pode ser facilmente combinado com a suavização do resultado obtido, se o componente de frequência mais alta também for excluído do processo de adição dos componentes. A figura 8 mostra um exemplo de estimativa de tendência utilizando a técnica acima.


Fig. 8. Estimativa de tendência combinada com suavização.

Fig. 8. Estimativa de tendência combinada com suavização


Uma sequência de EURUSD, cotas diárias foram tidas como dados iniciais. Após a decomposição, todos os componentes extraídos foram somados, excluindo o restante de decomposição, os últimas e as primeiras IMFs. Resultou não somente em estimativa de tendência mas também em uma certa suavização da curva resultante.

A área de aplicação do método de decomposição de modo empírico, certamente, não está limitada aos simples dados exemplos no artigo. Mas uma vez que este artigo está mais focado nas questões de implementação do método EMD como tal, em vez de sua aplicação, vamos considerar os exemplos fornecidos aqui abaixo.

A figura 9 que demonstra o resultado de decomposição obtido utilizando os parâmetros definidos em CEMDecomp.mqh por padrão pode servir como uma ilustração adicional da funcionalidade oferecida por esta implementação do método EMD. Este exemplo é baseado na utilização de cotas XAUUSD H4. O comprimento da sequência é de 150 elementos.


Fig. 9. Exemplo de decomposição utilizando cotas XAUUSD H4.

Fig. 9. Exemplo de decomposição utilizando cotas XAUUSD H4

A escala automática foi aplicada a cada um dos componentes da figura 9.


Conclusão

Lembrar que o método de decomposição de modo empírico, bem como a transformada de Hilbert-Huang, destina-se à análise de dados a partir de processos não estacionários e não-lineares. Isso não quer dizer que esta abordagem não possa ser aplicada às sequências lineares e estacionárias.

Algumas abordagens utilizados em algoritmos de decomposição foram brevemente abordadas de forma breve no início do artigo. E foi mencionado que a maioria destes algoritmos decompõe uma sequência em componentes que de fato não representam os processos iniciais, na verdade, levam a sequência em consideração.

Esses componentes são, de alguma forma, sintéticos; a sua extração apenas ajuda a entender melhor a estrutura de uma sequência de entrada e, em muitos casos, permite facilitar sua análise. O método EMD não é exceção. Você nunca deve pensar que os componentes obtidos através deste método reflitam os processos físicos atuais dos quais os dados iniciais analisados foram originalmente formados.

A implementação proposta neste artigo, provavelmente, pode exigir mais testes e melhoramentos, uma vez que dificilmente possa ser considerada ideal.

O principal objetivo deste artigo foi, porém, familiarizar o leitor com o método EMD e algumas peculiaridades relacionadas à sua implementação.

Resumindo.

  1. O artigo trata muito brevemente sobre algumas questões relacionadas à decomposição em geral;
  2. Em poucas palavras, ele apresenta a essência do método de decomposição do modo empírico;
  3. A listagem e uma breve descrição da interface de classe CEMDecomp onde o método EMD é implementado são introduzidos;
  4. O exemplo de interação com a classe CEMDecomp também demonstrando como os seus métodos são chamados é fornecido;
  5. Algumas peculiaridades da implementação proposta do método EMD são destacados;
  6. Alguns exemplos simples que demonstram a aplicação do método EMD na análise de dados são fornecidos;
  7. No final do artigo, você pode encontrar o arquivo CEMDecomp.mqh que implementa o método EMD, bem como o arquivo EMDecomposition.zip que contém o caso de teste que apresenta o uso da classe CEMDecomp.


Referências

  1. Transformada de Hilbert-Huang.
  2. Transformada de Hilbert-Huang.
  3. Decomposição do Modo Empírico.


Anexo

O artigo original foi publicado em 28 de junho de 2012. Este anexo foi oferecido em 5 de junho de 2012.

Uma implementação do método alternativo EMD é oferecida em adição a este artigo. Esta implementação é exibida como classe CEMD e colocada em arquivo CEMD_2.mqh em anexo abaixo.

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

Arquivos anexados |
cemdecomp.mqh (33.83 KB)
emdecomposition.zip (89.17 KB)
cemd_2.mqh (33.03 KB)
Metaquotes ID no terminal móvel Metatrader Metaquotes ID no terminal móvel Metatrader
Aparelhos com Android e iOS oferecem muitos recursos que sequer conhecemos. Um desses recursos são as notificações do tipo push que permitem recebermos mensagens pessoais, independentemente do nosso número de telefone ou operadora de telefonia móvel. O terminal móvel MetaTrader já consegue receber essas mensagens diretamente do robô de negociação. Você apenas precisa saber o ID MetaQuotes do seu aparelho. Mais de 9.000.000 terminais móveis já receberam o ID.
Aplicação do método de coordenadas de Eigen para a análise estrutural de distribuições estatísticas não extensivas Aplicação do método de coordenadas de Eigen para a análise estrutural de distribuições estatísticas não extensivas
O maior problema de estatísticas aplicadas é o problema de aceitar a hipótese estatística. Isso foi por muito tempo considerado impossível de resolver. A situação mudou com o aparecimento do método de coordenadas Eigen. é uma ferramenta excelente para um estudo estrutural de um sinal, permitindo ver mais do que é possível usando métodos de estatística aplicada moderna. O artigo foca no uso prático deste método e estabelece programas no MQL5. Ele também lida com o problema de identificação de função usando como exemplo a distribuição apresentada por Hilhorst e Schehr.
Explorar as classes de estratégia de negociação da biblioteca padrão - Personalização de estratégias Explorar as classes de estratégia de negociação da biblioteca padrão - Personalização de estratégias
Neste artigo, mostraremos como explorar a biblioteca padrão de classes de estratégia de negociação e como adicionar estratégias personalizadas e filtros/sinais utilizando a lógica de padrões e modelos do Assistente MQL5. No final, você será capaz de adicionar facilmente as suas próprias estratégias utilizando os indicadores padrão do MetaTrader 5 e o Assistente do MQL5 criará um código limpo e poderoso bem como um Expert Advisor totalmente funcional.
Novo sistema de publicação de artigo em MQL5.community Novo sistema de publicação de artigo em MQL5.community
Apresentamos a você um novo artigo de publicação de sistema no MQL5.community. No novo sistema, nós tentamos fazer todo o processo de escrever artigos claro e confortável, dividindo-os em vários passos. Em cada passo, lhe daremos recomendações e conselhos úteis, uma espécie de destilação da experiência de escrever artigos. Esperamos que este artigo ajude a responder muitas de suas dúvidas. Sinta-se bem-vindo a enviar-nos novos materiais interessantes que o tornará popular entre os visitantes da MQL5.community.