Previsão de séries temporais (parte 1): decomposição do modo empírico (EMD)

Stanislav Korotky | 21 maio, 2020

Introdução

O sucesso de cada trader, antes de tudo, depende principalmente de sua capacidade de olhar para o futuro, de determinar qual será o preço após um determinado período. Para resolver esse problema, é importante ter uma ampla gama de ferramentas, desde informações rápidas sobre as características fundamentais do mercado até algoritmos de análise técnica. Todos elas podem ser, até certo ponto, fortalecidas usando métodos matemáticos para prever séries temporais, séries essas que podem ser não apenas preços, mas, também, indicadores técnicos, volatilidade, indicadores macroeconômicos, o saldo da carteira de negociação, etc.

O tópico sobre a previsão é muito extenso e tem sido abordado no site mql5.com várias vezes. Um dos primeiros artigos, Prevendo séries temporais financeiras, foi publicado em 2008. Entre muitos outros artigos e publicações no CodeBase, existem ferramentas prontas para uso no MetaTrader que oferecem, por exemplo:

Você pode encontrar uma lista completa se procurar nas respectivas seções do site (artigos, CodeBase).

No caso deste material, complementaremos a lista de ferramentas de previsão disponíveis com mais duas novas. A primeira delas se baseia no método de decomposição do modo empírico (Empirical Mode Decomposition, EMD), que já foi considerado no artigo Introdução ao método de decomposição do modo empírico , mas sem aplicar à previsão. O EMD será abordado nesta primeira parte do material.

A segunda ferramenta utiliza o método de vetores de suporte (support-vector machine, SVM), em particular sua modificação de mínimos quadrados (Least-squares support-vector machine, LS-SVM). Vamos considerá-la na segunda parte do artigo.


Algoritmo preditivo com base na EMD

No artigo Introdução ao método de decomposição do modo empírico você pode se familiarizar com a abordagem da EMD. Ela, basicamente, consiste na decomposição da série temporal em componentes simples, isto é, em funções de modo intrínsecas (Intrinsic Mode Functions, IMF). Cada formulário é uma interpolação de spline de máximos e mínimos da série temporal, sendo que, primeiro, são procurados extremos para a série inicial e deles é subtraída a função de modo intrínseco (IMF) recém-encontrada, depois disso, é realizada a interpolação de spline já para os extremos da série modificada - esse processo de construção de várias FMIs continua até que o restante seja menor que o nível de ruído definido. O resultado deste trabalho se assemelha visualmente à decomposição em séries de Fourier, mas, diferentemente desta, as formas características da EMD não são vibrações harmônicas com determinadas frequências. O número de funções de decomposição da IMF obtido depende da suavidade da série inicial e das configurações do algoritmo.

No artigo mencionado, são fornecidas classes prontas para o cálculo da EMD, mas propõe-se obter o resultado da decomposição na forma de gráfico num arquivo HTML externo. Tomaremos as classes como base e faremos as adições necessárias para tornar o algoritmo preditivo.

Ao artigo foram anexados 2 arquivos: CEMDecomp.mqh e CEMD_2.mqh. O segundo arquivo é uma versão ligeiramente melhorada do primeiro, e vamos nos afastar dele. Vamos copiá-lo com o novo nome EMD.mqh e, por enquanto, o incluiremos no indicador EMD.mq5 sem alterações.

Também vamos usar as classes especiais para declaração simplificada da matriz de indicadores de buffer IndArray.mqh (a descrição em inglês está disponível no blog, a versão atual está anexada ao artigo). Serão necessários muitos buffers e eles serão processados uniformemente.

Como você pode ver, o indicador é exibido numa janela separada e 18 buffers são reservados para exibi-lo:

O último ponto é mais interessante. Acontece que, após receber as funções da IMF, podemos adicionar algumas (mas não todas) e obter uma versão otimizada da série inicial. É a reconstrução suavizada que servirá como fonte da previsão, pois é a soma dos splines conhecidos que pode ser calculada no futuro para as barras ainda ausentes (extrapolação de spline). No entanto, a profundidade da previsão deve ser limitada a algumas barras, uma vez que as IMFs encontradas perdem sua relevância à medida que se afastam do último ponto conhecido para o qual foram obtidos.

