English Русский 中文 Deutsch 日本語
preview
Análise espectral singular em MQL5

Análise espectral singular em MQL5

MetaTrader 5Exemplos |
26 1
Francis Dube
Francis Dube

O que é SSA?

Nas versões mais recentes do MetaTrader 5, foi introduzida pela primeira vez uma integração inicial dos métodos OpenBLAS nos principais tipos de dados vetoriais e matriciais. Merece destaque o conjunto de métodos relacionados à análise espectral singular (SSA). Neste artigo, examinaremos as novas ferramentas relacionadas à SSA disponíveis em MQL5 e mostraremos como elas podem ser usadas para análise e previsão. O objetivo deste guia é servir como recurso para traders que desejam explorar todo o potencial da SSA. Vamos nos aprofundar na metodologia central da SSA e esclarecer seu fluxo em duas etapas: decomposição e reconstrução. Mais importante ainda, discutiremos o que cada um dos novos métodos vetoriais de SSA faz e mostraremos como interpretar e combinar seus resultados de forma ideal para obter insights práticos.

A análise espectral singular é um método não paramétrico voltado à análise e à previsão de dados de séries temporais. Seu objetivo é decompor uma série temporal em vários componentes aditivos, que normalmente incluem uma tendência de variação lenta, diversos ciclos e ruído residual. A característica distintiva da SSA é sua dependência mínima de premissas predefinidas sobre o mecanismo subjacente de geração dos dados. A base conceitual da SSA combina elementos de estatística e processamento de sinais. Em essência, a SSA se baseia na decomposição espectral, o que permite identificar as características de frequência de uma série temporal por meio da análise de seus componentes principais em um espaço de imersão reconstruído. Na prática, ela pode ser entendida como uma forma de análise de componentes principais (PCA) especificamente adaptada a dados de séries temporais, usando princípios de redução de dimensionalidade para revelar estruturas e padrões ocultos que podem estar mascarados por ruído ou por interações complexas.



SSA em MQL5

Em MQL5, os cálculos de SSA são implementados nativamente como métodos do tipo vector, bem como na biblioteca matemática Alglib. A vantagem da implementação de SSA na Alglib reside, sobretudo, no processamento em tempo real, enquanto a nova funcionalidade de SSA disponível diretamente nos vetores é mais adequada para análise exploratória. Observe que, embora este texto se concentre principalmente em operações com números reais, para números complexos, também há métodos equivalentes, que funcionam de maneira semelhante, com sua interpretação adaptada ao domínio complexo.

Em cada um dos novos métodos vetoriais de SSA, o primeiro parâmetro obrigatório é o comprimento da janela. Esse parâmetro determina como a série temporal é transformada em uma estrutura multidimensional conhecida como matriz de trajetórias. Alguém poderia perguntar: "Para que serve essa estrutura multidimensional?" A chave está na relação entre a SSA e a PCA. Lembre-se de que a PCA é um método de redução de dimensionalidade aplicado a conjuntos de dados multidimensionais. A SSA reconstrói uma série temporal unidimensional em uma estrutura semelhante a um conjunto de dados multidimensional. Isso é feito dispondo segmentos da série em linhas de mesmo tamanho. Aqui, o comprimento de cada linha é determinado pelo parâmetro de comprimento da janela.

Consideremos a série temporal Y=[y1 ,y2 ,y3 ,y4 ,y5 ,y6 ] com comprimento N=6. Se escolhermos o comprimento da janela L=3, obteremos uma matriz de trajetórias equivalente à apresentada abaixo.

Matriz de trajetórias

O número de linhas R na matriz é calculado como R=N−L+1. Neste exemplo: R=6−3+1=4. Essa matriz de dimensão R×L (4×3 em nosso exemplo) é a matriz de trajetórias. Os padrões observados nas antidiagonais dessa matriz são característicos de uma matriz de Hankel. A construção da matriz de trajetórias é a primeira etapa do método SSA. Portanto, não é de surpreender que o comprimento da janela seja um parâmetro determinante do método SSA, pois ele define diretamente as dimensões da matriz de trajetórias, o que, por sua vez, influencia significativamente a resolução e a separabilidade da decomposição espectral.

Para esclarecer os conceitos da metodologia SSA, demonstraremos sua aplicação à série determinística mostrada abaixo.

Série de exemplo

