Online Time Series Smoothing Algorithm Forex


Aqui estão três artigos de pesquisa que examinam o uso do aprendizado de máquinas na previsão de séries temporais: uma comparação empírica dos modelos de aprendizado de máquina para previsões da série temporal por Ahmed, Atiya, El Gayar e El-shishiny fornece uma comparação empírica de vários algoritmos de aprendizado de máquina, Incluindo: . Perceptron multicamadas, redes neurais bayesianas, funções de base radial, redes neurais de regressão generalizada (também chamado de regressão do kernel), regressão do vizinho mais próximo, árvores de regressão do CART, regressão do vetor de apoio e processos gaussianos. . Que redes neuronais artificiais (RNAs) são a técnica dominante de aprendizado de máquinas nesta área. . A formalização dos problemas de previsão de um passo como tarefas de aprendizagem supervisionadas, a discussão das técnicas de aprendizagem local como uma ferramenta efetiva para lidar com dados temporais e o papel da estratégia de previsão quando passamos de uma etapa para uma previsão de etapas múltiplas. MetaTrader 5 - Estatística e análise Previsão da série de tempo usando o suporte exponencial Introdução Atualmente, existe um grande número de vários métodos de previsão bem conhecidos que se baseiam apenas na análise de valores passados ​​de uma seqüência de tempo, ou seja, métodos que empregam princípios normalmente utilizados na análise técnica . O instrumento principal desses métodos é o esquema de extrapolação em que as propriedades de seqüência identificadas em um determinado intervalo de tempo ultrapassam seus limites. Ao mesmo tempo, assume-se que as propriedades de sequência no futuro serão as mesmas do passado e do presente. Um esquema de extrapolação mais complexo que envolve um estudo da dinâmica das mudanças nas características da seqüência, tendo em conta essa dinâmica dentro do intervalo de previsão, é menos utilizado na previsão. Os métodos de previsão mais conhecidos baseados em extrapolação são talvez aqueles que utilizam o modelo de média móvel integrada autoregressivo (ARIMA). A popularidade desses métodos deve-se principalmente a obras da Box e da Jenkins, que propuseram e desenvolveram um modelo ARIMA integrado. Há, naturalmente, outros modelos e métodos de previsão além dos modelos introduzidos pela Box e Jenkins. Este artigo abordará brevemente modelos mais simples - modelos de suavização exponencial propostos por Holt e Brown, bem antes da aparição das obras da Box e da Jenkins. Apesar das ferramentas matemáticas mais simples e claras, a previsão usando modelos de suavização exponencial geralmente leva a resultados comparáveis ​​aos resultados obtidos usando o modelo ARIMA. Isso não é surpreendente, pois os modelos de suavização exponencial são um caso especial do modelo ARIMA. Em outras palavras, cada modelo de suavização exponencial em estudo neste artigo possui um modelo ARIMA equivalente correspondente. Estes modelos equivalentes não serão considerados no artigo e são mencionados apenas para informação. Sabe-se que a previsão em cada caso particular requer uma abordagem individual e geralmente envolve uma série de procedimentos. Análise da seqüência de tempo para valores faltantes e outliers. Ajuste desses valores. Identificação da tendência e do seu tipo. Determinação da periodicidade da sequência. Verifique a estacionaria da seqüência. Análise de pré-processamento de seqüência (tomando logaritmos, diferenciação, etc.). Seleção do modelo. Determinação do parâmetro do modelo. Previsão baseada no modelo selecionado. Avaliação de precisão de modelo de previsão. Análise de erros do modelo selecionado. Determinação da adequação do modelo selecionado e, se necessário, substituição do modelo e retorno aos itens anteriores. Esta não é, de longe, a lista completa de ações necessárias para uma previsão efetiva. Deve-se enfatizar que a determinação do parâmetro do modelo e a obtenção dos resultados previstos são apenas uma pequena parte do processo geral de previsão. Mas parece ser impossível cobrir toda a gama de problemas de uma forma ou de outra relacionada à previsão em um artigo. Este artigo, portanto, apenas lidará com modelos de suavização exponencial e usará citações de moeda não pré-processadas como seqüências de teste. Os problemas de acompanhamento certamente não podem ser evitados no artigo, mas serão abordados somente na medida em que sejam necessários para a revisão dos modelos. 1. Stationarity A noção de extrapolação adequada implica que o desenvolvimento futuro do processo em estudo será o mesmo que no passado e no presente. Em outras palavras, diz respeito à estacionaria do processo. Os processos estacionários são muito atraentes do ponto de vista da previsão, mas, infelizmente, não existem na natureza, pois qualquer processo real está sujeito a mudanças no decorrer do seu desenvolvimento. Os processos reais podem ter expectativas, variâncias e distribuições marcadamente diferentes ao longo do tempo, mas os processos cujas características mudam muito lentamente provavelmente podem ser atribuídos a processos estacionários. Muito lentamente, neste caso, significa que as mudanças nas características do processo dentro do intervalo de observação finito parecem ser tão insignificantes que tais mudanças podem ser negligenciadas. É claro que quanto menor for o intervalo de observação disponível (amostra curta), maior a probabilidade de tomar uma decisão errada em relação à estacionararia do processo como um todo. Por outro lado, se estamos mais interessados ​​no estado do processo mais tarde, planejando fazer uma previsão de curto prazo, a redução no tamanho da amostra pode, em alguns casos, levar ao aumento da precisão dessa previsão. Se o processo estiver sujeito a alterações, os parâmetros de seqüência determinados dentro do intervalo de observação serão diferentes fora dos limites. Assim, quanto mais o intervalo de previsão, mais forte o efeito da variabilidade das características da sequência no erro de previsão. Devido a esse fato, temos que nos limitar a uma previsão de curto prazo apenas uma redução significativa no intervalo de previsão permite esperar que as características de seqüência que mudam lentamente não resultem em erros de previsão consideráveis. Além disso, a variabilidade dos parâmetros de seqüência leva ao fato de que o valor obtido quando estimado pelo intervalo de observação é calculado, já que os parâmetros não permaneceram constantes dentro do intervalo. Os valores dos parâmetros obtidos, portanto, não estarão relacionados ao último instante desse intervalo, mas refletirão uma certa média do mesmo. Infelizmente, é impossível eliminar completamente esse fenômeno desagradável, mas pode ser diminuído se o comprimento do intervalo de observação envolvido na estimativa do parâmetro do modelo (intervalo de estudo) for reduzido na medida do possível. Ao mesmo tempo, o intervalo de estudo não pode ser encurtado indefinidamente porque, se extremamente reduzido, certamente diminuirá a precisão da estimação do parâmetro de seqüência. Deve-se procurar um compromisso entre o efeito de erros associados à variabilidade das características da sequência e o aumento dos erros devido à redução extrema no intervalo de estudo. Todo o acima aplica-se completamente à previsão usando modelos de suavização exponencial, uma vez que se baseiam no pressuposto da estacionararia de processos, como os modelos ARIMA. No entanto, por uma questão de simplicidade, a seguir, convencionalmente assumiremos que os parâmetros de todas as seqüências em consideração variam dentro do intervalo de observação, mas de maneira tão lenta que essas mudanças podem ser negligenciadas. Assim, o artigo abordará questões relacionadas com a previsão em curto prazo de seqüências com características que mudam lentamente com base em modelos de suavização exponencial. A previsão de curto prazo deve, nesse caso, prever previsões para um, dois ou mais intervalos de tempo em vez de prever por um período inferior a um ano, como geralmente é entendido em economia. 2. Sequências de teste Ao escrever este artigo, foram utilizadas as cotações de EURRUR, EURUSD, USDJPY e XAUUSD para M1, M5, M30 e H1. Cada um dos arquivos salvos contém 1100 valores abertos. O valor mais antigo está localizado no início do arquivo e o mais recente no final. O último valor salvo no arquivo corresponde ao tempo que o arquivo foi criado. Os arquivos contendo seqüências de teste foram criados usando o script HistoryToCSV. mq5. Os arquivos de dados e o script usando o qual eles foram criados estão localizados no final do artigo no arquivo Files. zip. Como já mencionado, as cotações salvas são usadas neste artigo sem ser pré-processadas apesar dos problemas óbvios que eu gostaria de chamar sua atenção. Por exemplo, as cotações EURRURH1 durante o dia contêm de 12 a 13 bar, as citações XAUUSD às sextas contêm uma barra menor do que em outros dias. Esses exemplos demonstram que as citações são produzidas com intervalo de amostragem irregular, o que é totalmente inaceitável para algoritmos projetados para trabalhar com sequências de tempo corretas que sugerem ter um intervalo de quantificação uniforme. Mesmo que os valores das citações faltantes sejam reproduzidos usando extrapolação, a questão da falta de cotações nos fins de semana permanece aberta. Podemos supor que os eventos que ocorrem no mundo nos fins de semana têm o mesmo impacto na economia mundial que os eventos do dia da semana. Revoluções, atos da natureza, escândalos de alto perfil, mudanças governamentais e outros eventos mais ou menos grandes desse tipo podem ocorrer a qualquer momento. Se tal evento acontecesse no sábado, dificilmente teria uma menor influência nos mercados mundiais do que ocorreu no dia da semana. É talvez esses eventos que levam a lacunas em citações freqüentemente observadas ao final da semana de trabalho. Aparentemente, o mundo continua por suas próprias regras mesmo quando o FOREX não opera. Ainda não está claro se os valores nas citações correspondentes aos fins de semana que se destinam a uma análise técnica devem ser reproduzidos e o benefício que ele poderia dar. Obviamente, essas questões estão além do alcance deste artigo, mas, a primeira vista, uma seqüência sem lacunas parece ser mais apropriada para a análise, pelo menos em termos de detecção de componentes cíclicos (sazonais). A importância da preparação preliminar de dados para análise posterior dificilmente pode ser superestimada no nosso caso, é uma grande questão independente como citações, como elas aparecem no Terminal, geralmente não são realmente adequadas para uma análise técnica. Além dos problemas relacionados à lacuna acima, há muitos outros problemas. Ao formar as citações, por exemplo, um ponto de tempo fixo é atribuído a valores abertos e fechados que não pertencem a ele, esses valores correspondem ao tempo de formação de carrapatos em vez de um momento fixo de um quadro de quadro de tempo selecionado, ao passo que é vulgarmente conhecido que carrapatos São às vezes muito raros. Outro exemplo pode ser visto com total desrespeito ao teorema de amostragem, já que ninguém pode garantir que a taxa de amostragem, mesmo dentro de um intervalo de minutos, satisfaça o teorema acima (sem mencionar outros intervalos maiores). Além disso, deve-se ter em mente a presença de um spread variável que, em alguns casos, pode ser sobreposto em valores de cotação. Deixe-nos deixar essas questões fora do escopo deste artigo e voltar para o assunto principal. 3. Suavização exponencial Vamos primeiro dar uma olhada no modelo mais simples, processo X (t) (simulado) em estudo, nível de processo variável L (t), variável aleatória média r (t) zero. Como pode ser visto, este modelo compreende a soma de dois componentes que estamos particularmente interessados ​​no nível de processo L (t) e tentaremos separá-lo. É bem sabido que a média de uma sequência aleatória pode resultar em variância diminuída, isto é, uma faixa reduzida de seu desvio da média. Podemos, portanto, assumir que, se o processo descrito pelo nosso modelo simples for exposto à média (alisamento), talvez não possamos nos livrar de um componente aleatório r (t) completamente, mas podemos, pelo menos, enfraquecê-lo consideravelmente, destacando-se o Nível alvo L (t). Para este propósito, usaremos um simples alisamento exponencial (SES). Nesta fórmula bem conhecida, o grau de suavização é definido pelo coeficiente alfa que pode ser ajustado de 0 a 1. Se o alfa for ajustado para zero, os novos valores recebidos da sequência de entrada X não terão qualquer efeito no resultado de suavização. O resultado de suavização para qualquer ponto de tempo será um valor constante. Conseqüentemente, em casos extremos como este, o componente aleatório do incômodo será totalmente suprimido, mas o nível do processo em consideração será alisado para uma linha horizontal direta. Se o coeficiente alfa estiver definido para um, a seqüência de entrada não será afetada pelo alisamento. O nível em consideração L (t) não será distorcido neste caso e o componente aleatório também não será suprimido. É intuitivamente claro que ao selecionar o valor alfa, é necessário satisfazer simultaneamente os requisitos conflitantes. Por um lado, o valor alfa deve ser próximo de zero para efetivamente suprimir a componente aleatória r (t). Por outro lado, é aconselhável ajustar o valor alfa próximo da unidade para não distorcer o componente L (t) em que estamos tão interessados. Para obter o valor alfa ideal, precisamos identificar um critério segundo o qual esse valor Pode ser otimizado. Ao determinar esse critério, lembre-se de que este artigo trata da previsão e não apenas o alisamento de seqüências. Neste caso, no que diz respeito ao modelo de suavização exponencial simples, é costume considerar o valor obtido em um determinado momento como uma previsão para qualquer número de etapas adiante. Assim, a previsão do valor da seqüência no momento t será uma previsão de um passo em frente feita no passo anterior. Neste caso, pode-se usar um erro de previsão de um passo à frente como critério para a otimização do coeficiente alfa Valor Assim, ao minimizar a soma dos quadrados desses erros em toda a amostra, podemos determinar o valor ótimo do coeficiente alfa para uma determinada sequência. O melhor valor alfa será, naturalmente, aquele em que a soma dos quadrados dos erros seria mínima. A Figura 1 mostra um gráfico da soma de quadrados de erros de previsão de um passo à frente em relação ao valor do coeficiente alfa para um fragmento da seqüência de teste USDJPY M1. Figura 1. Suavização exponencial simples O mínimo no gráfico resultante é dificilmente discernível e está localizado próximo ao valor alfa de aproximadamente 0,8. Mas essa imagem nem sempre é o caso em relação ao alisamento exponencial simples. Ao tentar obter o valor alfa ideal para os fragmentos de seqüência de teste usados ​​no artigo, mais frequentemente não conseguiremos um gráfico continuamente caindo para a unidade. Tais valores elevados do coeficiente de suavização sugerem que este modelo simples não é bastante adequado para a descrição de nossas seqüências de teste (citações). É que o nível de processo L (t) muda muito rápido ou há uma tendência presente no processo. Vamos complicar um pouco o nosso modelo adicionando outro componente. Sabe-se que os coeficientes de regressão linear podem ser determinados pelo duplo alisamento de uma seqüência: Para os coeficientes a1 e a2 obtidos desta maneira, a previsão m-step-ahead no momento t Será igual a. Deve notar-se que o mesmo coeficiente alfa é usado nas fórmulas acima para o primeiro e repetido alisamento. Este modelo é chamado de modelo aditivo de um parâmetro de crescimento linear. Vamos demonstrar a diferença entre o modelo simples e o modelo de crescimento linear. Suponha que, por um longo tempo, o processo em estudo representasse um componente constante, isto é, apareceu no gráfico como uma linha horizontal direta, mas em algum momento uma tendência linear começou a emergir. Uma previsão para este processo feita usando os modelos acima mencionados é mostrada na Figura 2. Figura 2. Comparação do modelo Como pode ser visto, o modelo de suavização exponencial simples é sensivelmente por trás da seqüência de entrada linearmente variável e a previsão feita usando este modelo está se movendo ainda mais longe. Podemos ver um padrão muito diferente quando o modelo de crescimento linear é usado. Quando a tendência surge, este modelo é como se estivesse tentando chegar a uma seqüência que varia linearmente e sua previsão está mais próxima da direção dos valores de entrada variáveis. Se o coeficiente de suavização no exemplo dado fosse maior, o modelo de crescimento linear seria capaz de alcançar o sinal de entrada ao longo do tempo dado e sua previsão coincidirá quase com a seqüência de entrada. Apesar de o modelo de crescimento linear no estado estacionário dar bons resultados na presença de uma tendência linear, é fácil ver que é preciso um certo tempo para acompanhar a tendência. Portanto, sempre haverá uma lacuna entre o modelo ea seqüência de entrada se a direção de uma tendência mudar freqüentemente. Além disso, se a tendência cresce de forma não linear, mas, em vez disso, segue a lei quadrada, o modelo de crescimento linear não será capaz de alcançá-la. Mas, apesar dessas desvantagens, esse modelo é mais benéfico que o modelo de suavização exponencial simples na presença de uma tendência linear. Como já foi mencionado, utilizamos um modelo de crescimento linear de um parâmetro. Para encontrar o valor ideal do parâmetro alfa para um fragmento da seqüência de teste USDJPY M1, vamos construir um gráfico da soma de quadrados de erros de previsão de um passo a frente versus valor do coeficiente alfa. Este gráfico construído com base no mesmo fragmento de sequência que o da Figura 1, é exibido na Figura 3. Figura 3. Modelo de crescimento linear Em comparação com o resultado na Figura 1, o valor ótimo do coeficiente alfa tem neste caso Diminuiu para aproximadamente 0,4. O primeiro e o segundo alisamento têm os mesmos coeficientes neste modelo, embora teoricamente seus valores possam ser diferentes. O modelo de crescimento linear com dois coeficientes de suavização diferentes será revisado ainda mais. Ambos os modelos de suavização exponencial que consideramos têm seus análogos no MetaTrader 5 onde eles existem sob a forma de indicadores. Estes são conhecidos EMA e DEMA que não foram projetados para previsão, mas para alisar os valores de seqüência. Deve notar-se que, quando se usa o indicador DEMA, um valor correspondente ao coeficiente a1 é exibido em vez do valor de previsão de um passo. O coeficiente a2 (ver as fórmulas acima para o modelo de crescimento linear) não é, neste caso, calculado nem utilizado. Além disso, o coeficiente de suavização é calculado em termos do período equivalente n Por exemplo, o alfa igual a 0,8 corresponderá a n sendo aproximadamente igual a 2 e se o alfa for 0,4, n é igual a 4. 4. Valores iniciais Como já mencionado , Um valor de coeficiente de suavização deve, de uma forma ou de outra, ser obtido após a aplicação de suavização exponencial. Mas isso parece ser insuficiente. Como no suavização exponencial o valor atual é calculado com base no anterior, existe uma situação em que esse valor ainda não existe no tempo zero. Em outras palavras, o valor inicial de S ou S1 e S2 no modelo de crescimento linear deve, de alguma forma, ser calculado no tempo zero. O problema de obter valores iniciais nem sempre é fácil de resolver. Se (como no caso de usar aspas no MetaTrader 5), temos uma história muito longa disponível, a curva de suavização exponencial, terão os valores iniciais sido incorretamente determinados, terão tempo para estabilizar por um ponto atual, corrigindo nosso erro inicial. Isso exigirá cerca de 10 a 200 (e às vezes até mais) períodos dependendo do valor do coeficiente de suavização. Neste caso, seria suficiente estimar aproximadamente os valores iniciais e iniciar o processo de suavização exponencial 200-300 períodos antes do período de tempo de destino. Contudo, torna-se mais difícil, quando a amostra disponível contém apenas, e. 100 valores. Existem várias recomendações na literatura sobre a escolha dos valores iniciais. Por exemplo, o valor inicial no alisamento exponencial simples pode ser equiparado ao primeiro elemento em uma seqüência ou calculado como a média de três a quatro elementos iniciais em uma seqüência com uma visão de aleração de valores atípicos aleatórios. Os valores iniciais S1 e S2 no modelo de crescimento linear podem ser determinados com base no pressuposto de que o nível inicial da curva de previsão deve ser igual ao primeiro elemento em uma seqüência e a inclinação da tendência linear deve ser zero. Pode-se encontrar ainda mais recomendações em diferentes fontes sobre a escolha dos valores iniciais, mas nenhum deles pode garantir a ausência de erros visíveis nos estágios iniciais do algoritmo de suavização. É particularmente notável com o uso de coeficientes de suavização de baixo valor quando é necessário um grande número de períodos para atingir um estado estacionário. Portanto, para minimizar o impacto dos problemas associados à escolha de valores iniciais (especialmente para seqüências curtas), às vezes usamos um método que envolve a busca de valores que resultarão no erro mínimo de previsão. É uma questão de calcular um erro de previsão para os valores iniciais variando em pequenos incrementos ao longo de toda a seqüência. A variável mais apropriada pode ser selecionada após o cálculo do erro dentro do intervalo de todas as combinações possíveis de valores iniciais. Este método é, no entanto, muito laborioso, exigindo muitos cálculos e quase nunca é usado em sua forma direta. O problema descrito tem a ver com otimização ou busca um valor mínimo da função variável. Tais problemas podem ser resolvidos usando vários algoritmos desenvolvidos para reduzir consideravelmente o escopo dos cálculos necessários. Vamos voltar para os problemas de otimização de parâmetros de suavização e valores iniciais na previsão um pouco mais tarde. 5. Avaliação da precisão da previsão O procedimento de previsão e a seleção dos valores ou parâmetros iniciais do modelo originam o problema de estimar a precisão da previsão. A avaliação da precisão também é importante ao comparar dois modelos diferentes ou determinar a consistência da previsão obtida. Há uma grande quantidade de estimativas bem conhecidas para a avaliação da precisão da previsão, mas o cálculo de qualquer um deles requer o conhecimento do erro de previsão em cada etapa. Como já mencionado, um erro de previsão de um passo à frente no momento t é igual a Provavelmente, a estimativa de precisão de previsão mais comum é o erro quadrático médio (MSE): onde n é o número de elementos em uma seqüência. A sensibilidade extrema aos únicos erros únicos de grande valor às vezes é apontada como uma desvantagem da MSE. Isso deriva do fato de que o valor de erro ao calcular MSE é quadrado. Como alternativa, é aconselhável usar neste caso o erro absoluto médio (MAE). O erro quadrado aqui é substituído pelo valor absoluto do erro. Assume-se que as estimativas obtidas com MAE são mais estáveis. Ambas as estimativas são bastante apropriadas para e. Avaliação da precisão da previsão da mesma seqüência usando diferentes parâmetros do modelo ou modelos diferentes, mas eles parecem ser de pouca utilidade para comparação dos resultados de previsão recebidos em diferentes seqüências. Além disso, os valores dessas estimativas não sugerem expressamente a qualidade do resultado da previsão. Por exemplo, não podemos dizer se o MAE obtido de 0,03 ou qualquer outro valor é bom ou ruim. Para poder comparar a precisão da previsão de diferentes seqüências, podemos usar estimativas relativas RelMSE e RelMAE: as estimativas obtidas da precisão da previsão são divididas pelas respectivas estimativas obtidas usando o método de teste de previsão. Como método de teste, é adequado usar o chamado método ingênuo, sugerindo que o valor futuro do processo será igual ao valor atual. Se a média dos erros de previsão equivale ao valor dos erros obtidos usando o método ingênuo, o valor da estimativa relativa será igual a um. Se o valor da estimativa relativa for inferior a um, significa que, em média, o valor do erro de previsão é menor do que no método ingênuo. Em outras palavras, a precisão dos resultados da previsão classifica a precisão do método ingênuo. E vice-versa, se o valor da estimativa relativa for superior a um, a precisão dos resultados da previsão é, em média, mais pobre do que no método de previsão nativo. Essas estimativas também são adequadas para avaliar a precisão da previsão para dois ou mais passos à frente. Um erro de previsão de um passo nos cálculos só precisa ser substituído pelo valor dos erros de previsão para o número apropriado de etapas adiante. Como exemplo, a tabela abaixo contém erros de previsão de um passo antes estimados utilizando RelMAE no modelo de crescimento linear de um parâmetro. Os erros foram calculados usando os últimos 200 valores de cada seqüência de teste. Tabela 1. Os erros de previsão de um passo a frente estimados usando a estimativa RelMAE RelMAE permitem comparar a eficácia de um método selecionado ao prever seqüências diferentes. Como sugerem os resultados da Tabela 1, nossa previsão nunca foi mais precisa do que o método ingênuo - todos os valores RelMAE são mais de um. 6. Modelos de aditivos Havia um modelo mais cedo no artigo que incluía a soma do nível de processo, tendência linear e variável aleatória. Vamos expandir a lista dos modelos revisados ​​neste artigo, adicionando outro modelo que, além dos componentes acima, inclui um componente cíclico e sazonal. Modelos de suavização exponencial compreendendo todos os componentes como uma soma são chamados de modelos aditivos. Além desses modelos, existem modelos multiplicativos em que um, mais ou todos os componentes são compostos por um produto. Passemos a rever o grupo de modelos aditivos. O erro de previsão de um passo a frente repetidamente foi mencionado anteriormente no artigo. Este erro deve ser calculado em quase todos os aplicativos relacionados à previsão com base em suavização exponencial. Conhecendo o valor do erro de previsão, as fórmulas para os modelos de suavização exponencial apresentados acima podem ser apresentadas de forma um tanto diferente (formulário de correção de erros). A forma da representação do modelo que vamos usar no nosso caso contém um erro nas suas expressões que são parcialmente ou totalmente adicionadas aos valores obtidos anteriormente. Essa representação é chamada de modelo de erro aditivo. Modelos de suavização exponencial também podem ser expressos em um formulário de erro multiplicativo que, no entanto, não será usado neste artigo. Vamos dar uma olhada em modelos de suavização exponencial aditiva. Suavização exponencial simples: modelo de crescimento linear aditivo: em contraste com o modelo de crescimento linear de um parâmetro introduzido anteriormente, dois parâmetros de suavização diferentes são usados ​​aqui. Modelo de crescimento linear com amortecimento: o significado de tal amortecimento é que a inclinação da tendência irá diminuir em cada etapa de previsão subsequente dependendo do valor do coeficiente de amortecimento. Este efeito está demonstrado na Figura 4. Figura 4. Efeito do coeficiente de amortecimento Como pode ser visto na figura, ao fazer uma previsão, um valor decrescente do coeficiente de amortecimento fará com que a tendência seja a perda de sua força mais rápida, de modo que o crescimento linear Ficar cada vez mais amortecido. Ao adicionar um componente sazonal como uma soma para cada um desses três modelos, obteremos mais três modelos. Modelo simples com sazonalidade aditiva: modelo de crescimento linear com sazonalidade aditiva: modelo de crescimento linear com amortecimento e sazonalidade aditiva: também há modelos ARIMA equivalentes aos modelos com sazonalidade, mas serão deixados aqui fora, pois dificilmente terão qualquer importância prática. As notações usadas nas fórmulas fornecidas são as seguintes: é fácil ver que as fórmulas para o último modelo fornecido incluem as seis variantes consideradas. Se nas fórmulas para o modelo de crescimento linear com amortecimento e sazonalidade aditiva que tomamos, a sazonalidade será desconsiderada na previsão. Além disso, onde, um modelo de crescimento linear será produzido e onde, obteremos um modelo de crescimento linear com amortecimento. O modelo de suavização exponencial simples corresponderá. Ao empregar os modelos que envolvem sazonalidade, a presença de ciclicidade e período do ciclo deve primeiro ser determinada usando qualquer método disponível para continuar usando esses dados para a inicialização de valores de índices sazonais. Não conseguimos detectar uma ciclidade considerável e estável nos fragmentos das seqüências de teste usadas em nosso caso em que a previsão é feita em curtos intervalos de tempo. Portanto, neste artigo, não daremos exemplos relevantes e ampliaremos as características associadas à sazonalidade. Para determinar os intervalos de previsão de probabilidade em relação aos modelos em análise, usaremos derivações analíticas encontradas na literatura. 3. A média da soma de quadrados de erros de previsão de passo a passo calculados em toda a amostra de tamanho n Será usado como variância estimada de tais erros. Em seguida, a seguinte expressão será verdadeira para a determinação da variância estimada em uma previsão para 2 e mais etapas adiante para os modelos em consideração: Tendo calculado a variância estimada da previsão para cada etapa m, podemos encontrar os limites da predição 95 Intervalo: concordaremos em nomear esse intervalo de previsão o intervalo de confiança da previsão. Vamos implementar as expressões fornecidas para os modelos de suavização exponencial em uma classe escrita no MQL5. 7. Implementação da Classe AdditiveES A implementação da classe envolveu o uso das expressões para o modelo de crescimento linear com amortecimento e sazonalidade aditiva. Como mencionado anteriormente, outros modelos podem ser derivados dele por uma seleção apropriada de parâmetros. Deixe-nos revisar brevemente os métodos da classe AdditiveES. Duplo s - define o valor inicial do nível suavizado duplo t - ajusta o valor inicial da tendência alisada alfa duplo1 - define o parâmetro de suavização para o nível da seqüência dual gamma0 - define o parâmetro de suavização para a tendência duplo phi1 - define o valor de suavização Parâmetro de amortecimento duplo delta0 - define o parâmetro de suavização para índices sazonais int nses1 - define o número de períodos no ciclo sazonal. Ele retorna uma previsão de um passo em frente calculada com base nos valores iniciais definidos. O método Init deve ser chamado em primeiro lugar. Isso é necessário para configurar os parâmetros de suavização e os valores iniciais. Deve-se notar que o método Init não prevê a inicialização de índices sazonais em valores arbitrários ao chamar este método, os índices sazonais serão sempre definidos como zero. Int m - número de índice sazonal duplo é - define o valor do número de índice sazonal m. O método InIIs (.) É chamado quando os valores iniciais dos índices sazonais precisam ser diferentes de zero. Os índices sazonais devem ser inicializados logo após chamar o método Init (.). Duplo e novo valor da sequência de entrada Retorna uma previsão de um passo em frente calculada com base no novo valor da seqüência Este método foi projetado para calcular uma previsão de um passo a frente sempre que um novo valor da seqüência de entrada É inserido. Ele só deve ser chamado após a inicialização da classe pelos métodos Init e, quando necessário, InIIs. Horizonte de previsão de 1,2,3, período Retorna o valor de previsão m-step-ahead. Este método calcula apenas o valor da previsão sem afetar o estado do processo de suavização. Geralmente é chamado depois de chamar o método NewY. Int m horizonte de previsão de 1,2,3, período Retorna o valor do coeficiente para calcular a variância da previsão. This coefficient value shows the increase in the variance of a m-step-ahead forecast compared to the variance of the one-step-ahead forecast. GetS, GetT, GetF, GetIs methods These methods provide access to the protected variables of the class. GetS, GetT and GetF return values of the smoothed level, smoothed trend and a one-step-ahead forecast, respectively. GetIs method provides access to seasonal indices and requires the indication of the index number m as an input argument. The most complex model out of all we have reviewed is the linear growth model with damping and additive seasonality based on which the AdditiveES class is created. This brings up a very reasonable question - what would the remaining, simpler models be needed. Despite the fact, that more complex models should seemingly have a clear advantage over simpler ones, it is actually not always the case. Simpler models that have less parameters will in the vast majority of cases result in lesser variance of forecast errors, i. e. their operation will be more steady. This fact is employed in creating forecasting algorithms based on simultaneous parallel operation of all available models, from the simplest to the most complex ones. Once the sequence have been fully processed, a forecasting model that demonstrated the lowest error, given the number of its parameters (i. e. its complexity), is selected. There is a number of criteria developed for this purpose, e. g. Akaikes Information Criterion (AIC). It will result in selection of a model which is expected to produce the most stable forecast. To demonstrate the use of the AdditiveES class, a simple indicator was created all smoothing parameters of which are set manually. The source code of the indicator AdditiveESTest. mq5 is set forth below. A call or a repeated initialization of the indicator sets the exponential smoothing initial values There are no initial settings for seasonal indices in this indicator, their initial values are therefore always equal to zero. Upon such initialization, the influence of seasonality on the forecast result will gradually increase from zero to a certain steady value, with the introduction of new incoming values. The number of cycles required to reach a steady-state operating condition depends on the value of the smoothing coefficient for seasonal indices: the smaller the smoothing coefficient value, the more time it will require. The operation result of the AdditiveESTest. mq5 indicator with default settings is shown in Figure 5. Figure 5. The AdditiveESTest. mq5 indicator Apart from the forecast, the indicator displays an additional line corresponding to the one-step forecast for the past values of the sequence and limits of the 95 forecast confidence interval. The confidence interval is based on the estimated variance of the one-step-ahead error. To reduce the effect of inaccuracy of the selected initial values, the estimated variance is not calculated over the entire length nHist but only with regard to the last bars the number of which is specified in the input parameter nTest. Files. zip archive at the end of the article includes AdditiveES. mqh and AdditiveESTest. mq5 files. When compiling the indicator, it is necessary that the include AdditiveES. mqh file is located in the same directory as AdditiveESTest. mq5. While the problem of selecting the initial values was to some extent solved when creating the AdditiveESTest. mq5 indicator, the problem of selecting the optimal values of smoothing parameters has remained open. 8. Selection of the Optimal Parameter Values The simple exponential smoothing model has a single smoothing parameter and its optimal value can be found using the simple enumeration method. After calculating the forecast error values over the entire sequence, the parameter value is changed at a small increment and a full calculation is made again. This procedure is repeated until all possible parameter values have been enumerated. Now we only need to select the parameter value which resulted in the smallest error value. In order to find an optimal value of the smoothing coefficient in the range of 0.1 to 0.9 at 0.05 increments, the full calculation of the forecast error value will need to be made seventeen times. As can be seen, the number of calculations required is not so big. But the linear growth model with damping involves the optimization of three smoothing parameters and in this case it will take 4913 calculation runs in order to enumerate all their combinations in the same range at the same 0.05 increments. The number of full runs required for enumeration of all possible parameter values rapidly increases with the increase in the number of parameters, decrease in the increment and expansion of the enumeration range. Should it further be necessary to optimize the initial values of the models in addition to the smoothing parameters, it will be quite difficult to do using the simple enumeration method. Problems associated with finding the minimum of a function of several variables are well studied and there is quite a lot of algorithms of this kind. Description and comparison of various methods for finding the minimum of a function can be found in the literature 7. All these methods are primarily aimed at reducing the number of calls of the objective function, i. e. reducing the computational efforts in the process of finding the minimum. Different sources often contain a reference to the so-called quasi-Newton methods of optimization. Most likely this has to do with their high efficiency but the implementation of a simpler method should also be sufficient to demonstrate an approach to the optimization of forecasting. Let us opt for Powells method. Powells method does not require calculation of derivatives of the objective function and belongs to search methods. This method, like any other method, may be programmatically implemented in various ways. The search should be completed when a certain accuracy of the objective function value or the argument value is attained. Besides, a certain implementation may include the possibility of using limitations on the permissible range of function parameter changes. In our case, the algorithm for finding an unconstrained minimum using Powells method is implemented in PowellsMethod. class. The algorithm stops searching once a given accuracy of the objective function value is attained. In the implementation of this method, an algorithm found in the literature 8 was used as a prototype. Below is the source code of the PowellsMethod class. The Optimize method is the main method of the class. double ampp - array that at the input contains the initial values of parameters the optimal values of which shall be found the obtained optimal values of these parameters are at the output of the array. int n0 - number of arguments in array p. Where n0, the number of parameters is considered to be equal to the size of array p. It returns the number of iterations required for operation of the algorithm, or -1 if the maximum permissible number thereof has been reached . When searching for optimal parameter values, an iterative approximation to the minimum of the objective function occurs. The Optimize method returns the number of iterations required to reach the function minimum with a given accuracy. The objective function is called several times at every iteration, i. e. the number of calls of the objective function may be significantly (ten and even hundred times) bigger than the number of iterations returned by the Optimize method. Other methods of the class. Int n - maximum permissible number of iterations in Powells method. The default value is 200. It sets the maximum permissible number of iterations once this number is reached, the search will be over regardless of whether the minimum of the objective function with a given accuracy was found. And a relevant message will be added to the log. double er - accuracy. Should this value of deviation from the minimum value of the objective function be reached, Powells method stops searching. The default value is 1e-6. Int n - maximum permissible number of iterations for an auxiliary Brents method. The default value is 200. It sets the maximum permissible number of iterations. Once it is reached, the auxiliary Brents method will stop searching and a relevant message will be added to the log. double er accuracy. This value defines accuracy in the search of the minimum for the auxiliary Brents method. The default value is 1e-4. It returns the minimum value of the objective function obtained. It returns the number of iterations required for operation of the algorithm. Virtual function func(const double ampp) const double ampp address of the array containing the optimized parameters. The size of the array corresponds to the number of function parameters. It returns the function value corresponding to the parameters passed to it. The virtual function func() shall in every particular case be redefined in a class derived from the PowellsMethod class. The func() function is the objective function the arguments of which corresponding to the minimum value returned by the function will be found when applying the search algorithm. This implementation of Powells method employs Brents univariate parabolic interpolation method for determining the direction of search with regard to each parameter. The accuracy and maximum permissible number of iterations for these methods can be set separately by calling SetItMaxPowell, SetFtolPowell, SetItMaxBrent and SetFtolBrent. So the default characteristics of the algorithm can be changed in this manner. This may appear useful when the default accuracy set to a certain objective function turns out to be too high and the algorithm requires too many iterations in the search process. The change in the value of the required accuracy can optimize the search with regard to different categories of objective functions. Despite the seeming complexity of the algorithm that employs Powells method, it is quite simple in use. Let us review an example. Assume, we have a function and we need to find the values of parameters and at which the function will have the smallest value. Let us write a script demonstrating a solution to this problem. When writing this script, we first create the func() function as a member of the PMTest class which calculates the value of the given test function using the passed values of parameters p0 and p1. Then in the body of the OnStart() function, the initial values are assigned to the required parameters. The search will start from these values. Further, a copy of the PMTest class is created and the search for the required values of p0 and p1 starts by calling the Optimize method the methods of the parent PowellsMethod class will call the redefined func() function. Upon completion of the search, the number of iterations, function value at the minimum point and the obtained parameter values p00.5 and p16 will be added to the log. PowellsMethod. mqh and a test case PMTest. mq5 are located at the end of the article in Files. zip archive. In order to compile PMTest. mq5, it should be located in the same directory as PowellsMethod. mqh. 9. Optimization of the Model Parameter Values The previous section of the article dealt with implementation of the method for finding the function minimum and gave a simple example of its use. We will now proceed to the issues related to optimization of the exponential smoothing model parameters. For a start, let us simplify the earlier introduced AdditiveES class to the maximum by excluding from it all elements associated with the seasonal component, as the models that take into consideration seasonality are not going to be further considered in this article anyway. This will allow to make the source code of the class much easier to comprehend and reduce the number of calculations. In addition, we will also exclude all calculations related to forecasting and computations of the forecast confidence intervals for an easy demonstration of an approach to the optimization of parameters of the linear growth model with damping under consideration. The OptimizeES class derives from the PowellsMethod class and includes redefining of the virtual function func(). As mentioned earlier, the parameters whose calculated value will be minimized in the course of optimization shall be passed at the input of this function. In accordance with the maximum likelihood method, the func() function calculates the logarithm of the sum of squares of one-step-ahead forecast errors. The errors are calculated in a loop with regard to NCalc recent values of the sequence. To preserve the stability of the model, we should impose limitations on the range of changes in its parameters. This range for Alpha and Gamma parameters will be from 0.05 to 0.95, and for Phi parameter - from 0.05 to 1.0. But for optimization in our case, we use a method for finding an unconstrained minimum which does not imply the use of limitations on the arguments of the objective function. We will try to turn the problem of finding the minimum of the multi-variable function with limitations into a problem of finding an unconstrained minimum, to be able to take into consideration all limitations imposed on the parameters without changing the search algorithm. For this purpose, the so-called penalty function method will be used. This method can easily be demonstrated for a one-dimensional case. Suppose that we have a function of a single argument (whose domain is from 2.0 to 3.0) and an algorithm which in the search process can assign any values to this function parameter. In this case, we can do as follows: if the search algorithm has passed an argument which exceeds the maximum permissible value, e. g. 3.5, the function can be calculated for the argument equal to 3.0 and the obtained result is further multiplied by a coefficient proportional to the excess of the maximum value, for example k1(3.5-3)200. If similar operations are performed with regard to argument values that turned out to be below the minimum permissible value, the resulting objective function is guaranteed to increase outside the permissible range of changes in its argument. Such artificial increase in the resulting value of the objective function allows to keep the search algorithm unaware of the fact that the argument passed to the function was in any way limited and guarantee that the minimum of the resulting function will be within the set limits of the argument. Such approach is easily applied to a function of several variables. The main method of the OptimizeES class is the Calc method. A call of this method is responsible for reading data from a file, search for optimal parameter values of a model and estimation of the forecast accuracy using RelMAE for the obtained parameter values. The number of processed values of the sequence read from a file is in this case set in the variable NCalc. Below is the example of the OptimizationTest. mq5 script that uses the OptimizeES class. Following the execution of this script, the obtained result will be as shown below. Figure 6. OptimizationTest. mq5 script result Although we can now find optimal parameter values and initial values of the model, there is yet one parameter which cannot be optimized using simple tools - the number of sequence values used in optimization. In optimization with regard to a sequence of great length, we will obtain the optimal parameter values that, on the average, ensure a minimum error over the entire length of the sequence. However if the nature of the sequence varied within this interval, the obtained values for some of its fragments will no longer be optimal. On the other hand, if the sequence length is dramatically decreased, there is no guarantee that the optimal parameters obtained for such a short interval will be optimal over a longer time lag. OptimizeES. mqh and OptimizationTest. mq5 are located at the end of the article in Files. zip archive. When compiling, it is necessary that OptimizeES. mqh and PowellsMethod. mqh are located in the same directory as the compiled OptimizationTest. mq5. In the given example, USDJPYM11100.TXT file is used that contains the test sequence and that should be located in the directory MQL5FilesDataset. Table 2 shows the estimates of the forecast accuracy obtained using RelMAE by means of this script. Forecasting was done with regard to eight test sequences mentioned earlier in the article using the last 100, 200 and 400 values of each of these sequences. Table 2. Forecast errors estimated using RelMAE As can be seen, the forecast error estimates are close to unity but in the majority of cases the forecast for the given sequences in this model is more accurate than in the naive method. 10. The IndicatorES. mq5 Indicator The AdditiveESTest. mq5 indicator based on the AdditiveES. mqh class was mentioned earlier upon review of the class. All smoothing parameters in this indicator were set manually. Now after considering the method allowing to optimize the model parameters, we can create a similar indicator where the optimal parameter values and initial values will be determined automatically and only the processed sample length will need to be set manually. That said, we will exclude all calculations related to seasonality. The source code of the CIndiatorES class used in creating the indicator is set forth below. This class contains CalcPar and GetPar methods the first one is designed for calculation of the optimal parameter values of the model, the second one is intended for accessing those values. Besides, the CIndicatorES class comprises the redefining of the virtual function func(). The source code of the IndicatorES. mq5 indicator: With every new bar, the indicator finds the optimal values of the model parameters, makes calculations in the model for a given number of bars NHist, builds a forecast and defines the forecast confidence limits. The only parameter of the indicator is the length of the processed sequence the minimum value of which is limited to 24 bars. All calculations in the indicator are made on the basis of the open values. The forecasting horizon is 12 bars. The code of the IndicatorES. mq5 indicator and CIndicatorES. mqh file are located at the end of the article in Files. zip archive. Figure 7. Operation result of the IndicatorES. mq5 indicator An example of the operation result of the IndicatorES. mq5 indicator is shown in Figure 7. In the course of operation of the indicator, the 95 forecast confidence interval will take values corresponding to the obtained optimal parameter values of the model. The bigger the smoothing parameter values, the faster the increase in the confidence interval upon the increasing forecasting horizon. With a simple improvement, the IndicatorES. mq5 indicator can be used not only for forecasting currency quotes but also for forecasting values of various indicators or preprocessed data. Conclusion The main objective of the article was to familiarize the reader with additive exponential smoothing models used in forecasting. While demonstrating their practical use, some accompanying issues were also dealt with. However the materials provided in the article can be considered merely an introduction to the large range of problems and solutions associated with forecasting. I would like to draw your attention to the fact that the classes, functions, scripts and indicators provided were created in the process of writing the article and are primarily designed to serve as examples to the materials of the article. Therefore no serious testing for stability and errors was performed. Besides, the indicators set forth in the article should be considered to be only a demonstration of the implementation of the methods involved. The forecast accuracy of the IndicatorES. mq5 indicator introduced in the article can most likely be somewhat improved by using the modifications of the applied model which would be more adequate in terms of peculiarities of the quotes under consideration. The indicator can also be amplified by other models. But these issues fall beyond the scope of this article. In conclusion, it should be noted that exponential smoothing models can in certain cases produce forecasts of the same accuracy as the forecasts obtained by applying more complex models thus proving once again that even the most complex model is not always the best. Referências

Comments

Popular Posts