Mas voltando ao arquivo EMD.mqh. Ele define a classe CEMD, que faz todo o trabalho. O processo é iniciado chamando o método decomp, ao qual é transferida a matriz com amostras de séries temporais, y. O tamanho dessa matriz determina o comprimento de N fragmentos de funções próprias - IMFResult. As matrizes auxiliares para seu cálculo são preparadas pelo método arrayprepare:

Para aumentar o número de pontos de cálculo, ao método decomp adicionamos o novo parâmetro extrapolate, que define a profundidade da previsão. Aumentamos N pelo número de contagens solicitadas em extrapolar, após manter o comprimento real da série inicial na variável local Nf (as alterações estão comentadas no código com os sinais "+" e "*" - eles mostram que "adicionado" e "alterado", respectivamente).

A construção do FMI nas barras previstas começa com o último valor conhecido da série temporal.

Essas são quase todas as alterações necessárias para a previsão. O código completo do que resultou é fornecido no arquivo anexado EMDloose.mqh. Mas por que EMDloose.mqh e não EMD.mqh?

Acontece que esse método de previsão não está totalmente correto. Como aumentamos o tamanho N de todas as matrizes do objeto, isso inclui as barras previstas na pesquisa de extremos, que é realizada no método extrema. Estritamente falando, no futuro não há extremos. Todos os extremos gerados durante os cálculos são extremos da soma das extrapolações de spline (sem a série inicial, que não está no futuro). Como resultado, as funções spline começam a tentar suavizar sua superposição. Em certo sentido, isso é conveniente porque a previsão se equilibra, quer dizer, o processo oscilatório permanece próximo aos valores da série temporal e não chega ao infinito. No entanto, o valor dessa previsão é mínimo, pois não caracteriza mais a série temporal inicial. Adicionalmente, esse método, sem dúvida, tem o direito de existir, e aqueles que desejem podem usá-lo anexando o EMDloose.mqh ao projeto.

Para corrigir o problema, faremos mais algumas modificações e obteremos a versão final do EMD.mqh. Para comparar os efeitos dos dois métodos de previsão, verificaremos abaixo o funcionamento do indicador com EMD.mqh e EMDloose.mqh.

Bem, precisamos garantir que as funções IMF sejam construídas no futuro em splines a partir do último ponto real da série temporal. Nesse caso, a profundidade da previsão terá uma limitação física (de aplicação), pois splines cúbicos, sem ajuste, tendem ao infinito. Isso não é crítico, pois a profundidade da previsão deve inicialmente ser limitada a algumas barras.

A essência das alterações é salvar o comprimento da série temporal inicial numa variável de objeto e não localmente no método decomp.

Em seguida, podemos usar a variável Nf dentro do método extrema, substituindo-a pelo N aumentado. Assim, serão levados em consideração apenas extremos reais originários da série inicial. A maneira mais fácil de ver todas as alterações é através da comparação contextual dos arquivos EMD.mqh e EMDloose.mqh.

Isso conclui o algoritmo de previsão. Resta fazer um retoque no que diz respeito à obtenção dos resultados da decomposição. Na classe CEMD, o getIMF é projetado para essa finalidade. Inicialmente, para ele foram transferidos dois parâmetros: a matriz receptora — x e o número solicitado da IMF "harmônica" — nn.

Aqui foi adicionado o parâmetro opcional reverse, ele permite que possamos classificar a matriz na ordem inversa. Isso é necessário para trabalhar com buffers de indicador, para os quais é conveniente a indexação como nas "séries temporais" (o 0º elemento é o último cronologicamente).

Assim fica concluída a expansão da classe CEMD para fins de previsão, e podemos continuar diretamente com a implementação do indicador baseado na EMD.

Indicador EMD.mq5

Por uma questão de demonstração, o indicador trabalhará diretamente com cotações, no entanto, essa abordagem não pode ser considerada adequada para implementar na negociação real. Prever uma faixa de preços usando extrapolação envolve pelo menos um filtro de notícias para descartar fortes influências externas no horizonte de previsão. Para períodos gráficos mais pequenos, o preferido talvez seja o movimento lateral noturno. Além disso, é recomendável usar períodos gráficos grandes, menos expostos a ruído, ou cestas sintéticas de vários instrumentos balanceadas.

Definimos os parâmetros de entrada do indicador:

Os parâmetros Offset e Length definem o deslocamento e o número de barras para a série analisada. Para simplificar a análise de previsões no histórico, o parâmetro Offset é duplicado na interface por uma linha tracejada vertical que pode ser arrastada com o mouse no gráfico e recalcula interativamente a previsão (observe que o cálculo pode tardar, dependendo do comprimento, forma da série e potência do processador).

Parâmetro Forecast — número de barras previstas. Para o algoritmo do EMD.mqh, é recomendável não assumir um valor maior que 5-10. Para o algoritmo simplificado do EMDloose.mqh, são aceitáveis valores grandes.

O parâmetro Reconstruction define o número de funções IMF, que precisam ser descartadas durante a reconstrução da série temporal, para que o restante forme uma previsão. Se aqui for indicado 0, a reconstrução coincide completamente com a série inicial e a previsão se torna impossível (a rigor, é igual a uma constante, isto é, ao último valor do preço e, portanto, não faz sentido). Se for indicado 1, a reconstrução será suavizada descartando as menores flutuações; se for indicado 2, os dois "harmônicos" mais altos serão descartados e assim por diante. Se digitarmos um número igual ao número de funções IMF encontradas, a reconstrução coincidirá com o restante ("tendência"). Em todos esses casos, a série suavizada tem uma previsão (para cada combinação do número de IMFs, há uma previsão própria). Se for especificada uma quantidade maior que o número de IMFs, não serão definidas reconstrução e previsão. O valor recomendado para o parâmetro é 2.

Quanto mais baixo o valor de Reconstruction, mais móvel e próxima à linha inicial será a reconstrução (semelhante a uma MA de período gráfico pequeno), mas a previsão será muito volátil. Quanto maior esse valor, mais suave e mais estável será a reconstrução e a previsão (semelhante à MA mais antiga).

No manipulador OnInit, definimos o deslocamento dos buffers de acordo com a profundidade da previsão.

O indicador é calculado com base nos preços de abertura no modo de barra única. Aqui estão os momentos chave do manipulador OnCalculate.

Descrevemos as variáveis locais e definimos a indexação dos Open e Time usados como "TimeSeries".

Fornecemos um modo de barra único.

Esperamos uma quantidade suficiente de dados.

Inicializamos os buffers de indicador.

Distribuímos a matriz local yy para transferir a série inicial para o objeto e, em seguida, obtemos os resultados.

Preenchemos uma matriz com uma série temporal para análise.

Iniciamos o algoritmo EMD usando o objeto correspondente.

Se for bem-sucedido, lemos os dados recebidos: primeiro, o número de funções IMF e a média.

Expandimos a matriz yy, na qual escreveremos os pontos de cada função, para as barras futuras.

Configuramos a visualização: a série inicial, a reconstrução e a previsão são exibidas em linhas em negrito, todos os outros IMF individuais são exibidos em linhas finas. Como o número de IMFs muda dinamicamente (dependendo da forma da série inicial), essa configuração não pode ser executada uma vez no OnInit.

Exibimos as séries temporais iniciais no último buffer (apenas para monitorar os dados transferidos, porque na prática, por exemplo, a partir do código dos EAs, não precisamos deles).

Distribuímos a matriz sum para reconstrução (somas de IMFs). No ciclo, classificamos todas as IMFs envolvidas na reconstrução e sumamos as contagens nessa matriz. Ao longo do caminho, imprima cada FMI em seu buffer.

O penúltimo buffer recebe o restante e é exibido com uma linha pontilhada.

De fato, os primeiros a penúltimos buffers contêm todos os "harmônicos" da decomposição em ordem de precedência (primeiro pequenos, depois maiores, até a "tendência").

Finalmente, acabamos de somar os componentes de acordo com as contagens na matriz sum e obtemos a reconstrução final.

Exibimos a quantidade juntamente com a previsão no buffer zero. O índice zero é escolhido para simplificar a leitura a partir de EAs. O número de IMF e buffers envolvidos, como regra, muda com a chegada de uma nova barra e, portanto, outros índices de buffer são inconsistentes.

O artigo não fala sobre algumas das nuances da rotulagem e do trabalho interativo com a linha de deslocamento do histórico. O código fonte completo está anexado no final do artigo.