Essa série foi construída a partir de componentes aditivos predefinidos, compostos por uma tendência, um par de componentes periódicos e ruído aleatório. A soma desses componentes resulta em uma série um tanto atípica. O objetivo da SSA é identificar esses componentes subjacentes. Isso é feito por meio da decomposição da matriz de trajetórias ou da matriz de covariância da matriz de trajetórias; como resultado, os modos próprios, assim como na PCA, revelam os componentes principais da série.



Contribuições relativas e cumulativas dos componentes

O método vetorial do MQL5, SingularSpectrumAnalysisSpectrum(), gera um vetor que representa as contribuições relativas dos componentes da série. Esse vetor contém números reais cuja soma é igual a um, indicando o peso relativo de cada componente, com os valores dispostos em ordem decrescente. Essas contribuições correspondem às valores relativos dos autovalores calculados por meio da decomposição da matriz.

//---
   vector relative_contributions;
   if(!full_process.SingularSpectrumAnalysisSpectrum(WindowLen,relative_contributions))
     {
      Print(" error ", GetLastError());
      return;
     }
//---
   relative_contributions*=100.0;
   vector cumulative_contributions = relative_contributions.CumSum();

Ao calcular a soma acumulada das contribuições relativas, obtemos as contribuições cumulativas. Esses valores nos permitem determinar rapidamente o menor número de componentes necessário para alcançar uma aproximação relativamente próxima da série original. O gráfico das contribuições relativas frequentemente mostra quase patamares bem definidos, sugerindo que as contribuições de alguns componentes têm magnitude semelhante. Essa semelhança geralmente indica que esses componentes podem representar um único elemento periódico.

A seguir, são apresentados os gráficos das contribuições relativa e cumulativa do nosso exemplo.

Contribuições relativas da série de exemplo

Os gráficos mostram que os dois primeiros componentes respondem por cerca de 68% e 12% da variância total da série.

Contribuições cumulativas da série de exemplo

Somente os cinco primeiros componentes respondem por mais de 98%. O gráfico das contribuições relativas assume uma forma característica, evidenciando a dominância dos 5 primeiros componentes. O ponto que separa os componentes dominantes dos demais costuma ser chamado de "ponto de inflexão", e os componentes abaixo desse nível são chamados de "nível de ruído". Ele fornece uma estimativa aproximada da separação entre sinal e ruído. Outro aspecto notável do gráfico das contribuições relativas é a forma como os componentes dois e três aparecem agrupados separadamente dos componentes quatro e cinco. Isso indica que esses pares de componentes estão relacionados entre si e podem representar características específicas da série.



Extração dos componentes da série

Depois de analisar nossa série de exemplo, temos uma noção dos principais componentes que determinam a maior parte de seu comportamento. Para avaliar sua regularidade, pode ser útil visualizar esses componentes. É aqui que entra o método vetorial SingularSpectrumAnalysisReconstructComponents(). O elemento mais relevante aqui é a matriz das séries de componentes. No entanto, deve-se lembrar que, embora a documentação do MQL5 sugira que as colunas representem as séries estimadas dos componentes, na verdade o método armazena cada série componente como uma linha da matriz. Além disso, a saída vetorial do método contém os autovalores brutos da decomposição da matriz representativa da série.

//---
   matrix components;
   vector eigvalues;
   if(!full_process.SingularSpectrumAnalysisReconstructComponents(WindowLen,components,eigvalues))
     {
      Print(" error ", GetLastError());
      return;
     }
//---

As linhas da matriz das séries de componentes são dispostas em ordem decrescente da valor relativo da contribuição. Consequentemente, a primeira linha contém o componente correspondente ao maior autovalor, que também representa o componente com a maior contribuição relativa. A seguir, é apresentado um gráfico com todos os componentes da nossa série de exemplo. todos os componentes da nossa série de exemplo.

Componentes da decomposição da série de exemplo

Se o compararmos com o gráfico dos componentes originais, poderemos notar algumas discrepâncias. Isso destaca o fato de que a decomposição SSA não é exata. Esse método nunca conseguirá recuperar com precisão os componentes periódicos de uma série. Tudo o que ele pode fazer é encontrar aproximações ou estimativas ótimas desses componentes. Ainda assim, a soma das séries dos componentes individuais reconstitui a série original.



Filtragem

