Tuesday, 16 May 2017

Exponential Moving Average Implementation


Se o desempenho deste código é crítico, então poderia fazer sentido para evitar alocações de pilha para Candle s. Acho que a maneira mais razoável de fazer isso seria fazer Candle em uma estrutura. Embora os tipos de valores mutáveis ​​sejam maus. Então eu também refatorar Candle para ser imutável. Isso também significa que a implementação de newestCandle teria que mudar, provavelmente em um par de campos duplos (ou, alternativamente, uma classe mutable e resettable separada). Eu não vejo nenhum outro problema potencial de desempenho em seu código. Mas quando se trata de desempenho, você deve sempre confiar em perfis, não a sua intuição (ou alguém elses). Além disso, eu não gosto de alguns nomes de seus métodos. Especificamente: ValueUpdated. Nomes de métodos geralmente devem estar no formulário fazer algo, não aconteceu algo. Então eu acho que um nome melhor seria UpdateValue. Adicionar. Modificar. Estas são as duas operações fundamentais de seu MovingAverage e eu acho que esses nomes não expressam o significado bem. Gostaria de chamá-los algo como MoveAndSetCurrent e SetCurrent. respectivamente. Apesar de tal nomeação indica que as operações fundamentais devem ser bastante Mover e SetCurrent. Duas médias Exponencial Moving Explicado Traders têm contado em médias móveis para ajudar a identificar pontos de entrada de alta probabilidade de negociação e saídas rentáveis ​​por muitos anos. Um problema bem conhecido com médias móveis, entretanto, é o sério atraso que está presente na maioria dos tipos de médias móveis. A média móvel exponencial dupla (DEMA) fornece uma solução calculando uma metodologia de média mais rápida. História da Média Mínima Exponencial Dupla Na análise técnica. O termo média móvel refere-se a uma média do preço de um determinado instrumento de negociação durante um período de tempo especificado. Por exemplo, uma média móvel de 10 dias calcula o preço médio de um instrumento específico nos últimos 10 dez dias, uma média móvel de 200 dias calcula o preço médio dos últimos 200 dias. Cada dia, o período de retrocesso avança para cálculos de base no último número X de dias. Uma média móvel aparece como uma linha lisa e curva que fornece uma representação visual da tendência a mais longo prazo de um instrumento. Médias móveis mais rápidas, com períodos mais curtos de retro-observação, são médias móveis mais lentas, mais longas, com períodos de look-back mais longos, são mais suaves. Porque uma média móvel é um indicador olhando para trás, ele está atrasado. A média móvel exponencial dupla (DEMA), mostrada na Figura 1, foi desenvolvida por Patrick Mulloy na tentativa de reduzir a quantidade de tempo de latência encontrada nas médias móveis tradicionais. Ele foi introduzido pela primeira vez em fevereiro de 1994, Análise Técnica de Stocks amp Commodities revista em Mulloys artigo Suavização de dados com médias mais rápidas Moving. Figura 1: Este gráfico de um minuto do contrato de futuros do e-mini Russell 2000 mostra duas médias móveis exponenciais duplas diferentes, um período de 55 períodos aparece em azul, Um período de 21 em rosa. Calculando um DEMA Como Mulloy explica em seu artigo original, o DEMA não é apenas um EMA duplo com o dobro do tempo de atraso de um único EMA, mas é uma implementação composta de EMAs simples e duplos produzindo outro EMA com menos atraso do que qualquer um dos originais dois. Em outras palavras, o DEMA não é simplesmente dois EMAs combinados, ou uma média móvel de uma média móvel, mas é um cálculo de EMAs simples e duplos. Quase todas as plataformas de análise de negociação têm o DEMA incluído como um indicador que pode ser adicionado aos gráficos. Portanto, os comerciantes podem usar o DEMA sem saber a matemática por trás dos cálculos e sem ter que escrever ou inserir qualquer código. Comparando o DEMA com as Médias Movimentais Tradicionais As médias móveis são um dos métodos mais populares de análise técnica. Muitos comerciantes usá-los para detectar reversões de tendência. Especialmente em um crossover de média móvel, onde duas médias móveis de comprimentos diferentes são colocadas em um gráfico. Os pontos onde as médias móveis se cruzam podem significar oportunidades de compra ou venda. O DEMA pode ajudar os comerciantes a detectar reversões mais cedo, porque é mais rápido para responder a mudanças na atividade do mercado. A Figura 2 mostra um exemplo do contrato de futuros e-mini Russell 2000. Este gráfico de um minuto tem quatro médias móveis aplicadas: DEMA de 21 períodos (rosa) DEMA de 55 períodos (azul escuro) MA de 21 períodos (azul claro) MA de 55 períodos (verde claro) Figura 2: Este gráfico de um minuto de O contrato de futuros de e-mini Russell 2000 ilustra o tempo de resposta mais rápido do DEMA quando usado em um crossover. Observe como o crossover DEMA em ambas as instâncias aparece significativamente mais cedo do que os crossovers MA. O primeiro crossover de DEMA aparece às 12:29 e o próximo bar abre a um preço de 663.20. O crossover de MA, por outro lado, forma às 12:34 eo próximo preço de abertura de barras é em 660.50. No próximo conjunto de crossovers, o crossover de DEMA aparece a 1:33 e a barra seguinte abre em 658. A MA, em contraste, forma a 1:43, com a abertura da barra seguinte a 662.90. Em cada caso, o crossover DEMA fornece uma vantagem em entrar na tendência anterior ao crossover MA. (Para obter mais informações, leia o Tutorial de Médias Móveis.) Negociação com um DEMA Os exemplos de crossover de média móvel acima ilustram a eficácia do uso da média móvel exponencial dupla mais rápida. Além de usar o DEMA como um indicador autônomo ou em um crossover setup, o DEMA pode ser usado em uma variedade de indicadores onde a lógica é baseada em uma média móvel. Ferramentas de análise técnica, tais como Bandas Bollinger. (MACD) ea média móvel exponencial tripla (TRIX) são baseadas em tipos de média móvel e podem ser modificadas para incorporar um DEMA em vez de outros tipos mais tradicionais de médias móveis. Substituindo o DEMA pode ajudar os comerciantes spot diferentes oportunidades de compra e venda que estão à frente daqueles fornecidos pelo MAs ou EMAs tradicionalmente utilizados nestes indicadores. Claro que entrar em uma tendência mais cedo ou mais tarde, normalmente leva a maiores lucros. A Figura 2 ilustra esse princípio - se usássemos os crossovers como sinais de compra e venda. Nós entraríamos nos comércios significativamente mais cedo ao usar o crossover de DEMA ao contrário do crossover de MA. Bottom Line Traders e investidores há muito tempo usaram médias móveis em sua análise de mercado. As médias móveis são uma ferramenta de análise técnica amplamente utilizada que fornece um meio de visualizar e interpretar rapidamente a tendência de longo prazo de um determinado instrumento de negociação. Uma vez que as médias móveis por sua própria natureza são indicadores de atraso. É útil para ajustar a média móvel, a fim de calcular um indicador mais rápido, mais responsivo. A média móvel exponencial oferece aos comerciantes e investidores uma visão da tendência de longo prazo, com a vantagem adicional de ser uma média móvel mais rápida com menos tempo de atraso. O artigo 50 é uma cláusula de negociação e liquidação no tratado da UE que delineia as medidas a serem tomadas para qualquer país que. Beta é uma medida da volatilidade, ou risco sistemático, de um título ou de uma carteira em comparação com o mercado como um todo. Um tipo de imposto incidente sobre ganhos de capital incorridos por pessoas físicas e jurídicas. Os ganhos de capital são os lucros que um investidor. Uma ordem para comprar um título igual ou inferior a um preço especificado. Uma ordem de limite de compra permite que traders e investidores especifiquem. Uma regra do Internal Revenue Service (IRS) que permite retiradas sem penalidade de uma conta IRA. A regra exige que. A primeira venda de ações por uma empresa privada para o público. As IPOs são muitas vezes emitidas por empresas menores e mais jovens que procuram o. Eu basicamente tenho uma matriz de valores como este: A matriz acima é simplificada, estou colecionando 1 valor por milissegundo no meu código real e eu preciso processar a saída em um algoritmo que escrevi Para encontrar o pico mais próximo antes de um ponto no tempo. Minha lógica falha porque no meu exemplo acima, 0.36 é o pico real, mas meu algoritmo olharia para trás e verá o último número 0.25 como o pico, pois há uma diminuição para 0.24 antes dele. O objetivo é tomar esses valores e aplicar um algoritmo para eles que irá suavizar-los um pouco para que eu tenha mais valores lineares. (Ou seja: Id como meus resultados para ser curvy, não jaggedy) Ive foi dito para aplicar um filtro exponencial de média móvel para os meus valores. Como posso fazer isso É muito difícil para mim ler equações matemáticas, eu lidar muito melhor com o código. Como processar valores em minha matriz, aplicando um cálculo exponencial de média móvel para igualá-los out perguntou Feb 8 12 at 20:27 Para calcular uma média móvel exponencial. Você precisa manter algum estado ao redor e você precisa de um parâmetro de ajuste. Isso requer uma pequena classe (supondo que você está usando o Java 5 ou posterior): Instantiate com o parâmetro de decadência desejado (pode ter ajuste deve estar entre 0 e 1) e use a média () para filtrar. Ao ler uma página sobre alguma recorrência matemática, tudo o que você realmente precisa saber ao transformá-lo em código é que os matemáticos gostam de escrever índices em matrizes e seqüências com subscritos. (Eles têm algumas outras notações também, o que não ajuda.) No entanto, o EMA é bastante simples, como você só precisa se lembrar de um antigo valor não arrays estado complicado necessário. Respondeu 8 fevereiro às 20:42 TKKocheran: Muito bonito. Não é bom quando as coisas podem ser simples (se começar com uma nova seqüência, obter uma nova média.) Observe que os primeiros termos na seqüência média saltarão em torno de um pouco devido a efeitos de limite, mas você obtém aqueles com outras médias móveis também. No entanto, uma boa vantagem é que você pode envolver a lógica de média móvel para o averager e experimentar sem perturbar o resto do seu programa demais. Ndash Donal Fellows Feb 9 12 em 0:06 Estou tendo dificuldade em compreender suas perguntas, mas vou tentar responder de qualquer maneira. 1) Se o seu algoritmo encontrado 0,25 em vez de 0,36, então ele está errado. É errado porque assume um aumento ou uma diminuição monotônica (que está sempre subindo ou sempre indo para baixo). A menos que você média TODOS os seus dados, seus pontos de dados --- como você apresentá-los --- são não-lineares. Se você realmente deseja encontrar o valor máximo entre dois pontos no tempo, corte sua matriz de tmin para tmax e localize o máximo desse subarray. 2) Agora, o conceito de médias móveis é muito simples: imagine que eu tenho a seguinte lista: 1.4, 1.5, 1.4, 1.5, 1.5. Eu posso suavizar isto tomando a média de dois números: 1.45, 1.45, 1.45, 1.5. Observe que o primeiro número é a média de 1,5 e 1,4 (segundo e primeiro números) a segunda (nova lista) é a média de 1,4 e 1,5 (terceira e segunda lista antiga) a terceira (nova lista) a média de 1,5 e 1,4 (Quarto e terceiro), e assim por diante. Eu poderia ter feito o período três ou quatro, ou n. Observe como os dados são muito mais suaves. Uma boa maneira de ver as médias móveis no trabalho é ir ao Google Finance, selecionar um estoque (tente Tesla Motors bastante volátil (TSLA)) e clique em technicals na parte inferior do gráfico. Selecione Média Móvel com um determinado período e Média Mínima exponencial para comparar suas diferenças. A média móvel exponencial é apenas mais uma elaboração disto, mas pondera os dados mais antigos menos do que os novos dados, isto é uma forma de influenciar a suavização em direção às costas. Por favor, leia a entrada da Wikipedia. Então, isso é mais um comentário do que uma resposta, mas a pequena caixa de comentários era apenas pequena. Boa sorte. Se você está tendo problemas com a matemática, você poderia ir com uma média móvel simples, em vez de exponencial. Então a saída que você obtém seria o último x termos dividido por x. Pseudocódigo não testado: Note que você precisará manipular as partes inicial e final dos dados, uma vez que claramente você não consegue média dos últimos 5 termos quando você está no seu 2º ponto de dados. Além disso, há maneiras mais eficientes de calcular essa média móvel (soma sum - mais antigo mais recente), mas isso é para obter o conceito do que está acontecendo em toda. Respondeu 8 de fevereiro às 20: 41Eu estou desenvolvendo um pequeno robô comercial como um exercício. Ele recebe os preços das ações dia após dia (representados como iterações). Heres o que minha classe de comércio olha como: Como você pode ver de meus dois atributos passados, eu desejo executar uma média movente exponencial como parte de um algoritmo seguinte da tendência. Mas eu acho que não entendi muito bem como implementá-lo heres minha função calcEMA que simplesmente calcula o EMA: Mas quando meus valores de ações (passado em um arquivo) são como tal: Como para certificar-se de que o meu EMA faz sentido, e bem. Não Onde eu errei na operação Adicionalmente, que valor devo dar ao lastEMA se é a primeira vez que eu chamo calcEMA A operação está errada, como você notou. Disclaimer Eu tenho esse algoritmo da wikipedia. E como tal não poderia ser preciso. Aqui (página 3) pode ser melhor, mas eu não consigo julgar, nunca usei esses algoritmos e então não tenho idéia do que estou falando :) c (EMA) y (EMA) ) EMA é EMA anterior é EMA anterior é um valor aleatório entre 0 e 1 c (preço) é preço atual Mas você fez quase a mesma coisa: c (EMA) Y (EMA) b) y (EMA) Eu não sei por que você fez 2 daysInTrading 1. mas isso nem sempre será um valor entre 0 e 1 (na verdade, pode até ser a maior parte do tempo 0, porque esses são todos intergers ). Você coloca um parêntese no lugar errado (depois de B. e não depois de y (EMA)). Assim, a operação agora será assim: lastEMA 0.5 (currentStock - lastEMA) Para o primeiro lastEMA. De acordo com a Wikipedia: S 1 é indefinido. S 1 pode ser inicializado de várias maneiras diferentes, mais comumente definindo o primeiro elemento na lista, embora existam outras técnicas, como a definição de S 1 para uma média das primeiras 4 ou 5 observações. A importância do efeito de inicialização S 1 na média móvel resultante depende de valores menores, tornando a escolha de S 1 relativamente mais importante do que valores maiores, uma vez que um maior desacelera mais rapidamente as observações mais antigas. Respondeu 18 de maio 16 às 13:30

No comments:

Post a Comment