A única nuance digna de nota é que, quando ao alterar o deslocamento do parâmetro Offset com ajuda de uma linha vertical, o indicador solicita uma atualização do gráfico chamando ChartSetSymbolPeriod. Essa função é implementada no MetaTrader 5 de forma que libere os caches de todos os períodos gráficos do símbolo atual e os reconstrua novamente. Dependendo da configuração selecionada para o número de barras nos gráficos e a potência do computador, esse processo pode demorar bastante (em alguns casos, dezenas de segundos, se, por exemplo, houver gráficos M1 com milhões de barras). Infelizmente, a API MQL não fornece outra maneira mais econômica de reconstruir um indicador separado. Por isso, se esse problema ocorrer, é recomendável alterar o deslocamento através da caixa de diálogo de propriedades do indicador ou reduzir o número de barras exibidas nos gráficos (é necessária uma reinicialização do terminal). Uma linha vertical de cursor foi adicionada para posicionamento interativo e preciso no início pretendido da amostragem de dados.

Vamos verificar como funciona o indicador em modos estrito e simplificado com as mesmas configurações (lembre-se de que o modo simplificado é obtido recompilando com o arquivo EMDloose.mqh, porque não é o principal para trabalhar). Para o gráfico EURUSD D1, use as seguintes configurações:

Previsão curta, indicadores EMD, EURUSD D1

Previsão curta, indicadores EMD, EURUSD D1

A captura de tela mostra 2 versões do indicador: uma estrita na parte superior e outra simplificadas na parte inferior. Observe que na versão estrita alguns "harmônicos" tendem a "fugir" em diferentes direções, para cima e para baixo. Devido a isso, até a escala do primeiro indicador fica menor que o segundo (a mudança na escala é um aviso visual sobre o fato de a profundidade da previsão ser inadequada). No modo simplificado, todos os componentes de decomposição continuam a oscilar perto de zero. Por esse motivo, é possível obter uma previsão de longo prazo substituindo no parâmetro Forecast, por exemplo, um valor de 100. Parece bonito, mas, geralmente, longe da realidade. Essa previsão só pode ser aplicada para avaliar a faixa futura de movimentos de preços, na qual podemos tentar negociar durante uma recuperação interna e uma fuga externa.

Previsão longa, indicadores EMD, EURUSD D1

Previsão longa, indicadores EMD, EURUSD D1

Na versão estrita, isso leva ao fato de que vemos apenas o final dos polinômios divergindo até o infinito, e o conteúdo do gráfico "recolhido" na região zero.

No cabeçalho dos indicadores ao aumentar o horizonte da previsão também são visíveis diferenças: se, inicialmente nos dois casos, foram encontradas 6 funções próprias (o segundo número entre parênteses, após o número de barras analisadas), agora uma versão simplificada usa 7, pois nesse caso as 100 barras de previsão solicitadas participam dos cálculos de extremos. Uma previsão de 10 barras não tem esse efeito (para uma determinada série temporal). Pode-se supor que Forecast = 10 seja o comprimento máximo permitido, mas não recomendada. O comprimento recomendado é de 2-4 barras.

Para visualizar as séries temporais e as previsões iniciais reconstruídas, é fácil criar um indicador semelhante exibido diretamente no gráfico de preços — EMDPrice. Sua estrutura interna repete completamente o indicador EMD abordado, mas há apenas um buffer (as IMFs individuais estão envolvidas nos cálculos, mas não são exibidas, para não tornar confuso o gráfico).

O EMDPrice usa uma forma abreviada do manipulador OnCalculate, que permite escolher o tipo de preço para calcular, por exemplo, um preço típico. No entanto, para qualquer tipo, além do preço de abertura, deve-se ter em mente que o indicador é calculado segundo a abertura de barras e, portanto, a barra 1 é considerada a última em se formar (com todos os tipos de preços). Em outras palavras, Offset pode ser igual a 0 apenas para preços de abertura e, em outros casos, 1 ou mais.

A captura de tela abaixo mostra a operação do indicador EMDPrice com um deslocamento de 15 barras para o passado.

Previsão do indicador EMDPrice no gráfico de preços EURUSD D1

Previsão do indicador EMDPrice no gráfico de preços EURUSD D1, com deslocamento no histórico

Para testar as habilidades de previsão do indicador EMD, desenvolveremos um EA especial.

EA de teste baseado na EMD

Vamos criar um simples EA, TestEMD, que criará uma instância do indicador EMD e fará operações de negociação com base em sua previsão. O trabalho será realizado com base na abertura da barra, pois o indicador usa o preço de abertura para previsão.