Com um conjunto de séries de componentes à disposição, é possível usar as informações obtidas pela análise SSA para determinar quais componentes descrevem o sinal principal e quais representam ruído não determinístico. Se nosso objetivo principal forem os ciclos dominantes, podemos descartar os componentes com menor contribuição relativa para obter uma série filtrada. Ao fazer isso, pressupomos que esses componentes menores representam o ruído que obscurece o sinal principal.

Essa filtragem pode ser executada diretamente na série usando o método SingularSpectrumAnalysisReconstructSeries(). Em seguida, o usuário especifica a quantidade de componentes dominantes que serão incluídos na série filtrada. usando o método SingularSpectrumAnalysisReconstructSeries(). O usuário especifica a quantidade de componentes dominantes que serão incluídos na série filtrada.

//---
   vector filtered;
   if(!full_process.SingularSpectrumAnalysisReconstructSeries(WindowLen,FilterComponents,filtered))
     {
      Print(" error ", GetLastError());
      return;
     }

Em geral, o método SSA permite isolar o ruído de forma eficiente, mas sua eficácia depende da natureza do ruído presente no processo analisado. A simples remoção dos componentes com menor contribuição relativa pode não ser suficiente para remover completamente o ruído. Consequentemente, isso também afeta a extração de sinais, tendências ou componentes periódicos específicos. A interpretação desses componentes frequentemente precisa ser validada por meio de testes estatísticos de significância. Outro aspecto que pode afetar o isolamento de componentes específicos está relacionado à presença de tendências fortes, cuja dominância pode mascarar outras oscilações de baixa frequência nos dados.

Série de exemplo filtrada



Previsão

Um dos aspectos mais interessantes da metodologia SSA é sua aplicação à previsão. Essa funcionalidade é oferecida pelo método SingularSpectrumAnalysisForecast(). Após a decomposição e a reconstrução da série temporal, a etapa de previsão geralmente usa um algoritmo de previsão recorrente. Esse algoritmo utiliza a relação de recorrência linear (Linear Recurrent Relation, LRR) inerente a ele (Linear Recurrent Relation, LRR), que os componentes reconstruídos frequentemente satisfazem. Pressupõe-se que esses componentes reconstruídos sigam um padrão previsível. Com base nos vetores singulares e na série reconstruída, determina-se um conjunto de coeficientes. Esses coeficientes representam uma relação linear entre valores passados e futuros no sinal reconstruído. Para prever um novo ponto de dados, o algoritmo aplica uma combinação linear dos valores anteriores da série reconstruída, em número igual ao "comprimento da janela", ponderando-os pelos coeficientes definidos. Em seguida, esse procedimento é repetido iterativamente para gerar várias previsões.

//---
   vector forecast;
   if(!full_process.SingularSpectrumAnalysisForecast(WindowLen,FilterComponents,ForecastLen,forecast))
     {
      Print(" error ", GetLastError());
      return;
     }
//---

Deve ficar claro que essas previsões pressupõem que os padrões anteriores se manifestarão no futuro exatamente da mesma forma que se manifestaram no passado. Naturalmente, isso dificilmente é verdadeiro para séries temporais reais. Apesar disso, a SSA pode ser útil para aumentar a previsibilidade de processos complexos ao concentrar a análise em determinados componentes com formas de onda regulares.



Escolha e pré-processamento dos parâmetros

Já foi estabelecido que a decomposição de uma série por meio da SSA nunca conseguirá extrair com exatidão os componentes periódicos de uma série temporal de uma série temporal. O máximo que ela consegue fazer é obter estimativas dos componentes. Essa é uma limitação evidente do método, agravada ainda mais por sua sensibilidade ao comprimento da janela escolhido. A escolha do comprimento correto da janela pode depender dos objetivos da decomposição. Se o interesse principal for destacar a tendência, quanto maior o comprimento da janela, melhor. No entanto, se os componentes oscilatórios forem mais importantes, os especialistas devem levar em conta os períodos das oscilações; por exemplo, se o objetivo for encontrar um componente periódico que oscila com período 20, defina o comprimento da janela como 20.

Ao que parece, os dados empíricos apresentados na literatura científica indicam que o comprimento da janela define a resolução para oscilações com períodos no intervalo de L/5 a L no intervalo de L/5 a L, em que L é o comprimento da janela. O problema é que o período do componente de interesse pode não ser conhecido de antemão, o que exige muitas tentativas e ajustes. Uma regra prática geral é definir o comprimento da janela no intervalo entre dois e metade do comprimento da série estudada. Um comprimento de janela maior reforça componentes de variação lenta, enquanto um comprimento de janela menor captura detalhes mais finos.

