Uniformly weighted moving average algorithm
Eu tenho uma série temporal de preços de ações e desejo calcular a média móvel em uma janela de dez minutos (veja o diagrama abaixo). Como os ticks de preço ocorrem esporadicamente (ou seja, não são periódicos), parece mais justo calcular uma média móvel ponderada pelo tempo. No diagrama, há quatro mudanças de preço: A, B, C e D, com as três últimas ocorrendo dentro da janela. Note que porque B só ocorre algum tempo na janela (digamos 3 minutos), o valor de A ainda contribui para o cálculo. De fato, até onde eu posso dizer, o cálculo deve ser baseado somente nos valores de A, B e C (não D) e as durações entre eles e o próximo ponto (ou no caso de A: a duração entre o início da janela de tempo e B). Inicialmente, D não terá nenhum efeito, pois sua ponderação de tempo será zero. Isso é correto? Assumindo que isso esteja correto, minha preocupação é que a média móvel se atrase mais do que o cálculo não ponderado (o que levaria em conta o valor de D imediatamente), no entanto, o cálculo não ponderado tem suas próprias desvantagens: tem tanto efeito sobre o resultado quanto os demais preços apesar de estar fora da janela de tempo. Uma enxurrada repentina de preços rápidos prejudicaria fortemente a média móvel (embora talvez isso seja desejável). Alguém pode oferecer algum conselho sobre qual abordagem parece ser a melhor, ou se há uma abordagem alternativa (ou híbrida) que vale a pena ser feita em 21 de abril: 35 Seu raciocínio está correto. O que você quer usar a média para embora? Sem saber que é difícil dar algum conselho. Talvez uma alternativa seria considerar sua média A em execução e, quando um novo valor V chegar, calcular a nova média A como (1-c) AcV, onde c está entre 0 e 1. Dessa forma, os ticks mais recentes uma influência mais forte, e o efeito de carrapatos antigos se dissipa com o tempo. Você poderia até ter c dependendo do tempo desde os ticks anteriores (c se tornando menor à medida que os ticks se aproximam). No primeiro modelo (ponderação), a média seria diferente a cada segundo (conforme as leituras antigas diminuem o peso e as novas leituras são mais altas), de modo que está sempre mudando, o que pode não ser desejável. Com a segunda abordagem, os preços saltam repentinamente à medida que novos preços são introduzidos e os antigos desaparecem da janela. Answer: 14 / Abr 12 at 21:50 As duas sugestões vêm do mundo discreto, mas você pode encontrar uma inspiração para o seu caso particular. Dê uma olhada na suavização exponencial. Nesta abordagem, você introduz o fator de suavização (01) que permite alterar a influência dos elementos recentes no valor da previsão (os elementos mais antigos recebem pesos exponencialmente decrescentes): Criei uma animação simples de como a suavização exponencial rastrearia o uma série temporal uniforme x1 1 1 1 3 3 2 2 2 1 com três diferentes: veja também algumas das técnicas de aprendizado por reforço (veja os diferentes métodos de desconto), por exemplo, aprendizado TD e Q-Learning. Sim, a média móvel irá, naturalmente, atrasar. Isso porque seu valor é informação histórica: resume amostras do preço nos últimos 10 minutos. Esse tipo de média é inerentemente lento. Ele foi construído em um offset de cinco minutos (porque uma média de caixa sem offset seria baseada em / - 5 minutos, centrada na amostra). Se o preço estiver em A por um longo tempo e depois mudar uma vez para B, levará 5 minutos para que a média atinja (AB) / 2. Se você quiser obter média / suavizar uma função sem qualquer mudança no domínio, o peso deve ser distribuído uniformemente ao redor do ponto da amostra. Mas isso é impossível para os preços que ocorrem em tempo real, já que os dados futuros não estão disponíveis. Se você quiser que uma alteração recente, como D, tenha um impacto maior, use uma média que dê um peso maior aos dados recentes, ou a um período de tempo mais curto, ou a ambos. Uma maneira de suavizar os dados é simplesmente usar um único acumulador (o estimador suavizado) E e obter amostras periódicas dos dados S. E é atualizado da seguinte forma: i. e. uma fração K (entre 0 e 1) da diferença entre a amostra de preço atual S e o estimador E é adicionada a E. Suponha que o preço tenha sido em A por um longo tempo, de modo que E esteja em A, e então mude repentinamente para B. O estimador começará a se mover em direção a B de maneira exponencial (como aquecimento / resfriamento, carregamento / descarregamento de um capacitor, etc). No começo, ele dará um grande salto e, em seguida, incrementos menores e menores. O quão rápido ele se move depende de K. Se K é 0, o estimador não se move, e se K é 1, ele se move instantaneamente. Com K você pode ajustar quanto peso você dá ao estimador em relação à nova amostra. Mais peso é dado a amostras mais recentes implicitamente, e a janela de amostra basicamente se estende ao infinito: E é baseado em cada amostra de valor que já ocorreu. Embora, é claro, os mais antigos não tenham quase nenhuma influência sobre o valor atual. Um método muito simples e bonito. respondeu 14 de abril de 12 às 21:50 Esta é a mesma que a resposta de Tom39s. Sua fórmula para o novo valor do estimador é (1 - K) E KS. que é algebricamente o mesmo que E K (S - E). é uma função de mistura linear entre o estimador de corrente E e a nova amostra S onde o valor de K 0, 1 controla a mistura. Escrevê-lo dessa maneira é bom e útil. Se K é 0.7, nós tomamos 70 de S, e 30 de E, que é o mesmo que adicionar 70 da diferença entre E e S de volta a E. ndash Kaz Abr 14 12 às 22:15 Na expansão de Toms responda, a fórmula por levar em consideração o espaçamento entre carrapatos pode ser formalizado (carrapatos fechados têm peso proporcionalmente menor): a (tn - t n-1) / T ou seja, a é uma razão de delta de tempo de chegada sobre intervalo de média v 1 ponto anterior), ou v (1 - u) / a (interpolação linear, ou vu (próximo ponto) Mais informações são encontradas na página 59 do livro Uma Introdução às Finanças de Alta Freqüência. Como outros já mencionaram, você deve considerar um IIR (resposta ao impulso infinito) filtro em vez do filtro FIR (resposta ao impulso finito) que você está usando agora Há mais, mas à primeira vista filtros FIR são implementados como convoluções explícitas e filtros IIR com equações. muito em microcontroladores é um filtro low pass de pólo único, que é o equivalente digital de um filtro analógico R-C simples. Para a maioria das aplicações, elas terão melhores características do que o filtro de caixa que você está usando. A maioria dos usos de um filtro de caixa que eu encontrei é resultado de alguém não prestar atenção na classe de processamento de sinal digital, não como resultado da necessidade de suas características particulares. Se você quer apenas atenuar altas frequências que você sabe que são ruído, um filtro passa-baixa de polo único é melhor. A melhor maneira de implementar um digitalmente em um microcontrolador é geralmente: FILT lt-- FILT FF (NOVO - FILT) FILT é uma parte do estado persistente. Essa é a única variável persistente que você precisa para calcular esse filtro. NEW é o novo valor que o filtro está sendo atualizado com essa iteração. FF é a fração do filtro. que ajusta o peso do filtro. Veja este algoritmo e veja que, para FF 0, o filtro é infinitamente pesado, pois a saída nunca muda. Para FF 1, realmente não há filtro, pois a saída apenas segue a entrada. Valores úteis estão entre. Em sistemas pequenos, você escolhe FF como 1/2N, de modo que a multiplicação por FF pode ser realizada como um desvio à direita por N bits. Por exemplo, FF pode ser 1/16 e multiplicar por FF, portanto, um deslocamento à direita de 4 bits. Caso contrário, este filtro precisa de apenas um subtrato e um acréscimo, embora os números geralmente precisem ser mais largos do que o valor de entrada (mais na precisão numérica em uma seção separada abaixo). Eu costumo tirar as leituras A / D significativamente mais rápido do que o necessário e aplicar dois desses filtros em cascata. Este é o equivalente digital de dois filtros R-C em série e atenua em 12 dB / oitava acima da frequência de rolloff. No entanto, para leituras A / D, é mais relevante observar o filtro no domínio do tempo, considerando sua resposta em etapas. Isso informa a rapidez com que o sistema verá uma alteração quando a coisa que você está medindo mudar. Para facilitar a criação desses filtros (o que significa apenas escolher o FF e decidir quantos deles serão em cascata), eu uso o meu programa FILTBITS. Você especifica o número de bits de deslocamento para cada FF na série de filtros em cascata e calcula a resposta da etapa e outros valores. Na verdade, eu geralmente executo isso através do meu script wrapper PLOTFILT. Isso executa FILTBITS, que cria um arquivo CSV e, em seguida, plota o arquivo CSV. Por exemplo, aqui está o resultado de PLOTFILT 4 4: Os dois parâmetros para PLOTFILT significam que haverá dois filtros em cascata do tipo descrito acima. Os valores de 4 indicam o número de bits de deslocamento para realizar a multiplicação por FF. Os dois valores de FF são, portanto, 1/16 neste caso. O traço vermelho é a resposta do degrau unitário e é a principal coisa a ser observada. Por exemplo, isso informa que, se a entrada for alterada instantaneamente, a saída do filtro combinado será estabelecida em 90 do novo valor em 60 iterações. Se você se preocupa com o tempo de estabilização de 95, então você tem que esperar cerca de 73 iterações e, para 50, apenas 26 iterações. O traço verde mostra a saída de um único pico de amplitude total. Isso dá uma ideia da supressão aleatória de ruído. Parece que nenhuma amostra única causará mais do que uma mudança de 2,5 na saída. O traço azul é para dar uma sensação subjetiva do que este filtro faz com o ruído branco. Este não é um teste rigoroso, uma vez que não há garantia de qual é exatamente o conteúdo dos números aleatórios escolhidos como a entrada de ruído branco para esta execução de PLOTFILT. É só para lhe dar uma sensação aproximada de quanto será esmagado e quão suave é. PLOTFILT, talvez FILTBITS, e muitas outras coisas úteis, especialmente para o desenvolvimento de firmware PIC, estão disponíveis na versão do software PIC Development Tools, na página de downloads do meu software. Adicionado sobre precisão numérica, vejo a partir dos comentários e agora uma nova resposta que há interesse em discutir o número de bits necessários para implementar este filtro. Observe que a multiplicação por FF criará novos bits do Log 2 (FF) abaixo do ponto binário. Em sistemas pequenos, o FF é geralmente escolhido para ser 1/2 N, de modo que essa multiplicação é realmente realizada por um deslocamento à direita de N bits. FILT é, portanto, geralmente um inteiro de ponto fixo. Note que isso não altera a matemática do ponto de vista dos processadores. Por exemplo, se você estiver filtrando leituras A / D de 10 bits e N 4 (FF 1/16), precisará de 4 bits de fração abaixo das leituras inteiras A / D de 10 bits. Um a maioria dos processadores, você estaria fazendo operações de 16 bits inteiros devido às leituras A / D de 10 bits. Neste caso, você ainda pode fazer exatamente as mesmas operações de inteiros de 16 bits, mas começar com as leituras A / D deixadas deslocadas por 4 bits. O processador não sabe a diferença e não precisa. Fazer as contas em inteiros inteiros de 16 bits funciona se você considerar que eles são 12.4 pontos fixos ou verdadeiros 16 bits inteiros (16.0 ponto fixo). Em geral, você precisa adicionar N bits a cada pólo de filtro se não quiser adicionar ruído devido à representação numérica. No exemplo acima, o segundo filtro de dois teria que ter 1044 18 bits para não perder informação. Na prática, em uma máquina de 8 bits, você usa valores de 24 bits. Tecnicamente, apenas o segundo polo de dois precisaria de um valor mais amplo, mas, para a simplicidade do firmware, geralmente uso a mesma representação e, portanto, o mesmo código, para todos os polos de um filtro. Geralmente eu escrevo uma sub-rotina ou macro para executar uma operação de pólo de filtro, depois aplico isso a cada pólo. Se uma sub-rotina ou macro depende se os ciclos ou memória de programa são mais importantes nesse projeto específico. De qualquer maneira, eu uso um pouco de scratch para passar NEW para a sub-rotina / macro, que atualiza FILT, mas também carrega isso no mesmo estado de scratch em que o NEW estava. Isso facilita a aplicação de múltiplos pólos, já que o FILT atualizado de um pólo é o NOVO do próximo. Quando uma sub-rotina, é útil ter um ponteiro apontando para FILT no caminho, que é atualizado para depois de FILT na saída. Dessa forma, a sub-rotina opera automaticamente em filtros consecutivos na memória, se chamada várias vezes. Com uma macro, você não precisa de um ponteiro, pois você passa no endereço para operar em cada iteração. Exemplos de código Aqui está um exemplo de uma macro como descrito acima para um PIC 18: E aqui está uma macro semelhante para um PIC 24 ou dsPIC 30 ou 33: Ambos os exemplos são implementados como macros usando meu pré-processador montador PIC. que é mais capaz do que qualquer uma das instalações macro integradas. clabacchio: Outro problema que eu deveria ter mencionado é a implementação de firmware. Você pode escrever uma sub-rotina de filtro low-pass de pólo único uma vez e depois aplicá-la várias vezes. Na verdade, eu geralmente escrevo essa sub-rotina para levar um ponteiro na memória para o estado do filtro, então ele avança o ponteiro para que ele possa ser chamado em sucessão facilmente para realizar filtros multipolares. ndash Olin Lathrop Apr 20 12 at 15:03 1. muito obrigado pelas suas respostas - todas elas. Eu decidi usar este Filtro IIR, mas este Filtro não é usado como um Filtro Standard LowPass, uma vez que eu preciso mediar os Valores dos Contadores e compará-los para detectar Mudanças em um determinado Range. Uma vez que esses valores têm dimensões muito diferentes, dependendo do hardware, eu queria ter uma média para poder reagir a essas mudanças específicas de hardware automaticamente. ndash sensslen May 21 12 at 12:06 Se você pode viver com a restrição de uma potência de dois números de itens para média (ou seja, 2,4,8,16,32 etc), em seguida, a divisão pode ser feita de forma fácil e eficiente em um micro de baixo desempenho sem divisão dedicada, porque pode ser feito como uma mudança de bit. Cada turno à direita é uma potência de dois, por exemplo: O OP pensou que ele tinha dois problemas, dividindo-se em um PIC16 e memória para seu buffer de anel. Esta resposta mostra que a divisão não é difícil. É certo que não resolve o problema de memória, mas o sistema SE permite respostas parciais, e os usuários podem pegar algo de cada resposta por si mesmos, ou até mesmo editar e combinar as respostas do outro. Uma vez que algumas das outras respostas exigem uma operação de divisão, elas são igualmente incompletas, pois não mostram como alcançar isso com eficiência em um PIC16. ndash Martin Apr 20 12 at 13:01 Há uma resposta para um verdadeiro filtro de média móvel (também conhecido como filtro de vagão) com menos requisitos de memória, se você não se importar com a redução da resolução. É chamado de filtro integrador-comb em cascata (CIC). A ideia é que você tenha um integrador no qual você tira as diferenças ao longo de um período de tempo, e o dispositivo de economia de memória chave é que, ao reduzir a resolução, você não precisa armazenar todos os valores do integrador. Ele pode ser implementado usando o seguinte pseudocódigo: Seu comprimento médio efetivo é decimationFactorstatesize, mas você só precisa manter as amostras de stateize. Obviamente, você pode obter um desempenho melhor se seu Fator de estado e decimação for potências de 2, de forma que os operadores de divisão e remanescentes sejam substituídos por turnos e máscaras. Postscript: Eu concordo com Olin que você deve sempre considerar filtros IIR simples antes de um filtro de média móvel. Se você não precisar dos nulos de frequência de um filtro de vagão, um filtro passa-baixa de 1 ou 2 polos provavelmente funcionará bem. Por outro lado, se você estiver filtrando para fins de dizimação (tomando uma entrada de alta taxa de amostragem e calculando a média para uso por um processo de baixa taxa), então um filtro CIC pode ser exatamente o que você está procurando. (especialmente se você puder usar o statesize1 e evitar o ringbuffer completamente com apenas um único valor do integrador anterior) Há uma análise profunda da matemática por trás do filtro IIR de primeira ordem que Olin Lathrop já descreveu na troca de pilha do Digital Signal Processing (Inclui muitas fotos bonitas.) A equação para este filtro IIR é: Isso pode ser implementado usando apenas inteiros e sem divisão usando o seguinte código (pode precisar de alguma depuração enquanto eu estava digitando da memória.) Esse filtro se aproxima de uma média móvel de as últimas K amostras, definindo o valor de alfa para 1 / K. Faça isso no código anterior, definindo BITS para LOG2 (K), ou seja, para K 16, defina BITS como 4, K 4 defina BITS como 2, etc. (Eu verificarei o código listado aqui assim que obtiver uma alteração e edite esta resposta se necessário.) Respondeu o 23 de junho 12 no 4:04 Heres um filtro low-pass unipolar (média movente, com freqüência de corte CutoffFrequency). Muito simples, muito rápido, funciona muito bem e quase sem sobrecarga de memória. Nota: Todas as variáveis têm escopo além da função de filtro, exceto o passado em newInput Nota: Este é um filtro de um único estágio. Vários estágios podem ser colocados em cascata para aumentar a nitidez do filtro. Se você usar mais de um estágio, você terá que ajustar o DecayFactor (como relacionado à frequência de corte) para compensar. E obviamente tudo que você precisa é dessas duas linhas colocadas em qualquer lugar, elas não precisam de sua própria função. Este filtro tem um tempo de aceleração antes que a média móvel represente aquela do sinal de entrada. Se você precisar ignorar esse tempo de aceleração, basta inicializar o MovingAverage para o primeiro valor de newInput em vez de 0 e esperar que a primeira nova entrada não seja um valor atípico. (CutoffFrequency / SampleRate) tem um intervalo entre 0 e 0,5. DecayFactor é um valor entre 0 e 1, geralmente próximo de 1. Flutuadores de precisão simples são bons o suficiente para a maioria das coisas, eu prefiro o dobro. Se você precisa ficar com números inteiros, você pode converter DecayFactor e Amplitude Factor em inteiros fracionários, nos quais o numerador é armazenado como o inteiro, e o denominador é uma potência inteira de 2 (assim você pode mudar de bit para a direita como o denominador em vez de ter que dividir durante o loop de filtro). Por exemplo, se DecayFactor 0.99, e você quiser usar números inteiros, você pode definir DecayFactor 0,99 65536 64881. E, a qualquer momento, multiplicar por DecayFactor em seu loop de filtro, basta deslocar o resultado 16. Para obter mais informações sobre isso, um excelente livro online, capítulo 19 em filtros recursivos: dspguide / ch19.htm PS Para o paradigma Moving Average, uma abordagem diferente para definir DecayFactor e AmplitudeFactor que pode ser mais relevante para as suas necessidades, digamos que você queira a média anterior, cerca de 6 itens juntos, fazendo discretamente, adicionar 6 itens e dividir por 6, você pode definir o AmplitudeFactor para 1/6 e DecayFactor para (1.0 - AmplitudeFactor). Todas as outras pessoas comentaram completamente sobre a utilidade do IIR vs. FIR, e na divisão de potência de dois. Id apenas gostaria de dar alguns detalhes de implementação. O abaixo funciona bem em pequenos microcontroladores sem FPU. Não há multiplicação, e se você mantiver N uma potência de dois, toda a divisão será em um único ciclo. Buffer de anel FIR básico: mantenha um buffer de execução dos últimos N valores e uma soma de todos os valores no buffer. Cada vez que uma nova amostra entra, subtraia o valor mais antigo no buffer de SUM, substitua-o pela nova amostra, inclua a nova amostra em SUM e a saída SUM / N. Buffer de anel IIR modificado: mantenha uma soma em execução dos últimos N valores. Cada vez que uma nova amostra chega, SUM - SUM / N, adiciona a nova amostra e produz o SUM / N. Se você está lendo bem, você está descrevendo um filtro IIR de primeira ordem, o valor que você está subtraindo não é o valor mais antigo que está caindo, mas sim a média dos valores anteriores. Filtros IIR de primeira ordem certamente podem ser úteis, mas não tenho certeza do que você quer dizer quando sugere que a saída é a mesma para todos os sinais periódicos. A uma taxa de amostragem de 10KHz, alimentar uma onda quadrada de 100Hz em um filtro de caixa de 20 estágios produzirá um sinal que aumenta uniformemente para 20 amostras, fica alto por 30, cai uniformemente para 20 amostras e fica baixo para 30. Uma primeira ordem Filtro IIR. ndash supercat Ago 28 13 às 15:31 produzirá uma onda que começa a subir acentuadamente e gradualmente se estabiliza próximo (mas não a) da entrada máxima, então começa a cair acentuadamente e gradualmente se estabiliza próximo (mas não a) do mínimo de entrada. Comportamento muito diferente. ndash supercat Ago 28 13 at 15:32 Uma questão é que uma simples média móvel pode ou não ser útil. Com um filtro IIR, você pode obter um bom filtro com relativamente poucos cálculos. O FIR que você descreve só pode lhe dar um retângulo no tempo - um sinc em freq - e você não pode gerenciar os lóbulos laterais. Pode valer a pena lançar algumas multiplicações de números inteiros para torná-lo um FIR sintonizável agradável simétrico se você puder poupar os pulsos de clock. ScottSeidman: Não há necessidade de multiplicidade se simplesmente houver cada estágio do FIR, ou a saída da média da entrada para aquele estágio e seu valor armazenado anterior, e então armazenar a entrada (se houver o intervalo numérico, pode-se usar a soma em vez da média). Se isso é melhor do que um filtro de caixa depende do aplicativo (a resposta de etapa de um filtro de caixa com um atraso total de 1 ms, por exemplo, terá um pico d2 / dt desagradável quando a entrada for alterada e novamente 1 ms depois, mas terá o mínimo possível d / dt para um filtro com um atraso total de 1ms). Como disse o mikeselectricstuff, se você realmente precisa reduzir suas necessidades de memória, e você não se importa com a sua resposta de impulso sendo um pulso exponencial (em vez de um pulso retangular), eu iria para um filtro médio móvel exponencial . Eu os uso extensivamente. Com esse tipo de filtro, você não precisa de nenhum buffer. Você não precisa armazenar N amostras anteriores. Apenas um. Portanto, seus requisitos de memória são reduzidos por um fator N. Além disso, você não precisa de nenhuma divisão para isso. Apenas multiplicações. Se você tiver acesso à aritmética de ponto flutuante, use multiplicações de ponto flutuante. Caso contrário, faça multiplicações inteiras e mude para a direita. No entanto, estamos em 2012, e eu recomendo que você use compiladores (e MCUs) que permitem trabalhar com números de ponto flutuante. Além de ser mais eficiente na memória e mais rápida (você não precisa atualizar itens em qualquer buffer circular), eu diria que também é mais natural. porque uma resposta de impulso exponencial corresponde melhor à maneira como a natureza se comporta, na maioria dos casos. Um problema com o filtro IIR quase tocado por olin e supercat mas aparentemente desconsiderado por outros é que o arredondamento para baixo introduz alguma imprecisão (e potencialmente bias / truncamento). assumindo que N é uma potência de dois, e apenas a aritmética inteira é usada, o desvio à direita elimina sistematicamente os LSBs da nova amostra. Isso significa que quanto tempo a série poderia ser, a média nunca levará isso em conta. Por exemplo, suponha uma série lentamente decrescente (8,8,8,8,7,7,7,7,6,6) e assuma que a média é de fato 8 no começo. A primeira amostra 7 levará a média a 7, independentemente da força do filtro. Apenas por uma amostra. Mesma história para 6, etc. Agora pense no oposto. a serie sobe. A média permanecerá em 7 para sempre, até que a amostra seja grande o suficiente para mudar. Claro, você pode corrigir o viés adicionando 1 / 2N / 2, mas isso não vai realmente resolver o problema de precisão. nesse caso, a série decrescente permanecerá para sempre em 8 até a amostra ser 8-1 / 2 (N / 2). Para N4, por exemplo, qualquer amostra acima de zero manterá a média inalterada. Acredito que uma solução para isso implicaria manter um acumulador dos LSBs perdidos. Mas eu não fiz isso o suficiente para ter código pronto, e eu não tenho certeza se isso não prejudicaria o poder IIR em alguns outros casos de séries (por exemplo, se 7,9,7,9 seria em média 8 então). Olin, sua cascata de dois estágios também precisaria de alguma explicação. Você quer dizer manter dois valores médios com o resultado do primeiro alimentado no segundo em cada iteração. Qual é o benefício desta saída da Documentação tsmovavg (tsobj, s, lag) retorna a média móvel simples para o objeto da série temporal financeira, tsobj. lag indica o número de pontos de dados anteriores usados com o ponto de dados atual ao calcular a média móvel. saída tsmovavg (vetor, s, lag, dim) retorna a média móvel simples para um vetor. lag indica o número de pontos de dados anteriores usados com o ponto de dados atual ao calcular a média móvel. saída tsmovavg (tsobj, e, timeperiod) retorna a média móvel ponderada exponencial para o objeto da série temporal financeira, tsobj. A média móvel exponencial é uma média móvel ponderada, em que período de tempo especifica o período de tempo. As médias móveis exponenciais reduzem o atraso aplicando mais peso aos preços recentes. Por exemplo, uma média móvel exponencial de 10 períodos pondera o preço mais recente em 18,18. Porcentagem exponencial 2 / (TIMEPER 1) ou 2 / (WINDOWSIZE 1). saída tsmovavg (vetor, e, timeperiod, dim) retorna a média móvel ponderada exponencial para um vetor. A média móvel exponencial é uma média móvel ponderada, em que período de tempo especifica o período de tempo. As médias móveis exponenciais reduzem o atraso aplicando mais peso aos preços recentes. Por exemplo, uma média móvel exponencial de 10 períodos pondera o preço mais recente em 18,18. (2 / (período de tempo 1)). saída tsmovavg (tsobj, t, numperiod) retorna a média móvel triangular para o objeto da série temporal financeira, tsobj. A média móvel triangular duplica suavemente os dados. O tsmovavg calcula a primeira média móvel simples com a largura da janela do ceil (numperiod 1) / 2. Em seguida, calcula uma segunda média móvel simples na primeira média móvel com o mesmo tamanho de janela. saída tsmovavg (vetor, t, numperiod, dim) retorna a média móvel triangular para um vetor. A média móvel triangular duplica suavemente os dados. O tsmovavg calcula a primeira média móvel simples com a largura da janela do ceil (numperiod 1) / 2. Em seguida, calcula uma segunda média móvel simples na primeira média móvel com o mesmo tamanho de janela. saída tsmovavg (tsobj, w, weights) retorna a média móvel ponderada para o objeto da série temporal financeira, tsobj. fornecendo pesos para cada elemento na janela móvel. O comprimento do vetor de peso determina o tamanho da janela. Se fatores de peso maiores forem usados para preços mais recentes e fatores menores para preços anteriores, a tendência é mais responsiva às mudanças recentes. saída tsmovavg (vetor, w, pesos, dim) retorna a média móvel ponderada para o vetor fornecendo pesos para cada elemento na janela móvel. O comprimento do vetor de peso determina o tamanho da janela. Se fatores de peso maiores forem usados para preços mais recentes e fatores menores para preços anteriores, a tendência é mais responsiva às mudanças recentes. saída tsmovavg (tsobj, m, numperiod) retorna a média móvel modificada para o objeto da série temporal financeira, tsobj. A média móvel modificada é semelhante à média móvel simples. Considere o argumento numperiod para ser o atraso da média móvel simples. A primeira média móvel modificada é calculada como uma média móvel simples. Os valores subseqüentes são calculados adicionando o novo preço e subtraindo a última média da soma resultante. saída tsmovavg (vetor, m, numperiod, dim) retorna a média móvel modificada para o vetor. A média móvel modificada é semelhante à média móvel simples. Considere o argumento numperiod para ser o atraso da média móvel simples. A primeira média móvel modificada é calculada como uma média móvel simples. Os valores subseqüentes são calculados adicionando o novo preço e subtraindo a última média da soma resultante. dim dimensão 8212 para operar ao longo de inteiro positivo com valor 1 ou 2 Dimensão para operar junto, especificado como um número inteiro positivo com um valor de 1 ou 2. dim é um argumento de entrada opcional e, se não for incluído como entrada, o padrão o valor 2 é assumido. O padrão dim 2 indica uma matriz orientada a linhas, onde cada linha é uma variável e cada coluna é uma observação. Se dim 1. a entrada é assumida como um vetor de coluna ou matriz orientada por colunas, onde cada coluna é uma variável e cada linha uma observação. e 8212 Indicador para o vetor de caractere médio móvel exponencial A média móvel exponencial é uma média móvel ponderada, em que período de tempo é o período de tempo da média móvel exponencial. As médias móveis exponenciais reduzem o atraso aplicando mais peso aos preços recentes. Por exemplo, uma média móvel exponencial de 10 períodos avalia o preço mais recente em 18,18. Porcentagem exponencial 2 / (TIMEPER 1) ou 2 / (WINDOWSIZE 1), período de tempo 8212 Período de tempo inteiro não-negativo Selecione seu país
Comments
Post a Comment