Wednesday, 26 July 2017

C # Bollinger Bands


Abaixo você pode ver meu método C para calcular Bandas de Bollinger para cada ponto (média móvel, banda alta, banda para baixo). Como você pode ver este método usa 2 para loops para calcular o desvio padrão móvel usando a média móvel. Usou-se conter um laço adicional para calcular a média móvel durante os últimos n períodos. Este que eu poderia remover adicionando o novo valor de ponto para totalaverage no início do loop e removendo o valor de ponto i - n no final do loop. Minha pergunta agora é basicamente: Posso remover o loop interno restante de uma maneira semelhante que eu consegui com a média móvel perguntou Jan 31 13 às 21:45 A resposta é sim, você pode. Em meados dos anos 80 desenvolvi um algoritmo (provavelmente não original) no FORTRAN para uma aplicação de monitoramento e controle de processos. Infelizmente, isso foi há mais de 25 anos e eu não me lembro das fórmulas exatas, mas a técnica foi uma extensão da de médias móveis, com cálculos de segunda ordem, em vez de apenas linear. Depois de olhar para o seu código alguns, eu acho que posso suss como eu fiz isso naquela época. Observe como seu laço interno está fazendo uma Soma de Quadrados: da mesma forma que sua média deve ter originalmente teve uma Soma de Valores As únicas duas diferenças são a ordem (seu poder 2 em vez de 1) e que você está subtraindo a média Cada valor antes de quadrá-lo. Agora que pode parecer inseparável, mas na verdade eles podem ser separados: Agora, o primeiro termo é apenas uma soma de quadrados, você lidar com isso da mesma maneira que você faz a soma de valores para a média. O último termo (k2n) é apenas a média ao quadrado vezes o período. Desde que você divide o resultado pelo período anyway, você pode apenas adicionar o quadrado médio novo sem o laço extra. Finalmente, no segundo termo (SUM (-2vi) k), uma vez que SUM (vi) kn total você pode então mudá-lo para isso: ou apenas -2k2n. Que é -2 vezes a média ao quadrado, uma vez que o período (n) é dividido novamente. Assim, a fórmula combinada final é: (certifique-se de verificar a validade deste, uma vez que eu estou derivando-lo do topo da minha cabeça) E incorporando em seu código deve ser algo como isto: Obrigado por isso. Eu usei-o como a base de uma implementação em C para o CLR. Descobri que, na prática, você pode atualizar tal que newVar é um número negativo muito pequeno, eo sqrt falhar. Eu introduzi um if para limitar o valor para zero para este caso. Não idéia, mas estável. Isso ocorreu quando cada valor na minha janela tinha o mesmo valor (eu usei um tamanho de janela de 20 eo valor em questão foi 0,5, no caso de alguém queira tentar reproduzir isso.) Ndash Drew Noakes Jul 26 13 às 15:25 Ive Usado commons-math (e contribuiu para que a biblioteca) para algo muito semelhante a este. Sua fonte aberta, portar para C deve ser fácil como loja-comprou pie (você já tentou fazer uma torta do zero). Confira: commons. apache. org/math/api-3.1.1/index. html. Têm uma classe StandardDeviation. Vá para a cidade respondeu Jan 31 13 at 21:48 You39re bem-vindo Lamento não ter a resposta que você está procurando. Eu definitivamente didn39t significa sugerir portar toda a biblioteca Apenas o código mínimo necessário, que deve ser algumas centenas de linhas ou assim. Note que eu não tenho idéia do que legal / restrições de direitos autorais apache tem sobre esse código, assim you39d tem que verificar isso. No caso de você persegui-lo, aqui está o link. Assim que Variance FastMath ndash Jason Jan 31 13 em 22:36 A informação mais importante já foi dada acima --- mas talvez este ainda é de interesse geral. Uma pequena biblioteca Java para calcular a média móvel eo desvio padrão está disponível aqui: github / tools4j / meanvar A implementação é baseada em uma variante do método de Welfords mencionado acima. Foram derivados métodos para remover e substituir valores que podem ser usados ​​para mover janelas de valor.

No comments:

Post a Comment