Além da sensibilidade da SSA ao comprimento da janela, os especialistas também devem saber como tendências fortes presentes nas séries temporais podem afetar os resultados da decomposição. Tendências fortes podem mascarar outros componentes de baixa frequência na série. Esse problema pode ser resolvido, sobretudo, pela remoção da tendência da série original antes da aplicação da SSA. Os tipos de pré-processamento que podem ser aplicados incluem centralização ou remoção da tendência linear, como mostrado no fragmento de código abaixo.

//---
   if(m_detrend)
     {
      vector reg = m_buffer.LinearRegression();
      m_buffer -= reg;
     }
//---

Ao decidir quantos componentes selecionar na filtragem ou na previsão, os gráficos de contribuições relativas e cumulativas podem ser de grande ajuda. No gráfico de contribuições relativas, deve-se identificar o ponto de "inflexão" que separa o sinal do ruído. Os pontos do gráfico correspondentes ao sinal aparecerão acima de uma separação nítida em relação aos pontos cujos valores diminuem lentamente até zero. O mesmo deve ser perceptível ao examinar o decaimento dos autovalores brutos da decomposição. Outra opção aceitável é definir uma meta para o percentual total de variância coberta (normalmente de 85% a 95%) e, em seguida, obter, na série de contribuições cumulativas, o número de componentes correspondente a esse valor.



Agrupamento de componentes

Sabemos que a decomposição SSA não consegue reproduzir magicamente os reproduzir com exatidão os componentes subjacentes da série; vimos isso em um exemplo simples. Como resultado, obtemos um conjunto de componentes que aproxima a composição efetiva da série. Precisamos apenas descobrir como combinar nossas estimativas para obter uma visão mais completa dos elementos efetivos que determinam o processo. Isso pode ser feito construindo uma matriz de correlação ponderada das séries de componentes. A matriz de correlação ponderada mede o quanto um par de séries componentes se afasta da ortogonalidade ideal. Se um par de séries componentes for perfeitamente ortogonal, é mais provável que elas sejam componentes distintos.

Valores de correlação mais altos indicam que o par deve ser combinado. O fragmento de código abaixo ilustra um procedimento que calcula a matriz de correlação ponderada levando em conta a matriz das séries de componentes e o parâmetro de comprimento da janela da decomposição SSA. A função é declarada no arquivo ssa.mqh anexado ao artigo. 

//+------------------------------------------------------------------+
//| component correlations                                           |
//+------------------------------------------------------------------+
matrix component_corr(ulong windowlen,matrix &components)
  {
   double w[];
   ulong fsize = components.Cols();
   ulong r = fsize - windowlen + 1;
  
   for(ulong i = 0; i<fsize; i++)
     {
      if(i>=0 && i<=windowlen-1)
         w.Push(i+1);
      else
         if(i>=windowlen && i<=r-1)
            w.Push(windowlen);
         else
            if(i>=r && i<=fsize-1)
               w.Push(fsize-i);
     }

   vector weights;
   weights.Assign(w);
   ulong d = windowlen;

   vector norms(d);
   matrix out = matrix::Identity(d,d);

   for(ulong i = 0; i<d; i++)
     {
      norms[i] = weights.Dot(pow(components.Row(i),2.0));
      norms[i] = pow(norms[i],-0.5);
     }

   for(ulong i = 0; i<d; i++)
     {
      for(ulong j = i+1; j<d; j++)
        {
         out[i][j] = MathAbs(weights.Dot(components.Row(i)*components.Row(j))*norms[i]*norms[j]);
         out[j][i] = out[i][j];
        }
     }

   return out;
  }

A seguir, é mostrado um fragmento das correlações dos componentes que compõem os seis principais componentes da série usada no nosso exemplo.

Matriz parcial das correlações dos componentes

O gráfico mostra uma alta correlação entre os componentes nos índices (1:2), o que corresponde à relação entre os componentes 2 e 3, enquanto os componentes indicados pelo índice (3:4) se referem à relação entre os componentes 4 e 5. Ao que parece, essa análise está de acordo com a inspeção visual do gráfico de contribuições relativas examinado anteriormente. Com base nisso, poderíamos levantar a hipótese de que os dois grupos de componentes podem corresponder a componentes periódicos da série do nosso exemplo. O componente superior isolado se destaca e provavelmente representa a tendência. Como já vimos nas contribuições cumulativas, esses 5 componentes respondem por 98% da contribuição total; portanto, o restante provavelmente é ruído.