Principais parâmetros de entrada do EA:

Como um sinal de negociação é tomada diferença entre a leitura do indicador na barra SignalBar (para olhar para o futuro previsto, esse parâmetro é considerado negativo) e na barra zero atual. Uma diferença positiva é um sinal de compra, uma diferença negativa, sinal de venda.

Como o indicador EMD faz uma previsão, o número de barras no SignalBar é geralmente negativo e igual em magnitude ao valor Forecast (em princípio, podemos receber um sinal de uma barra menos distante, mas, nesse caso, não fica claro o porquê de calcular a previsão para um número maior de barras). Isso se aplica ao modo normal de operação com implementação de operações de negociação. Nesse modo, quando o indicador EMD é chamado, seu parâmetro Offset é sempre zero, porque não examinamos previsões no histórico.

No entanto, o EA também suporta outro modo especial de não negociação, que permite que a otimização seja acelerada calculando teoricamente a lucratividade das transações virtuais nas últimas barras Forecast. O cálculo é realizado sequencialmente em cada nova barra do intervalo de datas selecionado, e as estatísticas gerais na forma de um fator de lucro para fazer uma previsão sobre a movimentação do preço real são retornadas do OnTester. No testador, devemos selecionar um critério personalizado como alvo de otimização. Para ativar esse modo, digite 0 no parâmetro SignalBar. Nesse caso, o próprio EA define automaticamente o Offset como igual à Forecast. É isso que permite ao EA comparar a previsão e as alterações de preços nas últimas barras Forecast.

Certamente, o EA pode ser otimizado no modo normal, juntamente com a implementação de operações de negociação e a escolha de qualquer indicador de otimização embutido. Isto é especialmente verdade, uma vez que o modo de não negociação é aproximado (em particular, ele não leva em consideração os spreads). Mas o máximo e o mínimo de ambas as funções devem coincidir aproximadamente.

Graças a que a previsão pode ser feita várias barras à frente e, nesse momento, será aberta a posição na direção correspondente, é possível a existência simultânea de posições multidirecionais. Por exemplo, se a Forecast for 3, cada posição será mantida no mercado durante 3 barras e, a cada momento, estarão abertas 3 posições, que poderão ser de tipos diferentes. Nesse sentido, é necessária uma conta de cobertura.

O código fonte completo do EA está anexado ao artigo e não está descrito em detalhes. A parte de negociação é baseada na biblioteca MT4Orders, o que simplifica a chamada das funções de negociação. No EA, não há controle de ordens sob o princípio de "amigo ou inimigo" com a ajuda de números mágicos, tratamento rigoroso de erros, definição de derrapagem, stop loss e take profit. Um lote fixo é definido no parâmetro de entrada Lot, a negociação é realizada por ordens a mercado. Aqueles que desejam aplicar a EMD em EAs de trabalho podem complementar esse EA de teste com os recursos adequados, conforme necessário, ou acrescentar o trabalho com o indicador EMD por analogia em seus EAs.

Um exemplo de configurações para otimização é anexado ao artigo na forma de arquivo TestEMD.set. A otimização com base no EURUSD D1 para 2018 no modo acelerado fornece o seguinte conjunto ideal:

Assim, o SignalBar deve ser igual à Forecast com um sinal de menos, que é -4.

Um único teste com essas configurações para o período entre o início de 2018 e fevereiro de 2020, ou seja, com o avanço de 2019 e o início de 2020, fornece a seguinte imagem:

Relatório do EA TestEMD para EURUSD D1, 2018-2020

Relatório do EA TestEMD para EURUSD D1, 2018-2020

Como podemos ver, o sistema permanece em território positivo, embora os indicadores deixem espaço para melhorias. Em particular, é lógico supor que a otimização mais frequente no modo passo a passo e a seleção do tamanho da etapa podem melhorar o trabalho do robô.

Em geral, pode-se afirmar que o algoritmo da EMD nos permite identificar flutuações fundamentais, em certo sentido, inerciais, entre aspas em períodos gráficos grandes e criar um sistema de negociação lucrativo baseado neles.

A EMD não é a única abordagem que tocaremos neste artigo. Mas antes de passar para a segunda parte, precisamos "atualizar" alguns aparelhos matemáticos para o estudo de séries temporais.

