Tuesday 30 May 2017

Código C Média Ponderada Exponencialmente C


É possível implementar uma média móvel em C sem a necessidade de uma janela de amostras. Achei que posso otimizar um pouco, escolhendo um tamanho de janela que é um poder de dois para permitir a mudança de bits em vez de dividir, mas não precisar Um buffer seria bom. Existe uma maneira de expressar um novo resultado de média móvel apenas como função do resultado antigo e da nova amostra. Definir um exemplo de média móvel, em uma janela de 4 amostras para ser: Adicionar nova amostra e: Uma média móvel pode ser implementada de forma recursiva , Mas para uma computação exata da média móvel você deve lembrar a amostra de entrada mais antiga na soma (ou seja, a no seu exemplo). Para um comprimento N média móvel você calcula: onde yn é o sinal de saída e xn é o sinal de entrada. Eq. (1) pode ser escrito de forma recursiva, então você sempre precisa se lembrar da amostra xn-N para calcular (2). Conforme demonstrado por Conrad Turner, você pode usar uma janela exponencial (infinitamente longa) em vez disso, o que permite calcular a saída apenas da saída passada e da entrada atual: mas esta não é uma média móvel padrão (não ponderada), mas exponencialmente Média móvel ponderada, onde as amostras no passado obtêm um peso menor, mas (pelo menos em teoria) você nunca esquece nada (os pesos ficam cada vez menores e menores para amostras no passado). Eu implementei uma média móvel sem memória de item individual para um programa de rastreamento GPS que eu escrevi. Eu começo com 1 amostra e divide por 1 para obter o valor médio atual. Em seguida, adicione uma amostra e divida em 2 para a média atual. Isso continua até chegar ao comprimento da média. Cada vez, adiciono na nova amostra, obtenho a média e retire essa média do total. Eu não sou matemático, mas isso pareceu uma boa maneira de fazê-lo. Eu pensei que isso tornaria o estômago de um verdadeiro matemático, mas, parece que é uma das maneiras aceitas de fazê-lo. E funciona bem. Basta lembrar que, quanto mais alto for seu comprimento, mais lento seguirá o que você deseja seguir. Isso pode não importar a maior parte do tempo, mas ao seguir os satélites, se você estiver lento, a trilha pode estar longe da posição real e parecerá ruim. Você poderia ter uma lacuna entre o Sáb e os pontos de fuga. Eu escolhi um período de 15 atualizado 6 vezes por minuto para obter um alisamento adequado e não chegar muito longe da posição real de SAT com os pontos de trilhos alisados. Respondido 16 de novembro 16 às 23:03 inicializar total 0, count0 (cada vez que vê um novo valor Então uma entrada (scanf), uma adicionar totalnewValue, um incremento (contagem), uma média de divisão (total total) Esta seria uma média móvel em relação a Todas as entradas Para calcular a média sobre apenas as últimas 4 entradas, seria necessário 4 variáveis ​​de entrada, talvez copiando cada entrada para uma variável de entrada mais antiga, calculando a nova média móvel. Como soma das 4 variáveis ​​de entrada, divididas por 4 (o turno direito 2 seria Bom, se todas as entradas fossem positivas para que o cálculo médio fosse respondido 3 de fevereiro 15 às 4:06 Isso realmente calculará a média total e NÃO a média móvel. À medida que a contagem aumenta, o impacto de qualquer nova amostra de entrada se torna ndash extremamente lento Hilmar Feb 3 15 às 13:53 Sua resposta 2017 Stack Exchange, IncExploração A volatilidade média móvel ponderada exponencialmente é a medida de risco mais comum, mas vem em vários sabores. Em um artigo anterior, mostramos como calcular simples oi Volatilidade comercial. (Para ler este artigo, consulte Usando a volatilidade para avaliar o risco futuro.) Usamos os dados atuais do preço das ações da Googles para calcular a volatilidade diária com base em 30 dias de estoque de dados. Neste artigo, melhoraremos a volatilidade simples e discutiremos a média móvel ponderada exponencialmente (EWMA). Vs históricos. Volatilidade implícita Primeiro, colocamos essa métrica em um pouco de perspectiva. Existem duas abordagens amplas: volatilidade histórica e implícita (ou implícita). A abordagem histórica pressupõe que o passado é o prólogo que medimos a história na esperança de que seja preditivo. A volatilidade implícita, por outro lado, ignora o histórico que resolve para a volatilidade implícita nos preços de mercado. Espera que o mercado conheça melhor e que o preço de mercado contenha, mesmo que de forma implícita, uma estimativa consensual da volatilidade. (Para leitura relacionada, veja Os Usos e Limites da Volatilidade.) Se nos concentrarmos apenas nas três abordagens históricas (à esquerda acima), eles têm dois passos em comum: Calcule a série de retornos periódicos Aplicar um esquema de ponderação Primeiro, nós Calcule o retorno periódico. Isso geralmente é uma série de retornos diários, em que cada retorno é expresso em termos compostos continuamente. Para cada dia, tomamos o log natural da proporção dos preços das ações (ou seja, preço hoje dividido por preço ontem e assim por diante). Isso produz uma série de retornos diários, de u i to u i-m. Dependendo de quantos dias (m dias) estamos medindo. Isso nos leva ao segundo passo: é aqui que as três abordagens diferem. No artigo anterior (Usando o Volatility To Gauge Future Risk), mostramos que sob um par de simplificações aceitáveis, a variância simples é a média dos retornos quadrados: Observe que isso resume cada um dos retornos periódicos, então divide esse total pelo Número de dias ou observações (m). Então, é realmente apenas uma média dos retornos periódicos quadrados. Dito de outra forma, cada retorno quadrado recebe um peso igual. Então, se o alfa (a) é um fator de ponderação (especificamente, um 1m), então uma variância simples parece algo assim: O EWMA melhora a diferença simples. A fraqueza dessa abordagem é que todos os retornos ganham o mesmo peso. O retorno de Yesterdays (muito recente) não tem mais influência na variação do que o retorno dos últimos meses. Esse problema é corrigido usando a média móvel ponderada exponencialmente (EWMA), na qual os retornos mais recentes têm maior peso na variância. A média móvel ponderada exponencialmente (EWMA) apresenta lambda. Que é chamado de parâmetro de suavização. Lambda deve ser inferior a um. Sob essa condição, em vez de pesos iguais, cada retorno quadrado é ponderado por um multiplicador da seguinte forma: por exemplo, RiskMetrics TM, uma empresa de gerenciamento de risco financeiro, tende a usar uma lambda de 0,94 ou 94. Neste caso, o primeiro ( Mais recente) o retorno periódico ao quadrado é ponderado por (1-0,94) (94) 0 6. O próximo retorno ao quadrado é simplesmente um múltiplo lambda do peso anterior neste caso 6 multiplicado por 94 5,64. E o peso do terceiro dia anterior é igual (1-0,94) (0,94) 2 5,30. Esse é o significado de exponencial em EWMA: cada peso é um multiplicador constante (isto é, lambda, que deve ser inferior a um) do peso dos dias anteriores. Isso garante uma variação ponderada ou tendenciosa em relação a dados mais recentes. (Para saber mais, confira a Planilha do Excel para a Volatilidade dos Googles.) A diferença entre a simples volatilidade e o EWMA para o Google é mostrada abaixo. A volatilidade simples efetivamente pesa cada retorno periódico em 0.196 como mostrado na Coluna O (tivemos dois anos de dados diários sobre o preço das ações. Isso é 509 devoluções diárias e 1509 0.196). Mas observe que a coluna P atribui um peso de 6, então 5.64, depois 5.3 e assim por diante. Essa é a única diferença entre variância simples e EWMA. Lembre-se: depois de somar toda a série (na coluna Q), temos a variância, que é o quadrado do desvio padrão. Se queremos volatilidade, precisamos lembrar de tomar a raiz quadrada dessa variância. Qual é a diferença na volatilidade diária entre a variância e EWMA no caso do Googles. É significativo: a variância simples nos deu uma volatilidade diária de 2,4, mas a EWMA deu uma volatilidade diária de apenas 1,4 (veja a planilha para obter detalhes). Aparentemente, a volatilidade de Googles estabeleceu-se mais recentemente, portanto, uma variação simples pode ser artificialmente alta. A diferença de hoje é uma função da diferença de dias de Pior. Você notará que precisamos calcular uma série longa de pesos exponencialmente decrescentes. Nós não vamos fazer a matemática aqui, mas uma das melhores características do EWMA é que toda a série se reduz convenientemente a uma fórmula recursiva: Recursiva significa que as referências de variância de hoje (ou seja, são uma função da variância dos dias anteriores). Você também pode encontrar esta fórmula na planilha e produz exatamente o mesmo resultado que o cálculo de longo prazo. A variação de hoje (sob EWMA) é igual a variância de ontem (ponderada por lambda) mais retorno quadrado de ontem (pesado por menos a lambda). Observe como estamos apenas adicionando dois termos em conjunto: variância ponderada de ontem e atraso de ontem, retorno quadrado. Mesmo assim, lambda é o nosso parâmetro de suavização. Um lambda mais alto (por exemplo, como RiskMetrics 94) indica decadência mais lenta na série - em termos relativos, teremos mais pontos de dados na série e eles vão cair mais devagar. Por outro lado, se reduzirmos a lambda, indicamos maior deterioração: os pesos caem mais rapidamente e, como resultado direto da rápida deterioração, são usados ​​menos pontos de dados. (Na planilha, lambda é uma entrada, para que você possa experimentar sua sensibilidade). Resumo A volatilidade é o desvio padrão instantâneo de um estoque e a métrica de risco mais comum. É também a raiz quadrada da variância. Podemos medir a variação historicamente ou implicitamente (volatilidade implícita). Ao medir historicamente, o método mais fácil é a variância simples. Mas a fraqueza com variância simples é que todos os retornos recebem o mesmo peso. Então, enfrentamos um trade-off clássico: sempre queremos mais dados, mas quanto mais dados temos, mais nosso cálculo será diluído por dados distantes (menos relevantes). A média móvel ponderada exponencialmente (EWMA) melhora a variação simples ao atribuir pesos aos retornos periódicos. Ao fazer isso, podemos usar um grande tamanho de amostra, mas também dar maior peso aos retornos mais recentes. (Para ver um tutorial de filme sobre este tópico, visite a Tartaruga Bionica.) Este repo fornece algoritmos de média móvel móvel ponderada exponencial, ou EWMAs para breve, com base em nossa conversa de comportamento quantificador anormal. Média de Movimento Ponderada Exponencialmente Uma média móvel ponderada exponencialmente é uma maneira de calcular continuamente um tipo de média para uma série de números, à medida que os números chegam. Depois que um valor na série é adicionado à média, seu peso na média diminui exponencialmente ao longo do tempo. Isso prejudica a média em relação a dados mais recentes. Os EWMAs são úteis por várias razões, principalmente o custo computacional e de memória barato, bem como o fato de representarem a recente tendência central da série de valores. O algoritmo EWMA requer um fator de decaimento, alfa. Quanto maior o alfa, mais a média é tendenciosa em relação à história recente. O alfa deve estar entre 0 e 1, e geralmente é um número bastante pequeno, como 0,04. Vamos discutir a escolha do alfa mais tarde. O algoritmo funciona assim, em pseudocódigo: multiplique o próximo número da série por alfa. Multiplique o valor atual da média em 1 menos alfa. Adicione o resultado das etapas 1 e 2 e guarde-o como o novo valor atual da média. Repita para cada número da série. Existem comportamentos de casos especiais para como inicializar o valor atual, e estes variam entre as implementações. Uma abordagem é começar com o primeiro valor na série. Outro é a média dos 10 primeiros valores da série usando uma média aritmética e, em seguida, iniciar a atualização incremental da média. Cada método tem prós e contras. Pode ajudar a vê-lo de forma ilustrada. Suponha que a série tenha cinco números, e nós escolhemos alfa para ser 0.50 por simplicidade. Heres a série, com números no bairro de 300. Agora, vamos tomar a média móvel desses números. Primeiro, estabelecemos a média para o valor do primeiro número. Em seguida, multiplicamos o próximo número por alfa, multiplique o valor atual por 1-alfa e adicione-os para gerar um novo valor. Isso continua até terminar. Observe como cada um dos valores na série decai pela metade cada vez que um novo valor é adicionado e a parte superior das barras na parte inferior da imagem representa o tamanho da média móvel. É uma média suavizada, ou baixa passagem, da série original. Considere uma média móvel de janela de deslizamento de tamanho fixo (não uma média móvel ponderada exponencialmente) que mede em relação às amostras N anteriores. Qual é a idade média de cada amostra é N2. Agora suponha que você deseja construir um EWMA cujas amostras tenham a mesma idade média. A fórmula para calcular o alfa necessário para isso é: alpha 2 (N1). Prova está no livro Produção e Análise de Operações por Steven Nahmias. Então, por exemplo, se você tiver uma série de tempo com amostras uma vez por segundo, e você deseja obter a média móvel em relação ao minuto anterior, use um alfa de .032786885. Este, por sinal, é o alfa constante usado para este repositorys SimpleEWMA. Este repositório contém duas implementações do algoritmo EWMA, com diferentes propriedades. As implementações estão em conformidade com a interface MovingAverage e o construtor retorna esse tipo. As implementações atuais assumem um intervalo de tempo implícito de 1.0 entre cada amostra adicionada. Ou seja, a passagem do tempo é tratada como se fosse o mesmo que a chegada das amostras. Se você precisar de decadência com base no tempo quando as amostras não estão chegando precisamente em intervalos estabelecidos, esse pacote não suportará suas necessidades no momento. Um SimpleEWMA foi projetado para baixo consumo de CPU e memória. Ele terá um comportamento diferente do VariableEWMA por vários motivos. Não tem período de aquecimento e usa uma decomposição constante. Essas propriedades permitem usar menos memória. Ele também se comportará de forma diferente quando for igual a zero, o que é suposto significar não inicializado, então se um valor provavelmente se tornará zero ao longo do tempo, então qualquer valor não-zero causará um salto acentuado em vez de uma pequena mudança. Ao contrário de SimpleEWMA, isso suporta uma idade personalizada que deve ser armazenada e, portanto, usa mais memória. Ele também tem um tempo de aquecimento quando você começa a adicionar valores a ele. Ele reportará um valor de 0,0 até que você tenha adicionado o número de amostras necessárias. Ele usa alguma memória para armazenar o número de amostras adicionadas a ele. Como resultado, usa um pouco mais do dobro da memória do SimpleEWMA. Veja aqui a documentação gerada pelo GoDoc. Só aceitamos pedidos de puxão para pequenas correcções ou melhorias. Isso inclui: Pequenas correções de erros Typos Documentação ou comentários Abra itens para discutir novos recursos. Os pedidos de solicitação de novos recursos serão rejeitados, por isso recomendamos forjar o repositório e fazer alterações em seu garfo para o seu caso de uso. Este repositório é Copyright (c) 2013 VividCortex, Inc. Todos os direitos reservados. É licenciado sob a licença MIT. Consulte o arquivo LICENSE para obter os termos de licença aplicáveis.

No comments:

Post a Comment