Tuesday 4 February 2020

Algoritmo de média móvel ponderada


Este repo fornece Exponentially Weighted Moving Average algoritmos, ou EWMAs para breve, com base no nosso comportamento quantificar comportamentos anormais. Média móvel exponencialmente ponderada Uma média móvel exponencialmente ponderada é uma forma 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 distorce a média em relação aos dados mais recentes. EWMAs são úteis por várias razões, principalmente os custos computacionais e de memória baratos, bem como o fato de que eles representam 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 para a história recente. O alfa deve estar entre 0 e 1, e é tipicamente 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 por 1 menos alfa. Adicione o resultado das etapas 1 e 2 e armazene-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 implementações. Uma abordagem é começar com o primeiro valor na série outro é a média dos primeiros 10 ou mais valores na série usando uma média aritmética, e então começar a atualização incremental da média. Cada método tem prós e contras. Pode ajudar a olhar para ele pictorially. Suponha que a série tem cinco números, e nós escolhemos alpha para ser 0.50 por simplicidade. Heres a série, com números na vizinhança de 300. Agora vamos pegar a média móvel desses números. Primeiro, definimos a média para o valor do primeiro número. Em seguida, multiplicamos o próximo número por alfa, multiplicamos o valor atual por 1-alfa e os adicionamos para gerar um novo valor. Isso continua até que tenhamos terminado. Observe como cada um dos valores da série decai pela metade cada vez que um novo valor é adicionado, ea parte superior das barras na parte inferior da imagem representa o tamanho da média móvel. É uma média suavizada, ou low-pass, da série original. Considere uma média móvel da janela deslizante de tamanho fixo (não uma média móvel ponderada exponencialmente) que médias sobre as N amostras anteriores. Qual é a idade média de cada amostra É N2. Agora, suponha que você deseja construir um EWMA cujas amostras têm a mesma idade média. A fórmula para calcular o alfa requerido para isso é: alfa 2 (N1). Prova está no livro Produção e Análise de Operações de Steven Nahmias. Assim, por exemplo, se você tiver uma série de tempo com amostras uma vez por segundo e quiser obter a média móvel no minuto anterior, use um alfa de .032786885. Isto, aliás, é o alfa constante usado para este repositorios SimpleEWMA. Este repositório contém duas implementações do algoritmo EWMA, com diferentes propriedades. Todas as implementações estão de acordo com a interface MovingAverage eo 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 a mesma que a chegada de amostras. Se você precisar de decadência baseada no tempo quando as amostras não estão chegando precisamente em intervalos definidos, então este pacote não vai apoiar as suas necessidades no momento. Um SimpleEWMA foi projetado para baixo consumo de CPU e memória. Ele terá comportamento diferente do que o VariableEWMA por várias razões. Não tem período de aquecimento e usa uma decaimento constante. Essas propriedades permitem usar menos memória. Ele também se comportará de forma diferente quando for igual a zero, o que é assumido como não inicializado, portanto, se um valor é provável que realmente se torne zero ao longo do tempo, então qualquer valor diferente de zero causará um salto brusco em vez de uma pequena alteração. Ao contrário do 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 relatará um valor de 0,0 até que você tenha adicionado o número necessário de amostras para ele. Ele usa alguma memória para armazenar o número de amostras adicionadas a ele. Como resultado, ele usa um pouco mais do que o dobro da memória do SimpleEWMA. Veja aqui a documentação gerada pelo GoDoc. Só aceitamos solicitações de pull para correções menores ou melhorias. Isso inclui: Pequenas correções de erros Typos Documentação ou comentários Abra problemas para discutir novos recursos. Os pedidos de extração de novos recursos serão rejeitados, por isso recomendamos que o repositório seja bifurcado e faça alterações no seu fork para seu caso de uso. Este repositório é Copyright (c) 2017 VividCortex, Inc. Todos os direitos reservados. É licenciado sob a licença do MIT. Consulte o arquivo LICENSE para termos de licença aplicáveis. Tenho uma série 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 carrapatos de preços ocorrem esporadicamente (isto é, eles não são periódicos), parece mais justo calcular uma média móvel ponderada no tempo. No diagrama há quatro mudanças de preços: A, B, C e D, com os últimos três ocorrendo dentro da janela. Observe que porque B só ocorre algum tempo na janela (digamos 3 minutos), o valor de A ainda contribui para a computação. Na verdade, tanto quanto posso dizer, o cálculo deve basear-se unicamente nos valores de A, B e C (não D) e as durações entre eles eo 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á qualquer efeito, pois sua ponderação de tempo será zero. Isto é correto Assumindo que isto está correto, minha preocupação é que a média móvel seja mais atrasada do que o cálculo não ponderado (o que representaria o valor de D imediatamente). No entanto, o cálculo não ponderado tem suas próprias desvantagens: Têm tanto efeito sobre o resultado quanto os outros preços, apesar de estarem fora da janela de tempo. Uma onda repentina de carrapatos de preço rápido seria fortemente tendenciosa a média móvel (embora talvez isso seja desejável) Alguém pode oferecer qualquer conselho sobre qual abordagem parece melhor, ou se há uma abordagem alternativa (ou híbrido) vale a pena considerar pediu Apr 14 12 às 21: 35 Seu raciocínio está correto. O que você quer usar a média para embora Sem saber que é difícil dar qualquer conselho. Talvez uma alternativa seria considerar sua média corrente A, e quando um novo valor V entrar, calcule a nova média A para ser (1-c) AcV, onde c está entre 0 e 1. Desta forma, os carrapatos mais recentes têm Uma influência mais forte, eo efeito de carrapatos velhos dissipa ao longo do tempo. Você poderia até mesmo ter c depender do tempo desde os carrapatos anteriores (c tornando-se menor como os carrapatos se aproximar). No primeiro modelo (ponderação) a média seria diferente cada segundo (como as leituras velhas começam o peso mais baixo e as leituras novas mais altamente) assim que seu sempre mudar que não pode ser desejável. Com a segunda abordagem, os preços fazem saltos súbitos à medida que novos preços são introduzidos e os antigos desaparecem da janela. As duas sugestões vêm do mundo discreto, mas você pode encontrar uma inspiração para o seu caso particular. Dê uma olhada no 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 são atribuídos ponderes exponencialmente decrescentes): Eu criei uma animação simples de como a suavização exponencial acompanharia o Uma série de tempo uniforme x1 1 1 1 3 3 2 2 2 1 com três diferentes: Tenha também um olhar para algumas das técnicas de aprendizagem de reforço (olhar para os diferentes métodos de desconto), por exemplo TD-aprendizagem e Q-Learning. Sim, a média móvel será, naturalmente, lag. Isto é porque seu valor é informação histórica: ele resume amostras do preço nos últimos 10 minutos. Esse tipo de média é inerentemente laggy. Tem um construído em deslocamento de cinco minutos (porque uma média da caixa sem deslocamento seria baseada em - 5 minutos, centrada na amostra). Se o preço estiver em A por um longo tempo e depois muda uma vez para B, leva 5 minutos para que a média atinja (AB) 2. Se você quer a média de uma função lisa sem qualquer mudança no domínio, o peso tem Para ser distribuído uniformemente ao redor do ponto de amostragem. Mas isso é impossível de fazer para os preços que ocorrem em tempo real, uma vez que os dados futuros não está disponível. Se você quiser uma mudança recente, como D, para ter um impacto maior, use uma média que dê um peso maior a dados recentes, ou um período de tempo mais curto, ou ambos. Uma forma de suavizar os dados é simplesmente utilizar um único acumulador (o estimador suavizado) E e tomar amostras periódicas dos dados S. E é actualizado como se segue: 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 subitamente muda Para B. O estimador começará a mover-se em direção a B de forma exponencial (como aquecimento, carga descarga de um capacitor, etc). Em primeiro lugar ele vai fazer um grande salto, e, em seguida, cada vez menores incrementos. O quão rápido ele se move depende de K. Se K é 0, o estimador não se move de todo, e se K é 1 ele se move instantaneamente. Com K você pode ajustar quanto peso você dá ao estimador versus a nova amostra. Mais peso é dado às amostras mais recentes implicitamente, ea janela de amostra basicamente se estende ao infinito: E é baseado em cada amostra de valor que já ocorreu. Embora, naturalmente, os muito antigos têm quase nenhuma influência sobre o valor atual. Um método muito simples, bonito. Respondeu Apr 14 12 at 21:50 Este é o mesmo que Tom39s resposta. Sua fórmula para o novo valor do estimador é (1 - K) E KS. Que é algébricamente o mesmo que E K (S - E). É uma função de mistura quotlinear entre o estimador de corrente E ea nova amostra S onde o valor de K 0, 1 controla a mistura. Escrevê-lo dessa maneira é bom e útil. Se K é 0,7, tomamos 70 de S e 30 de E, o que é o mesmo que adicionando 70 da diferença entre E e S de volta a E. ndash Kaz 14 de abril de 12 às 22:15 Em Toms expansão resposta, a fórmula (Tn - t n-1) T, ou seja, a é uma razão de delta do tempo de chegada sobre o intervalo de média v 1 (use o método anterior) ) Ou v (1 - u) a (interpolação linear, ou vu (próximo ponto) Mais informações podem ser encontradas na página 59 do livro Introdução ao algoritmo High Frequency Finance. C para a média móvel exponencial de latência nula Última modificação: 2017-08-13 Eu tenho tentado implementar um corte de baixa freqüência em c que essencialmente leva um fluxo de números e suaviza a saída (filtragem para fora de movimento de alta freqüência), no entanto, é importante que os números ponderados dianteiros são considerados imediatamente como os dados Tempo é crítico (é controlar uma base de simulação de movimento usando Saída de um pouco de software de jogo). Eu tenho um algoritmo de média móvel ponderada de trabalho, mas poderia fazer com algo um pouco mais responsivo no front end, e eu achei isso: - O pseudo-código lá é o seguinte: Entradas: Preço (NumericSeries), Period (NumericSimple) Variáveis: Fator (0) se a Barra Atual lt 1 então começa ZLEMA Fator de preço 2 (Period1) lag (Período-1) 2 end else begin Fator ZLEMA (2Price-Pricelag) (1-factor) ZLEMA1 end Ive traduzido em Para C e meu código é o seguinte: No entanto, ele doesnt parecem se comportar bastante como Id esperar. Parece estar quase lá, mas às vezes eu recebo um valor ligeiramente menor do que todos os itens na fila (quando eles são todos mais elevados). Minha fila e o número de itens nele são passados ​​como parâmetros, sendo o mais recente na frente em todos os momentos, também eu passar um contador de incremento começando em 0 como exigido pela função. Eu não tenho certeza Ive interpretou o significado de ZLEMA1 corretamente como seu não claro em seu pseudocódigo, então Ive assumiu que este é o último zlema chamadas e também Im assumindo preço realmente significa Price0. Talvez eu tenho este errado Eu deveria estar copiando os valores reais zlema calculado de volta à minha fila original antes da próxima chamada Eu não mudar a fila original em todos os outros que apenas deslocando todos os valores um para o fim e inserindo o mais recente no início . O código que eu uso para fazer isso é: Seria extremamente grato se alguém com uma melhor compreensão da matemática poderia agradar sanidade verificar isso para mim para ver se eu tenho algo ligeiramente errado Obrigado com antecedência se você pode ajudar Em primeiro lugar, graças a todos por Sua entrada, muito apreciado Isso faz sentido eu acho, então eu suponho que então o melhor que eu posso esperar é simplesmente uma média móvel exponencial, aceitando haverá um pequeno atraso, mas isso será minimizado pela ponderação mais pesada frente do que o dado em tipcial ponderada Eu tenho este algoritmo também, mas um problema semelhante em que os valores não parecem muito corretos (a menos que esta seja a natureza da fórmula). Por exemplo, digamos que minha matriz contém 16 valores, todos os 0.4775 - a saída é 0.4983, mas Id espero que seja 0.4775 Isso parece certo para você. Média móvel exponencial. Float ema (float vals, int numVals, int currentSample) estático float factor 0 static float lastema 0 float ema se (currentSample lt 1) ema vals0 fator 2.0 ((float) numVals) 1.0 ou mais ema (factor vals0) Inversamente, às vezes a saída é menor do que cada uma das entradas, mesmo se todos são mais elevados. É chamado da mesma forma que zlema (.) Acima, com um contador de incremento. A fórmula e pseudocódigo para este estão aqui: - autotradingstrategy. wordpress20091130exponential-moving-average Obrigado novamente, desculpas para o meu mal-entendido de alguns dos princípios :( Kind regards, Chris J Quanto ao código que eu postei, você está certo sobre o tamanho do array Isso deve ser facilmente corrigido Quanto às suas perguntas: 1) A constante do filtro representa um corte de freqüência. Eu usei um Digital Signal Processing (DSP) para esta técnica. En. wikipedia. orgwi kiLow-pas sfilter é uma explicação simples. Você deseja a seção Discrete-Time Realization. No meu caso, o A é o RC-Constant que eles falam. Assim a freqüência que corta para fora está acima de 1 (2piA). Se você não tem uma compreensão da teoria de domínio de freqüência, isso pode ficar complicado. No seu caso, Quanto mais alto você faz A, menor a freqüência que este filtro permitirá, o que significa que vai suavizar a curva mais e mais. Quanto mais baixo você fizer, mais ruído é permitido no sistema. Lembre-se A deve ser maior ou igual a 1 para ser eficaz. Eu reattached o XLS outra vez, esta vez sem os números mudando do rand (). Ajustar a constante A e ver como quotsmoothsquot (ou filtros) as variações de alta freqüência. 2) O último ponto da matriz de entrada tem o valor mais recente. 3) O mesmo é verdadeiro para o array de saída. O último é o valor mais recente. 5) O NUMVALS é arbitrário. Você pode adicionar continuamente para a matriz de entrada e saída quantas vezes você gosta e não afetaria o filtro. Em particular, usei 49 pontos. Mas eu posso apagar facilmente os últimos 20 e as primeiras 29 saídas permanecerão as mesmas. A função não é baseada em quantos pontos estão sendo usados. Gostaria de mencionar que desenvolvi esta função para uma conversão única. Se você quisesse fazer uma conversão para o valor seguinte na mosca você poderia tentar algo mais simples (como unido). Novamente Im enferrujado em c. Espero que isto esteja certo. A única coisa que você precisaria fornecer é a constante de entrada e filtro. Deixe-me saber se isso ajuda. Trading com VWAP e MVWAP preço médio ponderado do volume (VWAP) e volume móvel preço médio ponderado (MVWAP) são ferramentas de negociação que pode ser usado por todos os comerciantes. No entanto, essas ferramentas são usadas com mais freqüência por comerciantes de curto prazo e em programas de negociação baseada em algoritmos. MVWAP pode ser usado por comerciantes de longo prazo, mas VWAP só olha um dia de cada vez devido ao seu cálculo intra-dia. Ambos os indicadores são um tipo especial de preço médio que leva em conta o volume que proporciona uma imagem muito mais precisa do preço médio. Os indicadores também atuam como pontos de referência para indivíduos e instituições que desejam avaliar se obtiveram boa execução ou baixa execução em sua ordem. Cálculo de VWAP O cálculo de VWAP é realizado pelo software de gráficos e exibe uma sobreposição no gráfico que representa os cálculos. Esta exibição assume a forma de uma linha, semelhante a outras médias móveis. Calcula o preço típico para o primeiro período (e todos os períodos no dia seguinte). O preço típico é atingido tomando-se a adição de alta, baixa e fechar, e dividindo por três: (HLC) 3 Multiplique este preço típico pelo volume para esse período. Isso nos dará um valor chamado TPV. Mantenha um total em execução dos valores de TPV, denominado TPV cumulativo. Isto é alcançado adicionando continuamente o TPV mais recente aos valores anteriores (exceto para o primeiro período, já que não haverá valor prévio). Esta figura deve sempre estar ficando maior à medida que o dia avança. Manter um total acumulado de volume cumulativo. Faça isso adicionando continuamente o volume mais recente ao volume anterior. Esse número só deve ficar maior à medida que o dia avança. Calcule VWAP com suas informações: volume cumulativo TPV cumulativo. Isso fornecerá um preço médio ponderado por volume para cada período e fornecerá os dados para criar a linha de fluxo que sobrepõe os dados de preços no gráfico. É provável melhor usar um programa de planilha para rastrear os dados se você estiver fazendo isso manualmente. Uma planilha pode ser facilmente configurada. Figura 1: cabeçalhos de planilha Fonte: Microsoft Excel Os cálculos apropriados precisariam ser inseridos. A obtenção do MVWAP é bastante simples após a VWAP ter sido calculada. Um MVWAP é basicamente uma média dos valores de VWAP. VWAP só é calculado a cada dia, mas MVWAP pode mover de dia para dia, porque é uma média de uma média. Isso oferece aos comerciantes de longo prazo um preço médio móvel ponderado pelo volume. Se um comerciante queria um MVWAP período 10, eles simplesmente esperar para os primeiros dez períodos a decorrer e, em seguida, seria a média dos primeiros 10 cálculos VWAP. Isso proporcionaria ao profissional o MVWAP que começa a ser plotado no período 10. Para continuar recebendo o cálculo MVWAP, faça a média dos últimos 10 valores VWAP, inclua um novo VWAP do período mais recente e solte o VWAP de 11 períodos anteriores. Aplicar aos gráficos Embora compreender os indicadores e os cálculos associados seja importante, o software de gráficos pode fazer os cálculos para nós. Em software que não inclui VWAP ou MVWAP, ainda pode ser possível programar o indicador no software usando os cálculos acima. (Para obter informações relacionadas, consulte Dicas para criar gráficos de ações rentáveis.) Selecionando o indicador VWAP, ele aparecerá no gráfico. Geralmente não deve haver variáveis ​​matemáticas que possam ser alteradas ou ajustadas com este indicador. Se um comerciante deseja usar o indicador Moving VWAP (MVWAP), ela pode ajustar quantos períodos a média no cálculo. Isso pode ser feito ajustando a variável em nossa plataforma de gráficos. Selecione o indicador e, em seguida, vá para a sua função editar ou propriedades para alterar o número de períodos médios. Diferenças entre VWAP e MVWAP Existem algumas grandes diferenças entre os indicadores que precisam ser entendidos. VWAP fornecerá um total de corrida ao longo do dia. Assim, o valor final do dia é o preço médio ponderado pelo volume do dia. Se estiver usando um gráfico de um minuto, haverá 390 (6,5 horas x 60 minutos) cálculos que serão feitos para o dia, com o último fornecendo os dias VWAP. MVWAP, por outro lado, fornecerá uma média do número de cálculos VWAP que desejamos analisar. Isso significa que não há valor final para MVWAP, pois ele pode fluir de um dia para o outro, fornecendo uma média do valor VWAP ao longo do tempo. Isso torna o MVWAP muito mais personalizável. Ele pode ser adaptado para atender às necessidades específicas. Também pode ser muito mais sensível aos movimentos de mercado para negócios de curto prazo e estratégias ou pode suavizar o ruído do mercado, se um período mais longo é escolhido. VWAP fornece informações valiosas para comprar e manter os comerciantes, especialmente após a execução (ou fim do dia). Ele permite que o comerciante saber se eles receberam um melhor do que o preço médio nesse dia ou se eles receberam um pior preço. MVWAP não fornece necessariamente esta mesma informação. (Para obter mais informações, consulte Compreendendo a execução de ordens.) O VWAP começará a funcionar todos os dias. Volume é pesado no primeiro período após a abertura do mercado, portanto, esta ação geralmente pesa muito no cálculo VWAP. O MVWAP pode ser transportado de um dia para o outro, pois sempre será a média dos períodos mais recentes (10 por exemplo) e é menos suscetível a qualquer período individual - e torna-se progressivamente menor, quanto mais períodos são médios. Estratégias gerais Quando uma segurança é tendência, podemos usar VWAP e MVWAP para obter informações do mercado. Se o preço está acima VWAP, é um bom intra-dia preço para vender. Se o preço estiver abaixo do VWAP, é um bom preço intra-dia para comprar. (Para leitura adicional, veja Vantagens de gráficos baseados em dados Intraday.) Há uma advertência para usar este intra-dia embora. Os preços são dinâmicos, então o que parece ser um bom preço em um ponto do dia pode não ser por dias final. Em dias de tendência ascendente, os comerciantes podem tentar comprar como os preços saltar fora MVWAP ou VWAP. Alternativamente, eles podem vender em uma tendência de baixa como preço empurra para a linha. A Figura 2 mostra três dias de ação de preço no iShares Silver Trust ETF (SLV). Como o preço subiu, manteve-se largamente acima do VWAP e MWAP, e declina para as linhas oferecidas oportunidades de compra. Como o preço caiu, eles ficaram muito abaixo dos indicadores e rallies para as linhas foram oportunidades de venda. Beta é uma medida da volatilidade, ou risco sistemático, de um título ou de uma carteira em comparação com o mercado como um todo. Um tipo de imposto incidente sobre ganhos de capital incorridos por pessoas físicas e jurídicas. Os ganhos de capital são os lucros que um investidor. Uma ordem para comprar um título igual ou inferior a um preço especificado. Uma ordem de limite de compra permite que traders e investidores especifiquem. Uma regra do Internal Revenue Service (IRS) que permite retiradas sem penalidade de uma conta IRA. A regra exige que. A primeira venda de ações por uma empresa privada para o público. IPOs são muitas vezes emitidos por empresas menores, mais jovens à procura da. DebtEquity Ratio é o rácio da dívida utilizado para medir a alavancagem financeira de uma empresa ou um rácio da dívida utilizado para medir um indivíduo.

No comments:

Post a Comment