Sunday, 15 October 2017

Média Móvel Simples C #


Para obter um desempenho assintótico de O (n) (como a solução codificada manualmente), você poderia usar a função Agregação como em O valor acumulado (implementado como tipo anônimo) contém dois campos: O resultado contém a compilação da lista de resultados tão longe. O trabalho contém os últimos elementos do período 1. A função de agregação adiciona o valor atual à lista de Trabalho, cria a média atual e adiciona-a ao resultado e, em seguida, remove o primeiro valor (ou seja, o mais antigo) da lista de trabalho. A semente (ou seja, o valor inicial para a acumulação) é compilada colocando os primeiros elementos do período 1 em Trabalhando e inicializando o Resultado em uma lista vazia. Consequentemente, a agregação começa com o período do elemento (saltando (período 1) elementos no início) Na programação funcional, este é um padrão de uso típico para a função agravada (ou dobra), btw. A solução não é funcionalmente limpa na medida em que os mesmos objetos de lista (Trabalho e Resultado) são reutilizados em cada etapa. Não tenho certeza se isso possa causar problemas se alguns compiladores futuros tentarem paralelizar a função Agregação automaticamente (por outro lado, eu também não tenho certeza, se isso for possível depois de tudo). Uma solução puramente funcional deve criar novas listas em cada etapa. Observe também que C não possui expressões de lista poderosas. Em algum pseudocódigo hipotético Python-C-mixed pode-se escrever a função de agregação como a qual seria um pouco mais elegante na minha humilde opinião :) Observe o tempo de execução de O (n2). Uma vez que você precisa pular mais e mais elementos em cada etapa (e afaik Skip (i) tem que chamar IEnumerator. MoveNext i times). Veja a minha resposta para uma solução no tempo O (n). (Eu apenas notei o comentário OPs abaixo que heshe possivelmente obterá os valores de um SQL DB no futuro. Neste caso, eu iria desanimar cada uma dessas soluções) ndash MartinStettner Mar 3 11 às 0:53 Para a maneira mais eficiente possível Para calcular uma média móvel com LINQ, você não deve usar o LINQ Em vez disso, proponho criar uma classe auxiliar que calcula uma média móvel da maneira mais eficiente possível (usando um buffer circular e filtro médio causal), então um método de extensão para torná-lo acessível Para LINQ. Primeiro, a média móvel Esta classe fornece uma implementação muito rápida e leve de um filtro MovingAverage. Ele cria um buffer circular de comprimento N e calcula um som, um subtrair e um multiplicar por ponto de dados anexado, em oposição ao N multiplicação por ponto para a implementação de força bruta. Os métodos de extensão acima envolvem a classe MovingAverage e permitem a inserção em um fluxo IEnumerable. Para fazer isso de forma mais funcional, você precisa de um método de varredura que exista no Rx, mas não no LINQ. Vamos olhar como isso pareceria se você tivesse um método de varredura e heres o método de varredura, tomado e ajustado a partir daqui: Este deve ter melhor desempenho do que o método de força bruta, uma vez que estamos usando um total em execução para calcular o SMA. Para começar precisamos calcular o primeiro período que chamamos de semente aqui. Então, cada valor subseqüente calculamos a partir do valor da semente acumulada. Para fazer isso precisamos do valor antigo (isto é, t-delta) e do mais novo valor para o qual fazemos o conjunto da série, uma vez desde o início e uma vez deslocados pelo delta. No final, fazemos uma limpeza adicionando zeros para o comprimento do primeiro período e adicionando o valor de semente inicial. Respondeu 19 de junho 13 às 22: 58 A média móvel simples é uma média de dados calculada ao longo de um período de tempo. A média móvel é o indicador de preço mais popular usado nas análises técnicas. Esta média pode ser usada com qualquer preço incluindo Hi, Low, Open ou Close, e também pode ser aplicada a outros indicadores. Uma média móvel suaviza uma série de dados, que é muito importante em um mercado volátil, pois ajuda a identificar tendências significativas. Dundas Chart for Reporting Services possui quatro tipos de médias móveis, incluindo Simple, Exponential. Triangular. E Ponderado. A diferença mais importante entre as médias móveis acima é a forma como eles pesam seus pontos de dados. Recomendamos que você leia usando fórmulas financeiras antes de prosseguir. O uso de fórmulas financeiras fornece uma explicação detalhada sobre como usar fórmulas e também explica as várias opções disponíveis para você ao aplicar uma fórmula. FormulaFinancial (FinancialFormula. MovingAverage, 20, Series 1: Y2, Series 2: Y) Um gráfico de linha é uma boa opção ao exibir uma média móvel simples. Interpretação financeira: a média móvel é usada para comparar os preços de segurança com sua média móvel. O elemento mais importante usado no cálculo da média móvel é um período de tempo, que deve ser igual ao ciclo de mercado observado. A média móvel é um indicador de atraso, e sempre estará por trás do preço. Quando o preço segue uma tendência, a média móvel é muito próxima do preço de segurança. Quando um preço está subindo, a média móvel provavelmente permanecerá baixa devido à influência dos dados históricos. Cálculo: a média móvel é calculada utilizando a seguinte fórmula: na fórmula anterior o valor-n representa um período de tempo. Os períodos de tempo mais comuns são: 10 dias, 50 dias e 200 dias. Uma média móvel se move porque, à medida que cada novo ponto de dados é adicionado, o ponto de dados mais antigo é descartado. Uma média móvel simples dá igual peso a cada preço do ponto de dados. Este exemplo demonstra como calcular uma média móvel de 20 dias usando o método Formula. Eu tenho uma quantidade de 4000 dados de estoque e tring para calcular a média móvel para todos os valores de dados, mas como a média móvel é baseada em dados anteriores e não posso Calcule o SMA de 15 dias nos primeiros 14 dias, ignore os primeiros 14 dias e calcule o SMA no resto dos dados. E tem que estar usando LINQ para realizar. Alguém pode dar uma amostra ou sugerir como usar o LINQ para calcular a média móvel. A saída para os valores médios é de cerca de 500, eu realmente não entendo como é possível obter esse valor alto. Movendo averager com matriz somas: 06072012 562,49 571,72 06082012 565,84 580,32 06112012 568,56 571,17 06122012 569,55 576,16 06132012 570,56 572,16 06142012 570,63 571,53 06152012 571,21 574,13 06182012 572,78 585,78 06192012 573,79 587,41 06202012 574,23 585,74 06212012 574,22 577,67 06222012 575,63 582,10 06252012 576,06 570,77 06262012 576,68 572,03 06272012 576,88 574,50 06282012 576,7 569,05 06292012 576,95 584,00 07022012 578,37 592,52 07032012 579,92 599,41 07032012 581,74 599,41 Editado por Leemx sexta-feira, 16 de novembro de 2012 2:59 Movido por Lisa Zhu Equipe de contingentes da Microsoft segunda-feira, 19 de novembro de 2012 7:38 linq related (From : Visual C General) Sexta-feira, 16 de novembro de 2012 2:42 AM Para criar uma média móvel, eu começaria por criar um intervalo de 0 a (comprimento da lista de dados - comprimento do período de movimento), então para cada valor no intervalo Selecione elementos x a x 43 comprimento do período de movimento e calcule a média. Tudo em uma boa declaração do LINQ: note que isso não é extremamente eficiente, já que você basicamente itera sobre a lista de dados por cada valor no intervalo .. Ei, veja Este sistema permite assinaturas de mais de 60 cha Editado por Arno Brouwer sexta-feira, novembro 23, 2012 4:42 PM Marcado como resposta por Alexander Sun sexta-feira, 7 de dezembro de 2012 2:44 am sexta-feira, 23 de novembro de 2012 16:41 Todas as respostas Uma amostra da sua declaração LINQ ajudaria. Otimização do tempo é a raiz de todo o mal. Knuth Para criar uma média móvel, eu começaria por criar um intervalo de 0 a (comprimento da lista de dados - comprimento do período de movimento), então, para cada valor no intervalo, selecione os elementos x Para x 43 comprimento do período de movimento e calcular a média. Tudo em uma boa declaração do LINQ: note que isso não é extremamente eficiente, já que você basicamente itera sobre a lista de dados por cada valor no intervalo .. Ei, veja Este sistema permite assinaturas de mais de 60 cha Editado por Arno Brouwer sexta-feira, novembro 23, 2012 4:42 PM Marcado como resposta por Alexander Sun sexta-feira, 7 de dezembro de 2012 2:44 am Sexta-feira, 23 de novembro de 2012 16:41 A Microsoft está realizando uma pesquisa on-line para entender sua opinião sobre o site da Msdn. Se você optar por participar, a pesquisa on-line será apresentada quando você deixar o site Msdn. Você gostaria de participar? Ajude-nos a melhorar o MSDN. Visite a nossa página UserVoice para enviar e votar ideias Centros Dev Recursos de aprendizagem

No comments:

Post a Comment