Análise das principais características das séries temporais em MQL — Indicador TSA

No site mql5.com já foi publicado artigo com um nome semelhante: Análise das principais características da série temporal. Ele abordava em detalhes o cálculo de valores, como média, mediana, variância, coeficientes de assimetria e curtose, histograma de distribuição, funções de autocorrelação, autocorrelação privada e muito mais. Tudo isso está resumido na classe TSAnalysis no arquivo TSAnalysis.mqh, que é usado para fins de demonstração no script TSAexample.mq5. Infelizmente, para visualizar o trabalho da classe, foi adotada uma abordagem com a geração de um arquivo HTML externo que precisa ser analisado num navegador. Ao mesmo tempo, o MetaTrader 5 fornece várias ferramentas gráficas para exibir matrizes de dados, principalmente buffers de indicadores. Modificamos ligeiramente a classe e a tornamos mais amigável para indicadores, após o que implementamos um indicador que nos permite analisar cotações diretamente no terminal.

O novo arquivo de classe é chamado TSAnalysisMod.mqh. O princípio básico de operação permanecerá o mesmo: com ajuda do método Calc, ao objeto é transferida uma série temporal, para a qual todo o conjunto de indicadores é calculado durante o processamento. Todos eles são divididos em 2 tipos: escalares e matrizes. O código de chamada pode então ler qualquer uma das características.

Reduziremos as características escalares num única estrutura TSStatMeasures:

Matrizes são indicadas por itens de enumeração TSA_TYPE:

Para obter a estrutura TSStatMeasures preenchida com os resultados do trabalho, é fornecido o método getStatMeasures. Para obter qualquer uma das matrizes com ajuda de macros, foram gerados os mesmos métodos de tipo getARRAYNAME, em que ARRAYNAME corresponde ao sufixo de um dos elementos de enumeração TSA_TYPE. Por exemplo, para ler uma série temporal ordenada, é preciso chamar o método getTimeSeriesSorted. Todos esses métodos têm uma assinatura:

preenchem a matriz passada e retornam o número de elementos.

Além disso, existe um método universal para ler qualquer matriz:

O método virtual show da classe original foi completamente removido por ser desnecessário. Todas as tarefas da interface são atribuídas ao código de chamada.

É conveniente processar cotações com ajuda da classe TSAnalysis desde um indicador especial — TSA.mq5. Seu principal objetivo é visualizar as características das matrizes. Quem desejar pode, se necessário, complementá-lo com a exibição de quantidades escalares (agora elas são impressas no log).

Como algumas matrizes são logicamente interconectadas em triplos (por exemplo, a função de autocorrelação possui limites superior e inferior do intervalo de confiança de 95%), três buffers são reservados no indicador. Os estilos de exibição do buffer são ajustados dinamicamente, dependendo do tipo de dados solicitados.

Parâmetros de entrada do indicador:

O indicador é calculado com base em barras.

Neste caso, por exemplo, temos uma função de autocorrelação privada para EURUSD D1 em 500 barras, com diferenciação:

Indicador TSD, EURUSD D1

Indicador TSD, EURUSD D1

Tomar diferenças de primeira ordem nos permite aumentar a estacionariedade (e previsibilidade) da série. Em princípio, a diferença de segunda ordem será mais estacionária e a terceira, ainda mais estacionária, e assim por diante. No entanto, isso também tem suas desvantagens, que serão discutidas mais adiante (na segunda parte).

Aqui também escolhemos a função de autocorrelação privada, não por acaso. Precisamos dela no próximo estágio, quando passarmos para outro método de previsão. Mas como ainda precisa ser estudado um material bastante volumoso, trouxemos este capítulo preparatório para este artigo. Além disso, a análise estatística de séries temporais é de valor universal e pode ser útil em outros projetos MQL personalizados.


Fim do artigo

Neste artigo, examinamos os recursos do algoritmo de decomposição do modo empírico, o que possibilita expandir sua aplicabilidade ao campo de previsão de séries temporais de curto prazo. As classes, indicadores e EA implementados em MQL permitem usar a previsão de EMD como um fator adicional na tomada de decisões de negociação, bem como em sistemas de negociação automatizados. Além disso, atualizamos as ferramentas para análise estatística de séries temporais, que serão necessárias no próximo artigo ao estudar a previsão usando o método LS-SVM.