Monday 16 October 2017

C média móvel


Eu sei que isso é viável com o aumento de acordo com: Mas eu realmente gostaria de evitar usar o impulso. Eu mencionei e não encontrei nenhum exemplo adequado ou legível. Basicamente eu quero acompanhar a média móvel de um fluxo contínuo de um fluxo de números de ponto flutuante usando os 1000 números mais recentes como amostra de dados. Qual é a maneira mais fácil de alcançar isso, experimentei usar uma matriz circular, uma média móvel exponencial e uma média móvel mais simples e descobriu que os resultados da matriz circular adequavam minhas necessidades. 12 de junho 12 às 4:38 Se suas necessidades são simples, você pode tentar usar uma média móvel exponencial. Simplificando, você faz uma variável de acumulador e, à medida que seu código examina cada amostra, o código atualiza o acumulador com o novo valor. Você escolhe um alfa constante que está entre 0 e 1 e calcula isso: você precisa apenas encontrar um valor de alfa onde o efeito de uma determinada amostra dura apenas cerca de 1000 amostras. Hmm, na verdade, não tenho certeza de que isso é adequado para você, agora que eu já coloquei aqui. O problema é que 1000 é uma janela bastante longa para uma média móvel exponencial. Não tenho certeza se houver um alfa que espalhe a média nos últimos 1000 números, sem fluxo inferior no cálculo do ponto flutuante. Mas se você quisesse uma média menor, como 30 números ou mais, esta é uma maneira muito fácil e rápida de fazê-lo. Respondeu 12 de junho 12 às 4:44 1 na sua postagem. A média móvel exponencial pode permitir que o alfa seja variável. Assim, isso permite que ele seja usado para calcular médias base de tempo (por exemplo, bytes por segundo). Se o tempo desde a última atualização do acumulador for superior a 1 segundo, você deixa alfa ser 1.0. Caso contrário, você pode deixar alpha be (usecs desde a última atualização1000000). Ndash jxh 12 de junho 12 às 6:21 Basicamente eu quero acompanhar a média móvel de um fluxo contínuo de um fluxo de números de ponto flutuante usando os 1000 números mais recentes como uma amostra de dados. Observe que as atualizações abaixo atualizam o total como elementos como adicionados, evitando a trajetória O (N) cara para calcular a soma - necessária para a média - na demanda. Total é feito um parâmetro diferente de T para suportar, e. Usando um longo tempo quando totalizando 1000 long s, um int para char s, ou um duplo para float total s. Isso é um pouco falho em que numsamples poderia ultrapassar o INTMAX - se você se importar, você poderia usar um sinal não assinado por muito tempo. Ou use um membro extra de dados do bool para gravar quando o recipiente é preenchido pela primeira vez ao andar de bicicleta numsamples em torno da matriz (melhor então renomeado algo inócuo como pos). Respondeu 12 de junho 12 às 5:19 um assume que quotvoid operator (T sample) quot é realmente quotvoid operatorltlt (T sample) quot. Ndash oPless Jun 8 14 às 11:52 oPless ahhh. Bem manchado. Na verdade, eu quis dizer que ele seria um operador vazio () (amostra T), mas é claro que você poderia usar qualquer notação que você gostasse. Vou consertar, obrigado. Ndash Tony D 8 de junho 14 às 14: 27 Eu quero desenvolver o cálculo da média móvel do preço das ações. Mas cálculos muito complexos foram planejados mais tarde. Meu primeiro passo para saber como calcular a média móvel de forma eficiente. Preciso saber como levar a entrada e retornar a saída de forma eficiente. Considerado data e preço de entrada. Saída consensada Data, Preço e Média Mover. Se eu tiver 500 registros e eu quero calcular a média em movimento por 5 dias, qual é a maneira eficiente em vez de ir e voltar na matriz de Data e Preço novamente, sugere qual é a melhor maneira de receber entrada (ArrayList, Table, array Etc) e retorno de saída. Nota: A MA de 5 dias será de média dos últimos 5 dias, incluindo o preço atual. Ontem MA será a média dos últimos 5 dias de ontem. Eu quero manter os dias para ser flexível em vez de 5 pode ser 9, 14, 20 etc. Quinta-feira, 10 de abril de 2008 3:21 PM Se você precisa de um cálculo simples sem o seu esforço do que você pode usar o TA-Lib. Mas se você deseja que seu cálculo seja mais eficiente do que o TA-Lib, então você pode criar seu próprio indicador técnico. TA-Lib é ótimo, mas o problema é que esta biblioteca possui apenas métodos estáticos. Isso significa que quando você precisa calcular os valores da matriz SMA com base em 500 barras de preços, você enviará toda a matriz de barras e retornará a matriz de valores SMA. Mas se você receber o novo valor 501-st, então você deve enviar novamente a matriz inteira e TA-Lib novamente calculará e retornará a matriz de valores SMA. Agora, imagine que você precisa desse indicador sobre o preço real dos alimentos e, para cada mudança de preço, você precisa de um novo valor indicador. Se você tem um indicador não é um grande problema, mas se você tiver centenas de indicadores trabalhando, pode ser um problema de desempenho. Eu estava em tal situação e começar a desenvolver indicadores em tempo real que são eficientes e fazer cálculos adicionais para a nova barra de preços ou para barras de preço alteradas apenas. Infelizmente eu nunca precisei do indicador SMA para os meus sistemas de negociação, mas eu tenho isso para EMA, WMA, AD e outros. Um desses indicadores AD é publicado no meu blog e você pode ver de lá qual é a estrutura básica da minha classe de indicadores em tempo real. Espero que você precise de pequenas mudanças para implementar o indicador SMA, porque é um dos mais simples. A lógica é simples. Para calcular SMA, tudo que você precisa é n últimos valores de preço. Assim, a instância da classe terá coleta de preços, que irá armazenar, mantenha apenas o último número de preços, conforme o SMA é definido (no seu caso 5). Então, quando você tiver um novo bar, você removerá o mais antigo e adicionará um novo e criará o cálculo. Quinta-feira, 10 de abril de 2008 16:04 Todas as respostas Há uma biblioteca chamada TA-Lib que faz tudo isso para você e é de código aberto. Tem cerca de 50 indicadores, penso. Nós usamos isso em ambiente de produção e é muito eficiente e realista. Você pode usá-lo em C, Java, C, etc. Se você precisa de um cálculo simples sem o seu esforço do que você pode usar o TA-Lib. Mas se você deseja que seu cálculo seja mais eficiente do que o TA-Lib, então você pode criar seu próprio indicador técnico. TA-Lib é ótimo, mas o problema é que esta biblioteca possui apenas métodos estáticos. Isso significa que quando você precisa calcular os valores da matriz SMA com base em 500 barras de preços, você enviará toda a matriz de barras e retornará a matriz de valores SMA. Mas se você receber o novo valor 501-st, então você deve enviar novamente a matriz inteira e TA-Lib novamente calculará e retornará a matriz de valores SMA. Agora, imagine que você precisa desse indicador sobre o preço real dos alimentos e, para cada mudança de preço, você precisa de um novo valor indicador. Se você tem um indicador não é um grande problema, mas se você tiver centenas de indicadores trabalhando, pode ser um problema de desempenho. Eu estava em tal situação e começar a desenvolver indicadores em tempo real que são eficientes e fazer cálculos adicionais para a nova barra de preços ou para barras de preço alteradas apenas. Infelizmente eu nunca precisei do indicador SMA para os meus sistemas de negociação, mas eu tenho isso para EMA, WMA, AD e outros. Um desses indicadores AD é publicado no meu blog e você pode ver de lá qual é a estrutura básica da minha classe de indicadores em tempo real. Espero que você precise de pequenas mudanças para implementar o indicador SMA, porque é um dos mais simples. A lógica é simples. Para calcular SMA, tudo que você precisa é n últimos valores de preço. Assim, a instância da classe terá coleta de preços, que irá armazenar, mantenha apenas o último número de preços, conforme o SMA é definido (no seu caso 5). Então, quando você tiver um novo bar, você removerá o mais antigo e adicionará um novo e criará o cálculo. Quinta-feira, 10 de abril de 2008 4:04 PM Eu calcularia a média móvel no banco de dados através de um procedimento armazenado ou em um cubo. Você analisou o Analysis Services, tem a capacidade de calcular as médias móveis. Quinta-feira, 10 de abril de 2008 16:05 Sim. TA-LIB é bom, mas pode não ser adequado para mim. Quando eu adiciono valor novo ou valor atualizado para o histórico de registros, farei o cálculo em uma função separada somente para essa nova cotação e armazená-la no banco de dados. Estou planejando atualizar a cotação a cada hora. Preciso fazer cerca de 25 a 30 indicadores técnicos para 2200 ações. Quinta-feira, 10 de abril de 2008 5:51 PM O tempo de execução de uma chamada TA-Lib em uma série de 10000 elementos leva cerca de 15 milissegundos (em um Intel Core Duo 2.13 Ghz). Esta é a média de todas as funções. Entre os mais rápidos, a SMA leva menos de 2,5 milissegundos. O mais lento, HTTRENDMODE, leva 450 milissegundos. Com menos elementos é mais rápido. O SMA leva aproximadamente 0,22 milissegundos para 1000 elementos de entrada. O ganho de velocidade é quase linear (a sobrecarga da execução da função é insignificante). No contexto da sua aplicação, o TA-Lib é muito pouco provável que seja seu gargalo para o desempenho da velocidade. Também, geralmente, não recomendo essa solução quotlast nquot. Leia abaixo para detalhes. Primeiro, uma correção para a afirmação de Boban. s Todas as funções no TA-Lib também podem calcular um único último valor usando um mínimo de quotlast nquot elementos. Você pode ter uma matriz de tamanho 10000, ter dados inicializados apenas para os primeiros 500 elementos, adicionar um elemento e chamar TA-Lib para calcular o SMA apenas para o novo elemento. TA-Lib irá olhar para trás não mais do que o necessário (se SMA de 5, então TA-Lib calculará um único SMA usando os últimos 5 valores). Isso é possível com o parâmetro startIdx e endIdx. Você pode especificar um intervalo a ser calculado, ou um único valor. Nesse cenário, você faria startIdx endIdx 500 para calcular o elemento 501st. Por que é tão quotlast nquot solução potencialmente perigosa para alguns Independentemente de selecionar a solução Boban. s ou TA-Lib considerar que usando um pequeno número finito de dados passados ​​não funcionará bem com a maioria das funções TA. Com a SMA, é óbvio que você só precisa de n elemento para calcular um elemento médio sobre n. Não é tão simples com EMA (e muitas outras funções TA). O algo geralmente depende do valor anterior para calcular o novo valor. A função é recursiva. Isso significa que todos os valores passados ​​influenciam os valores futuros. Se você decidir quotlimitquot seu algo para usar apenas uma pequena quantidade de valor n passado, você não obterá o mesmo resultado que alguém que calcula sobre um grande número de valores passados. A solução é um compromisso entre velocidade e precisão. Muitas vezes, eu discuto isso no contexto da TA-Lib (eu chamo isso de quitação do período na documentação e no fórum). Para simplificar, a minha recomendação geral é se você não pode fazer a diferença entre um algo com uma resposta de impulso finito (FIR) de um algo com uma resposta de impulso infinito (IIR), você será mais seguro para calcular sobre todos os dados que você possui acessível. TA-Lib especifica no código qual das suas funções possui um período instável (IIR). Editado por mforcer sexta-feira, 15 de agosto de 2008 4:25 AM Oração correta em inglês sexta-feira, 15 de agosto de 2008 4:20 Não é certo da solução correta, porém, uma vez que somar a média de cada amostra apresentaria uma quantidade razoável de erro de arredondamento. Hmm. Eu me pergunto se separar a parte fracionária de toda a parte ajudaria. Divida toda a parte de cada número pela contagem. Mantenha três somas correntes: 1) A média das partes inteiras, 2) O restante de cada divisão, e 3) A parte fracionada de cada número. Cada vez que a parte inteira de um número é dividida, todo o resultado da peça é adicionado à soma de execução média e o restante é adicionado ao restante da soma em execução. Quando a soma de execução restante obtém um valor maior ou igual à contagem, é dividido pela contagem com o resultado da parte inteira adicionado à soma de execução média e o restante adicionado à soma de execução restante. Além disso, em cada cálculo, a parte fracionada é adicionada à soma de rotura fracionada. Quando a média é concluída, a soma de execução restante é dividida pela contagem e o resultado é adicionado à soma de execução média como um número flutuante. Por exemplo: agora o que fazer com a soma de fluxo fracionada. O perigo de transbordar é muito menos provável aqui, embora ainda seja possível, de modo que uma maneira de lidar com isso seria dividir a soma de execução fracionada pela contagem no final e adicioná-la ao nosso resultado: uma alternativa seria verificar a operação fracionada Soma em cada cálculo para ver se é maior ou igual a contar. Quando isso acontece, faça o mesmo que fazemos com o restante da soma corrente. Excelente Jomit Vaghela 6-Mar-07 21:00 Eu gostei do que você disse que pequenos empregos rapidamente se transformam em grandes empregos. Pensar na otimização enquanto a codificação é uma boa prática. Grande esforço e explicação, Obrigado Mike DiRenzo 5-Mar-07 16:26 Esta é a primeira vez que respondi a um de seus artigos. No entanto, sou um leitor muito ávido. Enquanto na faculdade, eu também tinha que calcular as médias móveis ponderadas e as simples. Heck, eu mesmo tive que criar alguns dos meus próprios algoritmos de média móvel em uma implementação de ERP personalizada há algum tempo, com base em algumas das mesmas fórmulas que aprendi nas Operações 101. Mas esta implementação, usando o Generics, supera em muito qualquer coisa em termos de otimização, Simplicidade e fraqueza direta. Muito obrigado por isso. Um dos seus muitos fãs, Em silêncio e silêncio, a verdade é esclarecida. Ewma gobgob 5-Mar-07 5:30 Se você tentar calcular uma média móvel simples, você deve manter uma coleção, o que é bastante complexo para uma tarefa tão simples. Como sobre o uso de uma ewma Suas 2 linhas de código, muito mais simples. Re: ewma Marc Clifton 5-Mar-07 5:47 Como sobre usar uma ewma idéia interessante. Para os leitores que não sabem o que é uma ewma, é uma média móvel ponderada exponencial. As pessoas são apenas notoriamente impossíveis. --DavidCrow Theres NÃO há desculpa para não comentar seu código. - John Simmons programador fora da lei Pessoas que dizem que vão refatorar seu código mais tarde para torná-lo bom não entender a refatoração, nem a arte e a arte da programação. - Josh Smith Re: ewma pwasser 5-Mar-07 13:21 Uma estimativa da média móvel se o tamanho do bin para a média móvel n for n pode ser obtido por: NewAverage ((((n-1) OldAverage) newValue) n This Funciona uma vez que o compartimento está cheio (número de exemplo n). O compartimento parcialmente cheio é frequentemente tratado usando um valor de semente para a média móvel inicial (OldAverage) e depois usando esse cálculo. Isso assume a distribuição normal de valores etc. Você esteve ocupado Colin Angus Mackay 4-Mar-07 12:37 Publicando dois artigos nesta noite. Bom trabalho, eu não sei como você faz isso. Eu tenho cerca de 4 ou 5 artigos a meio terminar e eu nunca parece encontrar o tempo para completá-los. Bem. Talvez se eu fiquei fora do salão, eu o gerenciei. Re: Você esteve ocupado Marc Clifton 4-Mar-07 14:25 Colin Angus Mackay escreveu: publicando dois artigos nesta noite. Ótimo trabalho Obrigado Eu estava realmente escrevendo o artigo sobre a média de corrida e percebi que a lista circular seria realmente um artigo autêntico muito bom. Além disso, eles são artigos leves. Posso arrancá-los muito rápido. É difícil pensar em coisas úteis, mas simples. Acontece que eu precisava dessas duas classes de qualquer maneira. As pessoas são apenas notoriamente impossíveis. --DavidCrow Theres NÃO há desculpa para não comentar seu código. - John Simmons programador fora da lei Pessoas que dizem que vão refatorar seu código mais tarde para torná-lo bom não entender a refatoração, nem a arte e a arte da programação. - Josh Smith Re: Você esteve ocupado JeffPClark 8-Mar-07 1:07 Pelo que eu li de Marc, ele provavelmente tem um programa que pode examinar um pedaço de código e explicar os detalhes intrincados e depois publicá-lo diretamente no Projeto de Código . Jeff Clark Systems Arquiteto JP Clark, INC. Columbus, Ohio Última Visita: 31-Dec-99 19:00 Última Atualização: 24-Jan-17 14:42 Geral Notícias Sugestão Pergunta Bug Answer Joke Praise Rant Admin Use CtrlLeftRight para mudar mensagens, CtrlUpDown para alternar threads, CtrlShiftLeftRight para mudar páginas.

No comments:

Post a Comment