Visão geral da decomposição de séries de preços

Nesta seção, apresentamos um aplicativo implementado como EA que pode ser usado para visualizar os componentes de uma amostra arbitrária de preços. O aplicativo tem uma interface gráfica de usuário que permite definir o símbolo, a data e o comprimento da série de preços a ser exibida e decomposta. Antes da decomposição, é possível remover a tendência da série. Também é possível, se desejado, visualizar os gráficos das contribuições relativa e cumulativa. A seguir, é mostrada uma captura de tela do aplicativo exibindo uma amostra de preços de fechamento do EURUSD, com o componente da decomposição mostrado no gráfico inferior.

Aplicativo de decomposição de preços


Conclusão

Este artigo aborda as novas ferramentas em MQL5 para análise espectral singular (SSA). É dada atenção especial às extensões OpenBLAS para o tipo vector. Apresentamos uma breve visão geral do método SSA, evitando deliberadamente explicações matemáticas detalhadas. Em resumo, a SSA é uma ferramenta valiosa para qualquer profissional da área, mas sua plena eficácia exige uma escolha cuidadosa dos parâmetros e a compreensão das nuances de seu funcionamento. Todo o código referenciado está incluído e anexado abaixo. 

Nome do arquivo   Descrição do arquivo 
MQL5/include/ssa.mqh
Este arquivo de cabeçalho contém a definição da função que implementa o cálculo das correlações dos componentes descritas na seção "Agrupamento de componentes".
MQL5/scripts/SSA_Filtered_Demo.mq5
Este é o script usado para demonstrar a filtragem com SSA.
MQL5/scripts/SSA_Decomposition_Demo.mq5
Este é o script usado para demonstrar a decomposição de uma série com SSA.
MQL5/scripts/SSA_ComponentContributions_Demo.mq5
Este é o script usado para demonstrar a exibição das contribuições relativas dos componentes.
MQL5/scripts/SeriesPlot.mq5
Este script foi usado para representar graficamente os diversos componentes das séries de exemplo mencionadas no artigo.
MQL5/experts/SSA_PriceDecomposition.ex5
Este EA pode ser usado para exibir a decomposição de uma série de preços arbitrária. a decomposição de uma série de preços arbitrária.
MQL5/experts/SSA_PriceDecomposition.mq5
Este é o código-fonte do EA mencionado acima.

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

Arquivos anexados |
MQL5.zip (37 KB)
Últimos Comentários | Ir para discussão (1)
Stanislav Korotky
Stanislav Korotky | 10 jul. 2025 em 16:18

É estranho ver artigos tão próximos sobre o mesmo tópico (mesmo que um deles tenha sido originalmente escrito em russo) em um período muito curto de tempo.

Artigos

Análise de espectro singular unidimensional

Evgeny Chernish, 23/04/2025 11:23

O artigo examina os aspectos teóricos e práticos do método de análise de espectro singular (SSA), que é um método eficaz para analisar séries temporais que permite que a estrutura complexa de uma série seja representada como uma decomposição em componentes simples, como tendência, flutuações sazonais (periódicas) e ruído.

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.
Teoria dos grafos: Algoritmo de Dijkstra no trading Teoria dos grafos: Algoritmo de Dijkstra no trading
O algoritmo de Dijkstra é uma solução clássica para a busca do caminho mais curto na teoria dos grafos, permitindo otimizar estratégias de trading por meio da modelagem de redes de mercado. Traders podem utilizá-lo para encontrar as rotas mais eficientes nos dados de um gráfico de candles.
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.
Técnicas do MQL5 Wizard que você deve conhecer (Parte 57): Aprendizado Supervisionado com Média Móvel e Oscilador Estocástico Técnicas do MQL5 Wizard que você deve conhecer (Parte 57): Aprendizado Supervisionado com Média Móvel e Oscilador Estocástico
A Média Móvel e o Oscilador Estocástico são indicadores muito comuns que alguns traders podem não usar com frequência devido à sua natureza atrasada. Em uma “minissérie” de 3 partes que considera as 3 principais formas de aprendizado de máquina, buscamos verificar se esse viés contra esses indicadores é justificado ou se eles podem estar mantendo alguma vantagem. Realizamos nossa análise em Expert Advisors montados pelo wizard.