Eu não sei por que computemovingaverage leva uma caixa. Muito menos por que ele levaria uma referência a um. Prefira ampT sobre ampVecltTgt. Por que usar a divisão de ponto flutuante com truncamento quando matemática de números inteiros faz o mesmo, deve ser mais rápido, e é mais curto para gravar Não use um iterador em uma fatia se você está indo apenas para retirar o índice de apenas nth valor. Também assa no invólucro. Id use Iterator :: map e Iterator :: sum. Preserve a soma como um número inteiro até o último momento, em seguida, convertê-lo em ponto flutuante. Isso pode ou não ser uma boa idéia, dependendo dos dados de entrada. Aprenda e ame todos os métodos na opção e no resultado. Por exemplo, Option :: map substitui as 4 linhas de uma correspondência explícita. Mergemovingaverage parece mais problemas do que o seu valor apenas inline-lo e fornecer melhores nomes de variáveis. Não há necessidade de criar um Vec apenas passar em uma fatia de uma matriz. Pode passar diretamente a computação com o mapa. Sem encerramento ou argumentos necessários. Seu mais idiomatic para usar o ampa no argumento do fechamento em vez de um no corpo quando são equivalentes. Iterator :: inspect é mais uma ferramenta de depuração do que qualquer coisa usar um loop for para conduzir um iterador de efeitos colaterais. Seria interessante ver uma implementação que não usa janelas. Mas em vez disso é baseado em um iterador. Se você souber que sua fatia está classificada, uma pesquisa binária pode ser mais eficiente. Também chamado de média móvel. Média móvel e média móvel, pode ser calculada de várias maneiras diferentes: Média Movente Simples Média Móvel Cumulativa Média Móvel Ponderada Para o meu cenário, eu precisava de uma média simples, rápida e precisa, então resolvi implementar a calculadora simples de média móvel abaixo. 160160 classe SimpleRunningAverage 160160 160160160160160 int tamanho 160160160160160 valores int nulo 160160160160160 int valuesIndex 0 160160160160160 int valueCount 0 160160160160160 soma int 0 160160160160160 SimpleRunningAverage público (int size) 160160160160160 160160160160160160160160 System. Diagnostics. Debug. Assert (tamanho gt 0) 160160160160160160160160 tamanho Math. max ( size, 1) tamanho 160160160160160160160160 valores new int 160160160160160 160160160160160 public int add (int newValue) 160160160160160 160160160160160160160160 // calcula um novo valor para adicionar a soma subtraindo o 160160160160160160160160 // valor que é substituída a partir do novo valor 160160160160160160160160 int temperatura newValue - valuesvaluesIndex 160160160160160160160160 valuesvaluesIndex newValue 160160160160160160160160 soma temperatura tamanho 160160160160160160160160 valuesIndex 160160160160160160160160 valuesIndex 160160160160160160160160 160160160160160160160160 if (tamanho lt valueCount) 160160160160160160160160160160160 valueCount soma 160160160160160160160160 retorno / valueCount 160160160160160 160160 Aqui é como usá-lo: Im no processo de criação de um algoritmo de negociação forex e queria tentar meu tiro No cálculo da EMA (Exponential Moving Averages). Meus resultados parecem estar corretos (em comparação com os cálculos que eu fiz à mão), então eu acredito que o método a seguir funciona, mas só queria ter um conjunto extra de olhos para certificar-se im não faltando nada. Note que isso apenas retorna o EMA para o preço mais recente, ele não retorna uma matriz de EMAs como que não é o que eu preciso para o meu aplicativo. Recursão é uma boa ferramenta para o trabalho certo, mas aqui ele é usado para realizar loop simples. Como tal o código. É mais difícil de ler e raciocinar. É mais lento porque grande parte do código em ema só precisa ser executado uma vez. Irá falhar com o valor suficientemente grande da janela devido à pilha de chamadas Pythons transbordando. Por favor, documente pelo menos os parâmetros de cada função, por exemplo. Essa janela é o comprimento da janela, e essa posição conta para trás a partir do final dos dados. (Na verdade, as coisas ficariam mais claras se a posição fosse um índice normal para a frente em dados) Aumentar uma exceção quando você encontrar um parâmetro tem um valor inválido. Retornando Nenhum, em vez disso, só causará uma exceção mais confusa mais tarde. Na verdade, se eu tentar Indicators (). Ema (closeprices, 600) Recebo recursão infinita porque sma retorna None. Que faz ema chamar sma e outra vez. O ponto anterior também revela que se len (dados) lt janela 2 não é a verificação de validade direita. O 1 em data-window2 1: - window 1 não parece correto para mim. Suponho que você deseja data-window2: - window A declaração return previousema está em um lugar estranho, porque nesse ponto você calculou uma nova currentema. Este é o caso base da recursão, e é costume tratar o caso de base primeiro. Revisão pouco profunda: Você não precisa escrever uma aula para o que você está fazendo (e eu sugiro que você dê uma olhada neste vídeo). Sua classe não encapsula nenhum dado e você apenas o usa para ter suas funções em uma mesma entidade. Eu acho que as coisas mais fáceis de entender se você fosse definir classmethod para tornar óbvio que você não vai realmente confiar em qualquer instância qualquer. No entanto, uma opção ainda melhor seria apenas definir funções em um módulo indicador. Respondeu Nov 24 14 at 18:04 Obrigado pelas sugestões que eu realmente tê-los como classmethods e debatido indo e voltando entre mesmo usando uma classe ou apenas definir funções em um módulo indicador (o que vou fazer agora). Ndash ChrisC Nov 25 14 em 19:12 Apenas assisti o vídeo também, grande coisa. Ndash ChrisC Nov 25 14 em 19:43 Sua resposta 2017 Stack Exchange, Inc
No comments:
Post a Comment