Tuesday 14 January 2020

Moving average c sharp


Eu tenho uma quantidade de 4000 dados de stock 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 consigo calcular o SMA de 15 dias nos primeiros 14 dias, salte os primeiros 14 Dias e calcular o SMA no resto dos dados. E tem que estar usando o LINQ para realizar. Alguém pode dar uma amostra ou sugerir como usar o LINQ para calcular a média móvel. O resultado 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: 06072017 562,49 571,72 06082017 565,84 580,32 06112017 568,56 571,17 06122017 569,55 576,16 06132017 570,56 572,16 06142017 570,63 571,53 06152017 571,21 574,13 06182017 572,78 585,78 06192017 573,79 587,41 06202017 574,23 585,74 06212017 574,22 577,67 06222017 575,63 582,10 06252017 576,06 570,77 06262017 576,68 572,03 06272017 576,88 574.50 06282017 576.7 569.05 06292017 576.95 584.00 07022017 578.37 592.52 07032017 579.92 599.41 07032017 581.74 599.41 Editado por Leemx sexta-feira, 16 de novembro de 2017 2:59 Movido por Lisa Zhu Equipe de contingentes da Microsoft segunda-feira, 19 de novembro de 2017 7:38 am linq related (From : Visual C Geral) Sexta-feira, 16 de novembro de 2017 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 LINQ: Observe que isso não é extremamente eficiente, já que você basicamente itera sobre a lista de dados por cada valor no intervalo .. Ei, olha Este sistema permite assinaturas de mais de 60 cha Editado por Arno Brouwer sexta-feira, novembro 23, 2017 4:42 PM Marcado como resposta por Alexander Sun sexta-feira, 7 de dezembro de 2017 2:44 am sexta-feira, 23 de novembro de 2017 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 criando 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 LINQ: Observe que isso não é extremamente eficiente, já que você basicamente itera sobre a lista de dados por cada valor no intervalo .. Ei, olha Este sistema permite assinaturas de mais de 60 cha Editado por Arno Brouwer sexta-feira, novembro 23, 2017 4:42 PM Marcado como resposta por Alexander Sun Sexta-feira, 7 de dezembro de 2017 2:44 AM Sexta-feira, 23 de novembro de 2017 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. 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. Desejo 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 de acordo com data, preço e média móvel. Se eu tiver 500 registros e eu quero calcular a média móvel por 5 dias, qual é a maneira eficiente em vez de ir e voltar na matriz de Data e Preço, por favor, sugere qual é a melhor maneira de receber entrada (ArrayList, Table, array Etc) e retornar a saída. Nota: O mês de hoje de 5 dias será a 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 flexíveis 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 série de barras e retornará uma série de valores SMA. Mas se você receber um novo valor de 501-st, então você deve enviar novamente toda a matriz e TA-Lib novamente calculará e retornará o conjunto de valores do SMA. Agora imagine que você precisa desse indicador sobre alimentação de preço real e, para cada mudança de preço, você precisa de um novo valor de indicador. Se você tem um indicador não é um grande problema, mas se você tiver centenas de indicadores funcionando, 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 o SMA, tudo que você precisa é n últimos valores de preço. Então, 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 uma nova barra, você removerá o mais antigo e adicionará um novo e criará o cálculo. Quinta-feira, 10 de abril de 2008 4:04 PM 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 série de barras e retornará uma série de valores SMA. Mas se você receber um novo valor de 501-st, então você deve enviar novamente toda a matriz e TA-Lib novamente calculará e retornará o conjunto de valores do SMA. Agora imagine que você precisa desse indicador sobre alimentação de preço real e, para cada mudança de preço, você precisa de um novo valor de indicador. Se você tem um indicador não é um grande problema, mas se você tiver centenas de indicadores funcionando, 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 o SMA, tudo que você precisa é n últimos valores de preço. Então, 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 uma nova barra, 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 adicionar novo valor 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. Além disso, geralmente não recomendo essa solução quimica. 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 elements. Você pode ter uma matriz de tamanho 10000, ter dados inicializados somente para os primeiros 500 elementos, adicionar um elemento e chamar TA-Lib para calcular o SMA somente para o novo elemento. TA-Lib 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 essa solução quase não é potencialmente perigosa para alguns. Independentemente de selecionar a solução Boban. s ou TA-Lib, considere que usar um pequeno número finito de dados passados ​​não funcionará bem com a maioria das funções TA. Com o SMA, é óbvio que você só precisa do elemento n para calcular um elemento médio sobre n. Não é tão simples com EMA (e muitas outras funções TA). O algoritmo 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 passado n, você não obterá o mesmo resultado que alguém que calcula em 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 parcial 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 da frase de inglês correto sexta-feira, 15 de agosto de 2008 4:20

No comments:

Post a Comment