Monday 24 July 2017

Média Móvel Simples C #


Médias móveis - médias simples e exponenciais Moving - simples e exponencial Introdução As médias móveis alisam os dados do preço para formar uma tendência que segue o indicador. Eles não prevêem a direção do preço, mas sim definir a direção atual com um atraso. As médias móveis são retardadas porque são baseadas em preços passados. Apesar desse atraso, as médias móveis ajudam a suavizar a ação dos preços e filtrar o ruído. Eles também formam os blocos de construção para muitos outros indicadores técnicos e sobreposições, como Bandas Bollinger. MACD eo Oscilador McClellan. Os dois tipos mais populares de médias móveis são a Média Móvel Simples (SMA) e a Média Móvel Exponencial (EMA). Essas médias móveis podem ser usadas para identificar a direção da tendência ou definir níveis potenciais de suporte e resistência. Here039s um gráfico com um SMA e um EMA nele: Cálculo simples da média móvel Uma média movente simples é dada forma computando o preço médio de uma segurança sobre um número específico dos períodos. A maioria das médias móveis são baseadas em preços de fechamento. Uma média móvel simples de 5 dias é a soma de cinco dias dos preços de fechamento dividida por cinco. Como seu nome indica, uma média móvel é uma média que se move. Os dados antigos são eliminados à medida que novos dados são disponibilizados. Isso faz com que a média se mova ao longo da escala de tempo. Abaixo está um exemplo de uma média móvel de 5 dias evoluindo ao longo de três dias. O primeiro dia da média móvel cobre simplesmente os últimos cinco dias. O segundo dia da média móvel cai o primeiro ponto de dados (11) e adiciona o novo ponto de dados (16). O terceiro dia da média móvel continua caindo o primeiro ponto de dados (12) e adicionando o novo ponto de dados (17). No exemplo acima, os preços aumentam gradualmente de 11 para 17 ao longo de um total de sete dias. Observe que a média móvel também aumenta de 13 para 15 ao longo de um período de cálculo de três dias. Observe também que cada valor de média móvel está logo abaixo do último preço. Por exemplo, a média móvel para o dia um é igual a 13 eo último preço é 15. Os preços dos quatro dias anteriores eram mais baixos e isso faz com que a média móvel fique atrasada. Cálculo da média móvel exponencial As médias móveis exponenciais reduzem o desfasamento aplicando mais peso aos preços recentes. A ponderação aplicada ao preço mais recente depende do número de períodos na média móvel. Há três etapas para calcular uma média móvel exponencial. Primeiro, calcule a média móvel simples. Uma média móvel exponencial (EMA) tem que começar em algum lugar assim que uma média móvel simples é usada como o EMA anterior do período anterior no primeiro cálculo. Em segundo lugar, calcular o multiplicador de ponderação. Em terceiro lugar, calcule a média móvel exponencial. A fórmula abaixo é para um EMA de 10 dias. Uma média móvel exponencial de 10 períodos aplica uma ponderação de 18,18 ao preço mais recente. Um EMA de 10 períodos também pode ser chamado de EMA 18.18. Um EMA de 20 períodos aplica uma ponderação de 9,52 ao preço mais recente (2 / (201) .0952). Observe que a ponderação para o período de tempo mais curto é mais do que a ponderação para o período de tempo mais longo. De fato, a ponderação cai pela metade cada vez que o período de média móvel dobra. Se você deseja uma porcentagem específica para uma EMA, use esta fórmula para convertê-la em períodos de tempo e, em seguida, insira esse valor como o parâmetro EMA039s: Abaixo está um exemplo de planilha de uma média móvel simples de 10 dias e um valor de 10- Dia média móvel exponencial para a Intel. As médias móveis simples são diretas e exigem pouca explicação. A média de 10 dias simplesmente se move conforme novos preços se tornam disponíveis e os preços antigos caem. A média móvel exponencial começa com o valor da média móvel simples (22,22) no primeiro cálculo. Após o primeiro cálculo, a fórmula normal assume o controle. Como um EMA começa com uma média móvel simples, seu valor verdadeiro não será realizado até 20 ou mais períodos mais tarde. Em outras palavras, o valor na planilha do Excel pode diferir do valor do gráfico por causa do curto período de retorno. Esta planilha só remonta 30 períodos, o que significa que o afeto da média móvel simples teve 20 períodos para se dissipar. StockCharts volta pelo menos 250 períodos (geralmente muito mais) para os seus cálculos para que os efeitos da média móvel simples no primeiro cálculo totalmente dissipada. O fator de Lag Quanto maior a média móvel, mais o lag. Uma média móvel exponencial de 10 dias abraçará os preços muito de perto e virará logo após os preços virarem. Curtas médias móveis são como barcos de velocidade - ágil e rápido para mudar. Em contraste, uma média móvel de 100 dias contém muitos dados passados ​​que o desaceleram. As médias móveis mais longas são como os petroleiros do oceano - lethargic e lentos mudar. É preciso um movimento de preços maior e mais longo para uma média móvel de 100 dias para mudar de rumo. O gráfico acima mostra o SampP 500 ETF com uma EMA de 10 dias seguindo de perto os preços e uma moagem SMA de 100 dias mais alta. Mesmo com o declínio de janeiro-fevereiro, a SMA de 100 dias manteve o curso e não recusou. O SMA de 50 dias se encaixa em algum lugar entre as médias móveis de 10 e 100 dias quando se trata do fator de latência. Simples vs médias exponenciais Moving Embora existam diferenças claras entre médias móveis simples e médias móveis exponenciais, um não é necessariamente melhor do que o outro. As médias móveis exponenciais têm menos atraso e são, portanto, mais sensíveis aos preços recentes - e às recentes mudanças nos preços. As médias móveis exponenciais virarão antes de médias móveis simples. As médias móveis simples, por outro lado, representam uma verdadeira média de preços para todo o período de tempo. Como tal, as médias móveis simples podem ser mais adequadas para identificar níveis de suporte ou resistência. Preferência média móvel depende de objetivos, estilo analítico e horizonte de tempo. Chartists deve experimentar com ambos os tipos de médias móveis, bem como diferentes prazos para encontrar o melhor ajuste. O gráfico abaixo mostra a IBM com a SMA de 50 dias em vermelho ea EMA de 50 dias em verde. Ambos atingiram o pico no final de janeiro, mas o declínio no EMA foi mais nítida do que o declínio no SMA. A EMA apareceu em meados de fevereiro, mas a SMA continuou baixa até o final de março. Observe que a SMA apareceu mais de um mês após a EMA. Comprimentos e prazos A duração da média móvel depende dos objetivos analíticos. Curtas médias móveis (5-20 períodos) são mais adequados para as tendências de curto prazo e de negociação. Os cartistas interessados ​​em tendências de médio prazo optariam por médias móveis mais longas que poderiam estender 20-60 períodos. Investidores de longo prazo preferem médias móveis com 100 ou mais períodos. Alguns comprimentos de média móvel são mais populares do que outros. A média móvel de 200 dias é talvez a mais popular. Devido ao seu comprimento, esta é claramente uma média móvel a longo prazo. Em seguida, a média móvel de 50 dias é bastante popular para a tendência de médio prazo. Muitos chartists usam as médias móveis de 50 dias e de 200 dias junto. Curto prazo, uma média móvel de 10 dias foi bastante popular no passado porque era fácil de calcular. Um simplesmente adicionou os números e moveu o ponto decimal. Identificação de tendências Os mesmos sinais podem ser gerados usando médias móveis simples ou exponenciais. Como mencionado acima, a preferência depende de cada indivíduo. Esses exemplos abaixo usarão médias móveis simples e exponenciais. O termo média móvel se aplica a médias móveis simples e exponenciais. A direção da média móvel transmite informações importantes sobre os preços. Uma média móvel em ascensão mostra que os preços estão aumentando. Uma média móvel em queda indica que os preços, em média, estão caindo. A subida da média móvel de longo prazo reflecte uma tendência de alta a longo prazo. A queda da média móvel a longo prazo reflecte uma tendência de baixa a longo prazo. O gráfico acima mostra 3M (MMM) com uma média móvel exponencial de 150 dias. Este exemplo mostra quão bem as médias móveis funcionam quando a tendência é forte. A EMA de 150 dias recusou-se em novembro de 2007 e novamente em janeiro de 2008. Observe que foi necessário um declínio de 15 para reverter a direção dessa média móvel. Estes indicadores de atraso identificam inversões de tendência à medida que ocorrem (na melhor das hipóteses) ou depois de ocorrerem (na pior das hipóteses). MMM continuou menor em março de 2009 e, em seguida, subiu 40-50. Observe que a EMA de 150 dias não apareceu até depois desse aumento. Uma vez que o fez, no entanto, MMM continuou maior nos próximos 12 meses. As médias móveis trabalham brilhantemente em tendências fortes. Crossovers duplos Duas médias móveis podem ser usadas juntas para gerar sinais cruzados. Na Análise Técnica dos Mercados Financeiros. John Murphy chama isso de método de cruzamento duplo. Os cruzamentos duplos envolvem uma média móvel relativamente curta e uma média móvel relativamente longa. Como com todas as médias móveis, o comprimento geral da média móvel define o prazo para o sistema. Um sistema que utilizasse um EMA de 5 dias e um EMA de 35 dias seria considerado de curto prazo. Um sistema usando uma SMA de 50 dias e um SMA de 200 dias seria considerado de médio prazo, talvez até de longo prazo. Um crossover de alta ocorre quando a média móvel mais curta cruza acima da média móvel mais longa. Isso também é conhecido como uma cruz de ouro. Um crossover de baixa ocorre quando a média móvel mais curta cruza abaixo da média móvel mais longa. Isso é conhecido como uma cruz morta. Os crossovers médios móveis produzem sinais relativamente atrasados. Afinal, o sistema emprega dois indicadores de atraso. Quanto mais longos os períodos de média móvel, maior o atraso nos sinais. Esses sinais funcionam muito bem quando uma boa tendência se apodera. No entanto, um sistema de crossover média móvel vai produzir lotes de Whipsaws na ausência de uma forte tendência. Há também um método de crossover triplo que envolve três médias móveis. Mais uma vez, um sinal é gerado quando a média móvel mais curta atravessa as duas médias móveis mais longas. Um simples sistema de crossover triplo pode envolver médias móveis de 5 dias, 10 dias e 20 dias. O gráfico acima mostra Home Depot (HD) com um EMA de 10 dias (linha pontilhada verde) e EMA de 50 dias (linha vermelha). A linha preta é o fechamento diário. Usando um crossover média móvel teria resultado em três whipsaws antes de pegar um bom comércio. O EMA de 10 dias quebrou abaixo do EMA de 50 dias em outubro atrasado (1), mas este não durou por muito tempo enquanto os 10 dias se moveram para trás acima em novembro meados de (2). Este cruzamento durou mais, mas o próximo crossover de baixa em janeiro (3) ocorreu perto dos níveis de preços de novembro, resultando em outra whipsaw. Esta cruz bearish não durou por muito tempo enquanto o EMA de 10 dias moveu para trás acima dos 50 dias alguns dias mais tarde (4). Depois de três sinais ruins, o quarto sinal prefigurou um movimento forte como o estoque avançou mais de 20. Existem dois takeaways aqui. Primeiramente, os crossovers são prone ao whipsaw. Um filtro de preço ou tempo pode ser aplicado para ajudar a evitar whipsaws. Os comerciantes podem exigir que o crossover durar 3 dias antes de agir ou exigir a EMA de 10 dias para mover acima / abaixo do EMA de 50 dias por um determinado montante antes de agir. Em segundo lugar, o MACD pode ser usado para identificar e quantificar esses cruzamentos. MACD (10,50,1) mostrará uma linha representando a diferença entre as duas médias móveis exponenciais. MACD torna-se positivo durante uma cruz de ouro e negativo durante uma cruz morta. O Oscilador de Preço Percentual (PPO) pode ser usado da mesma forma para mostrar diferenças percentuais. Observe que o MACD e o PPO são baseados em médias móveis exponenciais e não coincidirão com médias móveis simples. Este gráfico mostra Oracle (ORCL) com a EMA de 50 dias, EMA de 200 dias e MACD (50,200,1). Havia quatro crossovers de média móvel durante um período de 2 1/2 anos. Os três primeiros resultaram em whipsaws ou maus negócios. Uma tendência sustentada começou com o quarto crossover como ORCL avançado para os 20s meados. Mais uma vez, os crossovers de média móvel funcionam muito bem quando a tendência é forte, mas produzem perdas na ausência de uma tendência. Crossovers de preço As médias móveis também podem ser usadas para gerar sinais com crossovers de preços simples. Um sinal de alta é gerado quando os preços se movem acima da média móvel. Um sinal de baixa é gerado quando os preços se movem abaixo da média móvel. Os crossovers do preço podem ser combinados para negociar dentro da tendência mais grande. A média móvel mais longa define o tom para a tendência maior e a média móvel mais curta é usada para gerar os sinais. Um olharia para cruzes de preço de alta somente quando os preços já estão acima da média móvel mais longa. Isso seria negociar em harmonia com a maior tendência. Por exemplo, se o preço estiver acima da média móvel de 200 dias, os chartistas só se concentrarão nos sinais quando o preço se mover acima da média móvel de 50 dias. Obviamente, um movimento abaixo da média móvel de 50 dias precederia tal sinal, mas tais cruzamentos de baixa seriam ignorados porque a tendência maior está para cima. Uma cruz bearish sugeriria simplesmente um pullback dentro de um uptrend mais grande. Uma volta cruzada acima da média móvel de 50 dias indicaria uma subida dos preços e continuação da maior tendência de alta. O gráfico seguinte mostra a Emerson Electric (EMR) com a EMA de 50 dias e a EMA de 200 dias. O estoque movido acima e realizada acima da média móvel de 200 dias em agosto. Houve mergulhos abaixo dos 50 dias EMA no início de novembro e novamente no início de fevereiro. Os preços recuaram rapidamente acima dos 50 dias EMA para fornecer sinais de alta (setas verdes) em harmonia com a maior tendência de alta. MACD (1,50,1) é mostrado na janela do indicador para confirmar cruzamentos de preços acima ou abaixo do EMA de 50 dias. O EMA de 1 dia é igual ao preço de fechamento. MACD (1,50,1) é positivo quando o fechamento está acima do EMA de 50 dias e negativo quando o fechamento está abaixo do EMA de 50 dias. Suporte e Resistência As médias móveis também podem atuar como suporte em uma tendência de alta e resistência em uma tendência de baixa. Uma tendência de alta de curto prazo pode encontrar suporte perto da média móvel simples de 20 dias, que também é usada em Bandas de Bollinger. Uma tendência de alta de longo prazo pode encontrar apoio perto da média móvel simples de 200 dias, que é a média móvel mais popular a longo prazo. Se fato, a média móvel de 200 dias pode oferecer suporte ou resistência simplesmente porque é tão amplamente utilizado. É quase como uma profecia auto-realizável. O gráfico acima mostra o NY Composite com a média móvel simples de 200 dias de meados de 2004 até o final de 2008. Os 200 dias fornecidos suportam várias vezes durante o avanço. Uma vez que a tendência reverteu com uma quebra de apoio superior dupla, a média móvel de 200 dias agiu como resistência em torno de 9500. Não espere suporte exato e níveis de resistência de médias móveis, especialmente as médias móveis mais longas. Os mercados são impulsionados pela emoção, o que os torna propensos a superações. Em vez de níveis exatos, as médias móveis podem ser usadas para identificar zonas de suporte ou de resistência. Conclusões As vantagens de usar médias móveis precisam ser ponderadas contra as desvantagens. As médias móveis são a tendência que segue, ou retardar, os indicadores que serão sempre um passo atrás. Isso não é necessariamente uma coisa ruim embora. Afinal, a tendência é o seu amigo e é melhor para o comércio na direção da tendência. As médias móveis asseguram que um comerciante está em linha com a tendência atual. Mesmo que a tendência é seu amigo, os títulos gastam uma grande quantidade de tempo em intervalos de negociação, o que torna as médias móveis ineficazes. Uma vez em uma tendência, as médias móveis mantê-lo-ão dentro, mas dar também sinais atrasados. Don039t esperam vender no topo e comprar na parte inferior usando médias móveis. Tal como acontece com a maioria das ferramentas de análise técnica, médias móveis não devem ser utilizados por conta própria, mas em conjunto com outras ferramentas complementares. Os cartistas podem usar médias móveis para definir a tendência geral e, em seguida, usar RSI para definir overbought ou oversold níveis. Adicionando médias móveis para gráficos StockCharts As médias móveis estão disponíveis como um recurso de sobreposição de preço na bancada do SharpCharts. Usando o menu suspenso Sobreposições, os usuários podem escolher uma média móvel simples ou uma média móvel exponencial. O primeiro parâmetro é usado para definir o número de períodos de tempo. Um parâmetro opcional pode ser adicionado para especificar qual campo de preço deve ser usado nos cálculos - O para o Open, H para o Alto, L para o Baixo e C para o Close. Uma vírgula é usada para separar os parâmetros. Outro parâmetro opcional pode ser adicionado para deslocar as médias móveis para a esquerda (passado) ou para a direita (futuro). Um número negativo (-10) deslocaria a média móvel para a esquerda 10 períodos. Um número positivo (10) deslocaria a média móvel para o direito 10 períodos. Múltiplas médias móveis podem ser superados o preço parcela simplesmente adicionando outra linha de superposição para a bancada. Os membros do StockCharts podem alterar as cores eo estilo para diferenciar entre várias médias móveis. Depois de selecionar um indicador, abra Opções Avançadas clicando no pequeno triângulo verde. As Opções Avançadas também podem ser usadas para adicionar uma sobreposição média móvel a outros indicadores técnicos como RSI, CCI e Volume. Clique aqui para um gráfico ao vivo com várias médias móveis diferentes. Usando Médias Móveis com Varreduras StockCharts Aqui estão alguns exemplos de varreduras que os membros da StockCharts podem usar para varrer para várias situações de média móvel: Bullish Moving Average Cross: Esta varredura procura ações com uma média móvel em ascensão de 150 dias simples e uma linha de alta dos 5 EMA de dia e EMA de 35 dias. A média móvel de 150 dias está subindo, desde que ela esteja negociando acima de seu nível cinco dias atrás. Um cruzamento de alta ocorre quando o EMA de 5 dias se move acima do EMA de 35 dias acima do volume médio. Bearish Moving Average Cross: Esta pesquisa procura por ações com uma queda de 150 dias de média móvel simples e uma cruz de baixa dos 5 dias EMA e 35 dias EMA. A média móvel de 150 dias está caindo enquanto ela está negociando abaixo de seu nível cinco dias atrás. Uma cruz de baixa ocorre quando a EMA de 5 dias se move abaixo da EMA de 35 dias acima do volume médio. Estudo adicional O livro de John Murphy tem um capítulo dedicado a médias móveis e seus vários usos. Murphy abrange os prós e os contras de médias móveis. Além disso, Murphy mostra como as médias móveis funcionam com Bollinger Bands e sistemas de negociação baseados em canais. Análise Técnica dos Mercados Financeiros John MurphyI quer desenvolver cálculo para a média móvel de preço das ações. Mas muitos cálculos complexos foram planejados mais tarde. Meu primeiro passo para saber como calcular a média móvel de forma eficiente. Eu preciso saber como tomar a entrada e retorno de saída de forma eficiente. Considerado data e preço de entrada. Data, Preço e Média Móvel. Se eu tiver 500 registros e eu quero calcular média móvel por 5 dias o que é a maneira effient em vez de ir para a frente e para trás na matriz de data e preço novamente sugerir o que é a melhor maneira de receber entrada (ArrayList, Table, array Etc) e retorno de saída. Nota: MA de hoje de 5 dias será média dos últimos 5 dias incluindo preço de hoje. Ontem MA será média dos últimos 5 dias de ontem. Eu quero manter os dias para ser flexível em vez de 5 ele poderia ser 9, 14, 20 etc Se você precisa de cálculo simples sem o seu esforço do que você pode usar TA-Lib. Mas se você quiser 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 é grande, mas o problema é que esta biblioteca tem apenas métodos estáticos. Isso significa que quando você precisa calcular os valores da matriz SMA com base em barras de preço de 500, então você enviará toda a matriz de barras e ele retornará matriz de valores SMA. Mas se você receber novo valor 501-st, então você deve enviar novamente toda a matriz e TA-Lib novamente calculará e retornará SMA matriz de valores. Agora imagine que você precisa desse indicador no feed de preços reais, 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 de trabalho, que poderia 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 a barra de preço alterado apenas. Unfortunatelly Eu nunca precisei SMA indicador para os meus sistemas de negociação, mas eu tenho tal para EMA, WMA, AD, e outros. Um desses indicadores AD é publicado no meu blog e você pode ver a partir daí o que é a estrutura básica da minha classe indicador em tempo real. Espero que você vai precisar de pequenas mudanças para implementar SMA indicador, porque é um dos mais simples. A lógica é simples. Para calcular SMA tudo que você precisa é n últimos preços. Assim classe instância terá coleta de preços, que irá armazenar manter apenas último n número de preços como SMA é definido (no seu caso 5). Então, quando você tem um novo bar, você removerá o mais antigo e adicionará um novo e criará um 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 eu acho. Weve usou-o no ambiente da produção e é muito eficiente e realible. 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 TA-Lib. Mas se você quiser 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 é grande, mas o problema é que esta biblioteca tem apenas métodos estáticos. Isso significa que quando você precisa calcular os valores da matriz SMA com base em barras de preço de 500, então você enviará toda a matriz de barras e ele retornará matriz de valores SMA. Mas se você receber novo valor 501-st, então você deve enviar novamente toda a matriz e TA-Lib novamente calculará e retornará SMA matriz de valores. Agora imagine que você precisa desse indicador no feed de preços reais, 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 de trabalho, que poderia 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 a barra de preço alterado apenas. Unfortunatelly Eu nunca precisei SMA indicador para os meus sistemas de negociação, mas eu tenho tal para EMA, WMA, AD, e outros. Um desses indicadores AD é publicado no meu blog e você pode ver a partir daí o que é a estrutura básica da minha classe indicador em tempo real. Espero que você vai precisar de pequenas mudanças para implementar SMA indicador, porque é um dos mais simples. A lógica é simples. Para calcular SMA tudo que você precisa é n últimos preços. Assim classe instância terá coleta de preços, que irá armazenar manter apenas último n número de preços como SMA é definido (no seu caso 5). Então, quando você tem um novo bar, você removerá o mais antigo e adicionará um novo e criará um cálculo. Quinta-feira, 10 de abril de 2008 16:04 Eu calcularia a média móvel no banco de dados por meio de um procedimento armazenado ou em um cubo. Você já olhou no Analysis Services, ele tem a capacidade de calcular 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 vou fazer o cálculo em uma função separada apenas para essa nova cotação e armazená-lo no banco de dados. Estou planejando atualizar a cotação a cada hora. Eu preciso fazer cerca de 25 a 30 indicadores técnicos para 2200 ações. Quinta-feira, 10 de abril de 2008 17:51 Tempo de execução de uma chamada TA-Lib em uma matriz 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, SMA leva menos de 2,5 milissegundos. O mais lento, HTTRENDMODE, leva 450 milissegundos. Com menos elementos é mais rápido. SMA leva cerca de 0,22 milissegundos para 1000 elementos de entrada. O ganho de velocidade é quase linear (a sobrecarga de realização da chamada de função é desprezível). No contexto de sua aplicação, TA-Lib é muito improvável que seja seu gargalo para desempenho de velocidade. Também eu geralmente não recomendo essa solução nquot quotlast. Leia abaixo para mais detalhes. Primeiro, uma correção para Boban. s declaração Todas as funções em TA-Lib também pode calcular um único último valor usando um mínimo de quotlast nquot elementos. Você pode ter uma matriz de tamanho 10000, ter dados inicializar apenas para os primeiros 500 elementos, adicionar um elemento e chamar TA-Lib para calcular o SMA somente para o novo elemento. TA-Lib vai olhar para trás não mais do que o necessário (se SMA de 5, em seguida, TA-Lib irá 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. Neste cenário, você faria startIdx endIdx 500 para calcular o elemento 501st. Por que essa solução quotlast nquot é potencialmente perigosa para alguns Independentemente da escolha da solução Boban. s ou TA-Lib consideram que usar um pequeno número finito de dados passados ​​não funcionará bem com a maioria das funções TA. Com SMA, é óbvio que você só precisa de elemento n para calcular uma média sobre o elemento 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 passado n valor, você não obterá o mesmo resultado como alguém que calcula sobre um grande número de valores passados. A solução é um compromisso entre velocidade e precisão. Muitas vezes discuti isso no contexto de TA-Lib (chamo-o o período quotunstable na documentação e fórum). Para mantê-lo simples, 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 infinita (IIR), você será mais seguro para calcular todos os dados que você tem disponível. TA-Lib especifica no código qual das suas funções tem um período instável (IIR). 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 desde a mudança Média é baseada em dados anteriores e eu não posso calcular o SMA de 15 dias para os primeiros 14 dias, ignorar os primeiros 14 dias e calcular o SMA sobre o resto dos dados. E é preciso usar o LINQ para realizar. Alguém pode dar uma amostra ou sugestão de como usar o LINQ para calcular a média móvel A saída para os valores médios são todos em torno de 500s eu realmente não entendo como é que é possível obter esse valor elevado. Movendo o averager com o arranjo das somas: 06/07/2012 562.49 571.72 06/08/2012 565.84 580.32 06/11/2012 568.56 571.17 06/12/2012 569.55 576.16 13.06.2012 570.56 572.16 14.06.2012 570.63 571.53 06 / 15/2012 571,21 574,13 18/06/2012 572,78 585,78 19/06/2012 573,79 587,41 20/06/2012 574,23 585,74 21/06/2012 574,22 577,67 22/06/2012 575,63 582,10 25/06/2012 576,06 570,77 06/26 / 2012 576,68 572,03 27/06/2012 576,88 574,50 28/06/2012 576,7 569,05 06/29/2012 576,95 584,00 07/02/2012 578,37 592,52 07/03/2012 579,92 599,41 07/03/2012 581,74 599,41 Editado por Leemx Sexta-feira , 16 de novembro de 2012 2:59 AM Movido por Lisa Zhu Pessoal contingente da Microsoft Monday, November 19, 2012 7:38 AM linq related (De: Visual C Geral) sexta-feira, 16 de novembro de 2012 2:42 Para criar uma média móvel , Eu começaria criando uma escala de 0 a (comprimento da lista de dados - comprimento do período movente), então para cada valor na escala selecione elementos x a x 43 comprimento do período movente e calcule a média. Tudo em uma declaração LINQ agradável: Note que isso não é extremamente eficiente, uma vez que basicamente iterar sobre a lista de dados para cada valor no intervalo .. Hey, olha 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 sexta-feira, 23 de novembro de 2012 16:41 Todas as respostas Um exemplo de sua instrução LINQ ajudaria. Para criar uma média móvel, eu começaria criando um intervalo de 0 a (comprimento da lista de dados - duração do período em movimento), então para cada valor no intervalo selecionar elementos x Para x 43 duração do período móvel e calcular a média. Tudo em uma declaração LINQ agradável: Note que isso não é extremamente eficiente, uma vez que basicamente iterar sobre a lista de dados para cada valor no intervalo .. Hey, olha 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, 07 de dezembro de 2012 2:44 sexta-feira, 23 de novembro de 2012 16:41 Microsoft está conduzindo uma pesquisa on-line para entender sua opinião sobre o site Msdn. Se você optar por participar, o questionário on-line será apresentado a você 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 em ideasIm não certeza da solução correta, embora uma vez que somar a média de cada amostra iria introduzir uma quantidade razoável de erro de arredondamento. Hmm. Gostaria de saber se seperating a parte fracionária de toda a parte iria ajudar. Divida a parte inteira de cada número pela contagem. Manter três somas correntes: 1) A média das partes inteiras, 2) O restante de cada divisão, e 3) A parte fracionária de cada número. Cada vez que a parte inteira de um número é dividida, o resultado da parte inteira é adicionado à soma corrente média e o restante é adicionado à soma corrente restante. Quando a soma corrente restante obtém um valor maior ou igual à contagem, a sua divisão pela contagem com o resultado da parte inteira adicionada à soma média corrente e o restante adicionado à soma restante em curso. Também, em cada cálculo, a parte fracionária é adicionada à soma de corrida fracionária. Quando a média é terminada, a soma corrente restante é dividida pela contagem e o resultado é adicionado à soma média corrente como um número flutuante. Por exemplo: Agora o que fazer com a soma de execução fracionada. O perigo de estouro é muito menos provável aqui, embora ainda possível, então uma maneira de lidar com isso seria dividir a soma de execução fracionária pela contagem no final e adicioná-lo ao nosso resultado: Uma alternativa seria verificar a execução fracionária Soma em cada cálculo para ver se ele é maior ou igual a contar. Quando isso acontece, basta fazer a mesma coisa que fazemos com o restante executando soma. Excelente Jomit Vaghela 6-Mar-07 20:00 Eu gostei do que você disse pequenos trabalhos rapidamente se transformar em grandes empregos. Pensar em otimização durante a codificação é uma boa prática. Grande esforço e explicação, Obrigado Mike DiRenzo 5-Mar-07 15:26 Esta é a primeira vez que respondi a um de seus artigos. No entanto, sou um leitor muito ávido. Enquanto na faculdade, eu tinha que computar médias móveis ponderadas e simples também. Heck, eu mesmo tive que criar alguns dos meus próprios algoritmos de média móvel em uma implementação de ERP personalizado há algum tempo com base em algumas das mesmas fórmulas que eu aprendi em operações 101. Mas esta implementação, usando Generics, supera em muito qualquer coisa em termos de otimização, Simplicidade, e frescura direita darn. Muito obrigado por isso. Um de seus muitos fãs, Em silêncio e silêncio, a verdade fica clara. Ewma gobgob 5-Mar-07 4:30 Se você tentar calcular uma média móvel simples, você tem que manter uma coleção, o que é bastante complexo para uma tarefa tão simples. Como sobre o uso de um ewma Suas 2 linhas de código, muito mais simples. Alfa exp (-elapsedTimeSinceLastValue) ewma alfa ewma (1-alfa) newValue Re: ewma Marc Clifton 5-Mar-07 4:47 Como sobre o uso de um ewma Ideia interessante. Para os leitores que não sabem o que é um ewma, é um Exponential Weighted Moving Average. As pessoas são apenas notoriamente impossíveis. --DavidCrow Theres NENHUMA desculpa para não comentar seu código. - John Simmons / programador proscrito As pessoas que dizem que refatorarão seu código mais tarde para torná-lo bom não entendem refatoração, nem a arte eo ofício de programação. - Josh Smith Re: ewma pwasser 5-Mar-07 12:21 Uma estimativa da média móvel se o tamanho do bin para a média móvel for n pode ser obtido por: NewAverage (((n-1) OldAverage) newValue) / n Isso funciona uma vez que a caixa está cheia (número de amostra n). O compartimento parcialmente cheio é muitas vezes tratado usando um valor de semente para a média móvel inicial (OldAverage) e, em seguida, usando esse cálculo. Isso pressupõe uma distribuição normal de valores etc. Você foi ocupado Colin Angus Mackay 4-Mar-07 11:37 Postando dois artigos nesta noite. Grande trabalho eu não sei como você faz isso. Ive tem cerca de 4 ou 5 artigos metade terminou e eu só nunca parecem encontrar o tempo para completá-los. Bem. Talvez se eu ficasse fora do salão, eu conseguiria. Re: Youve sido ocupado Marc Clifton 4-Mar-07 13:25 Colin Angus Mackay escreveu: Postando dois artigos esta noite. Grande trabalho Obrigado, eu estava realmente escrevendo o artigo sobre a média correndo e percebi que a lista circular seria realmente um artigo stand-alone realmente bom. Além disso, eles são artigos leves. Posso fazer isso rapidamente. É apenas difícil de 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 NENHUMA desculpa para não comentar seu código. - John Simmons / programador proscrito As pessoas que dizem que refatorarão seu código mais tarde para torná-lo bom não entendem refatoração, nem a arte eo ofício de programação. - Josh Smith Re: Youve sido ocupado JeffPClark 8-Mar-07 0: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, em seguida, publicá-lo diretamente para o projeto de código . Jeff Clark Arquiteto Arquiteto JP Clark, INC. Columbus, Ohio Última Atualização: 13-Out-16 11:17 Notícias Gerais Sugestão Pergunta Erro Resposta Joke Praise Rant Admin Use CtrlLeft / Right para mudar Mensagens, CtrlUp / Abaixo para alternar segmentos, CtrlShiftLeft / Direita para alternar páginas. Médias / Média móvel simples Médias / Média móvel simples Você é encorajado a resolver esta tarefa de acordo com a descrição da tarefa, usando qualquer idioma que você conheça. Calculando a média móvel simples de uma série de números. Criar uma função stateful / classe / instância que leva um período e retorna uma rotina que leva um número como argumento e retorna uma média móvel simples de seus argumentos até agora. Uma m�ia m�el simples �um m�odo para calcular uma m�ia de um fluxo de n�eros calculando apenas a m�ia dos �timos n�eros de 160 P 160 a partir do fluxo 160, em que 160 P 160 �conhecido como o per�do. Ele pode ser implementado chamando uma rotina de iniciação com 160 P 160 como argumento, 160 I (P), 160 que deve retornar uma rotina que, quando chamada com membros individuais, sucessivos de um fluxo de números, calcula a média de Para), os últimos 160 P 160 deles, vamos chamar este 160 SMA (). A palavra 160 estado 160 na descrição da tarefa refere-se à necessidade de 160 SMA () 160 lembrar determinadas informações entre as chamadas para ele: 160 O período, 160 P 160 Um recipiente ordenado de pelo menos os últimos 160 P 160 números de cada um dos Suas chamadas individuais. Stateful 160 também significa que chamadas sucessivas para 160 I (), 160 o inicializador, 160 devem retornar rotinas separadas que não 160 não compartilham o estado salvo para que possam ser usadas em dois fluxos de dados independentes. Pseudo-código para uma implementação de 160 SMA 160 é: Esta versão usa uma fila persistente para conter os valores p mais recentes. Cada função retornada de init-moving-average tem seu estado em um átomo contendo um valor de fila. Esta implementação usa uma lista circular para armazenar os números dentro da janela no início de cada ponteiro de iteração refere-se à célula de lista que mantém o valor apenas movendo para fora da janela e para ser substituído com o valor apenas adicionado. Usando um fechamento editar Atualmente este sma não pode ser nogc porque ele aloca um encerramento no heap. Alguma análise de escape pode remover a alocação de heap. Usando uma edição de estrutura Esta versão evita a alocação de heap do fechamento mantendo os dados no quadro de pilha da função principal. Mesmo resultado: Para evitar que as aproximações de ponto flutuante sigam se acumulando e crescendo, o código poderia executar uma soma periódica em toda a matriz de filas circulares. Esta implementação produz dois estados de compartilhamento de objetos (função). É idiomático em E separar a entrada da saída (ler a partir da escrita) em vez de combiná-los em um objeto. A estrutura é a mesma que a implementação do Desvio PadrãoE. O programa elixir abaixo gera uma função anônima com um período embutido p, que é usado como o período da média móvel simples. A função de execução lê entrada numérica e passa para a função anônima recém-criada e, em seguida, inspeciona o resultado para STDOUT. A saída é mostrada abaixo, com a média, seguida pela entrada agrupada, formando a base de cada média móvel. Erlang tem fechamentos, mas variáveis ​​imutáveis. Uma solução então é usar processos e uma simples mensagem passando API baseada. As linguagens de matriz têm rotinas para calcular os avarages deslizando para uma determinada seqüência de itens. É menos eficiente para loop como nos comandos a seguir. Solicita continuamente uma entrada I. Que é adicionado ao final de uma lista L1. L1 pode ser encontrado pressionando 2ND / 1, e a média pode ser encontrada em List / OPS Pressione ON para terminar o programa. Função que retorna uma lista contendo os dados médios do argumento fornecido Programa que retorna um valor simples em cada invocação: list é a média da lista: p é o período: 5 retorna a lista média: Exemplo 2: Usando o programa movinav2 (i , 5) - Inicializando o cálculo da média móvel e definindo o período de 5 movinav2 (3, x): x - novos dados na lista (valor 3), e o resultado será armazenado na variável x e exibido movinav2 (4, x) : X - novos dados (valor 4), eo novo resultado será armazenado na variável x, e exibido (43) / 2. Descrição da função movinavg: variável r - é o resultado (a lista média) que será retornada variável i - é a variável de índice, e aponta para o fim da sub-lista a lista sendo calculada a média. Variável z - uma variável auxiliar A função usa a variável i para determinar quais valores da lista serão considerados no cálculo da média seguinte. Em cada iteração, a variável i aponta para o último valor na lista que será utilizado no cálculo médio. Portanto, só precisamos descobrir qual será o primeiro valor na lista. Geralmente bem tem que considerar p elementos, então o primeiro elemento será o indexado por (i-p1). No entanto, nas primeiras iterações, esse cálculo será normalmente negativo, de modo que a seguinte equação evitará índices negativos: max (i-p1,1) ou, arranjar a equação, max (i-p, 0) 1. Mas o número de elementos nas primeiras iterações também será menor, o valor correto será (índice final - índice de início 1) ou, arranjar a equação, (i - (max (ip, 0) 1) e então , (I-max (ip, 0)). A variável z detém o valor comum (max (ip), 0) então o beginindex será (z1) e os numberofelements serão (iz) mid (list, z1, iz) retornará a lista de valor que será a soma média .) Irá somá-los soma (.) / (Iz) ri irá média deles e armazenar o resultado no lugar apropriado na lista de resultados Usando um fecho e criando uma função

No comments:

Post a Comment