Wednesday 9 August 2017

Algoritmo De Cálculo Da Média Móvel


Preço médio ponderado por volume - VWAP Qual é o preço médio ponderado por volume - VWAP O preço médio ponderado em volume (VWAP) é uma referência comercial utilizada especialmente em planos de pensão. O VWAP é calculado adicionando os dólares negociados para cada transação (preço multiplicado pelo número de ações negociadas) e depois dividindo pelo total de ações negociadas para o dia. A teoria é que se o preço de um comércio de compras for menor do que o VWAP, é um bom comércio. O contrário é verdadeiro se o preço for maior do que o VWAP. Carregando o jogador. BREW DOWN Volume médio ponderado por volume - VWAP O preço médio ponderado por volume (VWAP) é uma proporção geralmente utilizada por investidores institucionais e fundos de investimento para fazer compras e vendas, de modo a não perturbar os preços de mercado com grandes pedidos. É o preço médio da ação de um estoque ponderado em relação ao seu volume de negócios dentro de um período de tempo específico, geralmente um dia. VWAP Explicado Grandes investidores institucionais ou casas de investimento que usam o VWAP baseiam seus cálculos em todos os dados de dados durante um dia de negociação. Em essência, cada transação fechada é registrada. No entanto, a maioria dos sites de gráficos e investidores individuais podem preferir usar preços de negociação de um minuto ou cinco minutos para reduzir o grande volume de dados necessários para acompanhar o VWAP em um dia. Para um cálculo VWAP de cinco minutos, você tomaria o mínimo, além do alto, mais o preço de fechamento dentro do período de cinco minutos e dividir o total por três. Isso lhe dá um preço médio ponderado no tempo (TWAP) que é razoavelmente preciso, e você pode multiplicar esse número pelo volume negociado no mesmo período para atingir um preço ponderado. Por que usar o VWAP Grandes compradores institucionais e fundos de investimento usam o rácio VWAP para poderem se deslocar para os estoques de uma forma que não irá perturbar a dinâmica do mercado natural de um preço de ações. Se esses compradores se mudassem para uma posição de estoque de uma só vez, elevaria de forma anormal o preço das ações. Contudo, a compra de ações de compra sob a média móvel VWAP intradiária. Esses compradores podem se mover para um estoque no decorrer de um dia ou dois sem muita interrupção de preço. No entanto, há outros usos para o VWAP, e uma dessas estratégias é comprar ações para investidores individuais, assim como o VWAP perfura a média móvel intradía VWAP, pois isso pode indicar uma mudança de impulso no preço da ação. Também é usado na negociação algorítmica e permite que os corretores garantam a execução de um comércio perto de um determinado volume de preços para os clientes. Questões VWAP O VWAP é um indicador cumulativo e, como tal, o número de pontos de dados aumenta ao longo do dia. Este conjunto de dados crescente, por longos períodos de tempo, como quatro, seis ou oito horas por dia, pode causar atraso entre a média móvel VWAP e o VWAP real. Como tal, a maioria dos investidores nunca usa um VWAP por mais de um dia. Estou trabalhando com uma grande quantidade de séries temporais. Essas séries temporais são basicamente medidas de rede que chegam a cada 10 minutos, e algumas delas são periódicas (ou seja, a largura de banda), enquanto algumas outras arent (ou seja, a quantidade de tráfego de roteamento). Gostaria de um algoritmo simples para fazer uma detecção outlier online. Basicamente, eu quero manter na memória (ou no disco) todos os dados históricos para cada série temporal, e eu quero detectar qualquer outlier em um cenário ao vivo (cada vez que uma nova amostra é capturada). Qual é a melhor maneira de alcançar esses resultados Estou atualmente usando uma média móvel para remover algum ruído, mas depois o que aconteceu Simples coisas como desvio padrão, louco. Contra todo o conjunto de dados não funciona bem (eu não posso assumir que as séries temporais estão estacionárias) e eu gostaria de algo mais preciso, idealmente uma caixa preta como: double outlierdetection (double vector, double value) onde vector é o array de dupla contendo Os dados históricos e o valor de retorno são a pontuação de anomalia para o novo valor da amostra. Perguntou 2 de agosto 10 às 20:37 Sim, eu assumi que a freqüência é conhecida e especificada. Existem métodos para estimar a frequência automaticamente, mas isso complicaria consideravelmente a função. Se você precisa estimar a freqüência, tente fazer uma pergunta separada sobre isso - e provavelmente vou fornecer uma resposta, mas precisa de mais espaço do que eu tenho disponível em um comentário. Ndash Rob Hyndman 3 de agosto 10 às 23:40 Uma boa solução terá vários ingredientes, incluindo: Use uma janela resistente, móvel, suave para remover a não-estabilidade. Reexpresse os dados originais para que os resíduos em relação ao liso sejam distribuídos aproximadamente de forma simétrica. Dada a natureza dos seus dados, é provável que suas raízes quadradas ou logaritmos dêem resíduos simétricos. Aplique os métodos do gráfico de controle, ou pelo menos o pensamento da tabela de controle, para os resíduos. No que diz respeito ao último, o pensamento do gráfico de controle mostra que os limiares convencionais, como 2 SD ou 1,5 vezes o IQR além dos quartis, funcionam mal porque provocam muitos sinais falsos fora de controle. As pessoas geralmente usam 3 SD no trabalho de tabela de controle, de onde 2,5 (ou mesmo 3) vezes o IQR além dos quartis seria um bom ponto de partida. Eu esbocei mais ou menos a natureza da solução Rob Hyndmans, ao mesmo tempo que adicionei dois pontos principais: o potencial precisa reexpressar os dados e a sabedoria de ser mais conservador na sinalização de um outlier. Não tenho certeza de que Loess seja bom para um detector on-line, no entanto, porque não funciona bem nos pontos finais. Você pode, em vez disso, usar algo tão simples como um filtro de medição móvel (como no alisamento resistente de Tukeys). Se os outliers não vierem em rajadas, você pode usar uma janela estreita (5 pontos de dados, talvez, que serão quebrados apenas com uma explosão de 3 ou mais valores atípicos dentro de um grupo de 5). Depois de ter realizado a análise para determinar uma boa reexpressão dos dados, é improvável que você precise alterar a reexpressão. Portanto, seu detector on-line realmente precisa apenas fazer referência aos valores mais recentes (a última janela) porque não usará os dados anteriores. Se você tiver muito tempo, você pode avançar para analisar a autocorrelação e a sazonalidade (como flutuações diárias ou semanais recorrentes) para melhorar o procedimento. Respondeu 26 de agosto às 18:02 John, 1.5 IQR é a recomendação original da Tukey39 para os bigodes mais longos em um boxplot e 3 IQR é a sua recomendação para marcar pontos como quotfar outliersquot (um riff em uma frase popular de 6039s). Isso é incorporado em vários algoritmos boxplot. A recomendação é analisada teoricamente em Hoaglin, Mosteller, amp Tukey, Understanding Robust e Exploratory Data Analysis. Ndash whuber 9830 out 9 12 at 21:38 Isso confirma dados de séries temporais que tentei analisar. A média da janela e também os desvios padrão de uma janela. ((X - avg) sd) gt 3 parecem ser os pontos que eu quero marcar como outliers. Bem, pelo menos, avisar como outliers, eu sinalizador qualquer coisa acima de 10 sd como extremos extremos outliers. O problema em que eu toco é o que é um comprimento de janela ideal I39m jogando com qualquer coisa entre 4-8 pontos de dados. Ndash NeoZenith 29 de junho 16 às 8:00 Neo Sua melhor aposta pode ser experimentar um subconjunto de seus dados e confirmar suas conclusões com os testes no restante. Você também poderia realizar uma validação cruzada mais formal (mas é necessário um cuidado especial com dados da série temporal devido à interdependência de todos os valores). Ndash whuber 9830 29 jun 16 às 12:10 (Esta resposta respondeu a uma pergunta duplicada (agora fechada) na Detecção de eventos pendentes, que apresentou alguns dados em forma gráfica.) A detecção de ultrapassagem depende da natureza dos dados e do que você é Disposto a assumir sobre eles. Os métodos de uso geral dependem de estatísticas robustas. O espírito desta abordagem é caracterizar a maior parte dos dados de uma forma que não é influenciada por valores aberrantes e, em seguida, apontar para valores individuais que não se enquadram nessa caracterização. Como esta é uma série de tempo, ela acrescenta a complicação da necessidade de (re) detectar outliers de forma contínua. Se isso for feito à medida que a série se desenrola, então só podemos usar dados mais antigos para a detecção, não dados futuros. Além disso, como proteção contra os muitos testes repetidos, gostaríamos de usar um método com falso muito baixo Taxa positiva. Essas considerações sugerem a execução de um teste outlier de janela móvel simples e robusto sobre os dados. Há muitas possibilidades, mas uma simples, fácil de entender e facilmente implementada é baseada em um MAD em execução: desvio absoluto mediano da mediana. Esta é uma medida fortemente robusta de variação dentro dos dados, semelhante a um desvio padrão. Um pico periférico seria vários MAD ou mais maior do que a mediana. Ainda há algum ajuste a ser feito. Quanto de um desvio da maior parte dos dados deve ser considerado periférico e em que ponto de volta no tempo deve olhar. Deixar estes como parâmetros para experimentação. Heres e uma implementação R aplicada a dados x (1,2, ldots, n) (com n1150 para emular os dados) com valores correspondentes y: Aplicada a um conjunto de dados como a curva vermelha ilustrada na pergunta, produz esse resultado: os dados São mostrados em vermelho, a janela de 30 dias dos limiares da mediana5MAD em cinza e os outliers - que são simplesmente esses valores de dados acima da curva de cinza - em preto. (O limite só pode ser calculado começando no final da janela inicial. Para todos os dados nesta janela inicial, o primeiro limiar é usado: é por isso que a curva cinza é plana entre x0 e x30.) Os efeitos da alteração dos parâmetros são (A) o aumento do valor da janela tenderá a suavizar a curva cinza e (b) o limite crescente aumentará a curva cinza. Sabendo disso, pode-se levar um segmento inicial dos dados e identificar rapidamente os valores dos parâmetros que melhor segregam os picos periféricos do resto dos dados. Aplique esses valores de parâmetros para verificar o resto dos dados. Se um gráfico mostra que o método está a piorar ao longo do tempo, isso significa que a natureza dos dados está mudando e os parâmetros podem precisar ser reajustados. Observe o pouco que este método assume sobre os dados: eles não precisam ser normalmente distribuídos, eles não precisam exibir qualquer periodicidade, eles não precisam ser negativos. Tudo o que presume é que os dados se comportam de maneira razoavelmente similar ao longo do tempo e que os picos periféricos são visivelmente maiores do que o resto dos dados. Se alguém quiser experimentar (ou comparar alguma outra solução com aquela oferecida aqui), aqui está o código que eu usei para produzir dados como os que estão na pergunta. Estou adivinhando que o modelo sofisticado de séries temporais não funcionará para você por causa do tempo necessário para detectar outliers usando esta metodologia. Portanto, aqui está uma solução alternativa: primeiro estabeleça um padrão de tráfego normal de linha de base por um ano com base na análise manual de dados históricos que responde pelo horário do dia, dia da semana vs fim de semana, mês do ano etc. Use esta linha de base juntamente com algum mecanismo simples (Por exemplo, média móvel sugerida por Carlos) para detectar outliers. Você também pode querer rever a literatura de controle de processo estatístico para algumas idéias. Sim, isso é exatamente o que eu estou fazendo: até agora eu dividir manualmente o sinal em períodos, de modo que, para cada um deles, eu posso definir um intervalo de confiança dentro do qual o sinal deveria estar parado e, portanto, eu posso usar métodos padrão, como Como desvio padrão. O problema real é que não consigo decidir o padrão esperado para todos os sinais que eu tenho que analisar, e é por isso que estou procurando por algo mais inteligente. Ndash gianluca 2 de agosto 10 às 21:37 Aqui está uma idéia: Etapa 1: implementar e estimar um modelo genérico de séries temporais em uma base única com base em dados históricos. Isso pode ser feito offline. Etapa 2: use o modelo resultante para detectar outliers. Passo 3: em algumas frequências (talvez a cada mês), calibre novamente o modelo da série temporal (isso pode ser feito offline), de modo que a detecção de outliers por etapas 2 não ultrapasse os padrões de tráfego atuais. Isso funcionaria para o seu contexto ndash user28 2 de agosto 10 às 22:24 Sim, isso pode funcionar. Eu estava pensando em uma abordagem semelhante (recomputando a linha de base toda semana, o que pode ser intensivo em CPU se você tiver centenas de séries temporais univariadas para analisar). BTW a verdadeira questão difícil é quot qual é o melhor algoritmo de estilo blackbox para modelar um sinal completamente genérico, considerando o ruído, estimativa de tendência e sazonalidade. AFAIK, cada abordagem na literatura requer uma fase de tuningquot quotparameter muito difícil, e o único método automático que encontrei é um modelo ARIMA da Hyndman (robjhyndmansoftwareforecast). Estou faltando algo ndash gianluca 2 de agosto 10 às 22:38 Novamente, isso funciona muito bem se o sinal for suposto ter uma sazonalidade como essa, mas se eu usar uma série de tempo completamente diferente (ou seja, o tempo médio de ida e volta de TCP ao longo do tempo ), Este método não funcionará (uma vez que seria melhor lidar com aquele com uma média global simples e desvio padrão usando uma janela deslizante contendo dados históricos). Ndash gianluca 2 de agosto 10 às 22:02 A menos que você esteja disposto a implementar um modelo de série de tempo geral (o que traz seus contras em termos de latência, etc.) Eu sou pessimista que você encontrará uma implementação geral que, ao mesmo tempo, é simples o suficiente Para trabalhar em todos os tipos de séries temporais. Ndash user28 2 de agosto 10 às 22:06 Outro comentário: eu sei que uma boa resposta pode ser porque você pode estimar a periodicidade do sinal e decidir o algoritmo para usar de acordo com isso, mas eu não encontrei uma boa solução para este. Problema (eu joguei um pouco com análise espectral usando DFT e análise de tempo usando a função de autocorrelação, mas minhas séries temporais contêm muito barulho e esses métodos dão alguns resultados loucos dos tempos) ndash gianluca 2 de agosto 10 às 22:06 A Comente para o seu último comentário: é por isso que estou procurando uma abordagem mais genérica, mas eu preciso de um tipo de caixa de quotblack porque não posso fazer qualquer suposição sobre o sinal analisado e, portanto, não posso criar o conjunto de parâmetros mais velozes para o algoritmo de aprendizagem. Ndash gianluca 2 de agosto 10 às 22:09 Uma vez que é um dado da série temporal, um filtro exponencial simples em. wikipedia. orgwikiExponentialsmoothing irá suavizar os dados. É um filtro muito bom, pois você não precisa acumular pontos de dados antigos. Compare cada valor de dados recentemente suavizado com o seu valor não suavizado. Uma vez que o desvio excede um certo limiar predefinido (dependendo do que você acredita que um outlier em seus dados é), seu outlier pode ser facilmente detectado. Respondeu 30 de abril 15 às 8:50 Você poderia usar o desvio padrão das últimas medições N (você precisa escolher um N adequado). Uma boa pontuação de anomalia seria quantos desvios padrão uma medida é da média móvel. Respondeu 2 de agosto 10 às 20:48 Obrigado pela sua resposta, e se o sinal exibir uma alta sazonalidade (ou seja, muitas medidas de rede são caracterizadas por um padrão diário e semanal ao mesmo tempo, por exemplo, noite vs dia ou fim de semana Vs dias úteis) Uma abordagem baseada no desvio padrão não funcionará nesse caso. Ndash gianluca 2 de agosto 10 às 20:57 Por exemplo, se eu receber uma nova amostra a cada 10 minutos, e I39m fazendo uma detecção outlier do uso de largura de banda da rede de uma empresa, basicamente às 18h, esta medida cairá (isso é esperado Um padrão totalmente normal), e um desvio padrão calculado sobre uma janela deslizante falhará (porque ele irá ativar um alerta com certeza). Ao mesmo tempo, se a medida cair às 16h (desviando-se da linha de base usual), este é um valor de risco real. Ndash gianluca 2 de agosto 10 às 20:58 o que eu faço é agrupar as medidas por hora e dia da semana e comparar os desvios-padrão dessa. Ainda não correto para coisas como feriados e sazonalidade invernal, mas é correto na maioria das vezes. A desvantagem é que você realmente precisa coletar um ano ou mais de dados para ter o suficiente para que o stddev comece a fazer sentido. A análise espectral detecta periodicidade em séries temporais estacionárias. A abordagem de domínio de freqüência com base na estimativa da densidade espectral é uma abordagem que eu recomendaria como seu primeiro passo. Se, por certos períodos, a irregularidade significa um pico muito maior do que o típico nesse período, a série com tais irregularidades não seria estacionária e a análise espacial espectral não seria apropriada. Mas supondo que você tenha identificado o período que tem as irregularidades, você deve determinar aproximadamente qual seria a altura normal do pico e, em seguida, pode definir um limite em algum nível acima dessa média para designar os casos irregulares. Respondeu 3 de setembro 12 às 14:59 Sugiro o esquema abaixo, que deve ser implementável em um dia ou mais: coletar tantas amostras quanto você pode segurar na memória Remover outliers óbvias usando o desvio padrão para cada atributo Calcular e armazenar a matriz de correlação E também a média de cada atributo Calcule e armazene as distâncias de Mahalanobis de todas as suas amostras Calculando a outguraza: Para a amostra única de que você quer saber a sua existência: Recuperar os meios, matriz de covariância e distância de Mahalanobis do treinamento Calcule a distância de Mahalanobis d Para a sua amostra Retorne o percentil em que d cai (usando as distâncias de Mahalanobis do treino). Esse será o seu resultado anormal: 100 é um outlier extremo. PS. Ao calcular a distância Mahalanobis. Use a matriz de correlação, não a matriz de covariância. Isso é mais robusto se as medidas da amostra variarem em unidade e número.

No comments:

Post a Comment