Sunday 29 October 2017

Calcule o python médio móvel


Digamos que eu tenho uma lista: eu quero criar uma função que calcula a média móvel n-dia. Então, se n fosse 5, eu gostaria que meu código calculasse os primeiros 1-5, adicione-o e encontre a média, que seria 3.0, então vá para 2-6, calcule a média, que seria 4,0 e depois 3 -7, 4-8, 5-9, 6-10. Eu não quero calcular os primeiros n-1 dias, então a partir do nono dia, contam os dias anteriores. Isso parece imprimir o que eu quero: no entanto, não sei como calcular os números dentro dessas listas. Todas as idéias foram feitas 14 de fevereiro às 21:05 Enquanto eu gosto da resposta de Martijns sobre isso, como george, eu queria saber se isso não seria mais rápido, usando uma soma em execução ao invés de aplicar a soma () repetidamente na maioria dos mesmos números . Também é interessante a idéia de ter valores Nenhum como padrão durante a fase de aceleração. Na verdade, pode haver muitos cenários diferentes que se poderia conceber para médias móveis. Permite dividir o cálculo das médias em três fases: Ramp Up: Iniciando iterações onde a contagem de iteração atual é o tamanho da janela Progressão constante: Temos exatamente o tamanho da janela do número de elementos disponíveis para calcular uma média normal: soma (xiterationcounter-windowsize: iterationcounter) windowsize Ramp Down: No final dos dados de entrada, podemos retornar outro Windowsize - 1 números médios. Heres uma função que aceita Iteráveis ​​arbitrárias (geradores são finos) como entrada para dados Tamanho de janela arbitrária 1 Parâmetros para mudar a produção de valores durante as fases para Ramp UpDown Callback funções para essas fases para controlar como os valores são produzidos. Isso pode ser usado para fornecer constantemente um padrão (por exemplo, Nenhum) ou para fornecer médias parciais. Parece ser um pouco mais rápido que a versão de Martijns - o que é muito mais elegante, no entanto. Heres o código de teste: A questão original agora pode ser resolvida com esta chamada de função: Im no processo de criação de um algoritmo de negociação forex e queria tentar meu tiro no cálculo de EMA (Exponential Moving Medias). Meus resultados parecem estar corretos (em comparação com os cálculos que fiz à mão), então eu acredito que o método seguinte funciona, mas queria apenas obter um conjunto extra de olhos para garantir que eu não perca nada. Observe que isso apenas retorna o EMA para o preço mais recente, ele não retorna uma série de EMAs, pois isso não é o que eu preciso para minha aplicação. A recursão é uma boa ferramenta para o trabalho certo, mas aqui é usado para realizar o 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. Falhará com o valor de janela grande o suficiente devido à pilha de chamadas Pythons transbordante. Documentar 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 seriam mais claras se a posição fosse um índice direto normal em dados) Aumentar uma exceção quando você encontrar um parâmetro tem um valor inválido. O retorno de Nenhum, em vez disso, só causará uma exceção mais confusa mais tarde. Na verdade, se eu tentar Indicators (). Ema (closeprices, 600) recebo uma recursão infinita porque sma retorna None. O que faz ema chamada sma uma e outra vez. O ponto anterior também revela que se len (dados) a janela 2 não é a verificação de validade correta. O 1 na janela de dados2 1: a janela 1 não parece correta para mim. Suponho que você queira data-window2: - window A declaração retorna previousema está em um lugar estranho porque nesse ponto você calculou um novo currentema. Este é o caso base da recursão, e é costume lidar com o caso base primeiro. Minha proposta para ema: respondeu 26 de novembro às 18:56 Avaliação bastante rasa: você não precisa escrever uma aula pelo que está fazendo (e sugiro que dê uma olhada neste vídeo). Sua classe não encapsula nenhum dado e você apenas usa para ter suas funções na mesma entidade. Eu acho que as coisas seriam mais fáceis de entender se você fosse definir o método da classe para deixar óbvio que você realmente não confia em nenhum caso. No entanto, uma opção ainda melhor seria simplesmente definir funções em um módulo indicador. Respondeu 24 de novembro às 18h04 Obrigado pelas sugestões que eu realmente fizesse como métodos de classe e debatia indo e voltando entre mesmo usando uma classe ou apenas definindo funções em um módulo de indicadores (o que agora vou fazer). Ndash ChrisC 25 de novembro 14 às 19:12 Apenas assistiu o vídeo, ótimo material. Ndash ChrisC 25 de novembro às 19:43 Sua resposta 2017 Stack Exchange, IncAdvanced Matplotlib Series (somente vídeos e fonte final) Depois de ter uma compreensão básica de como o Matplotlib funciona, você pode ter interesse em levar seu conhecimento um pouco mais. Algumas das mais complexas necessidades gráficas vêm na forma de análise de estoque e gráficos, ou Forex. Nesta série de tutoriais, iriam cobrir onde e como agarrar, classificar e organizar automaticamente alguns dados de estoque e de preços gratuitos. Em seguida, deveríamos enquadrá-lo usando alguns dos indicadores mais populares como exemplo. Aqui, bem, faça o MACD (Divergência da Convergência da Média em Movimento) e o RSI (Índice de Força Relativa). Para nos ajudar a calcular estes, usaremos NumPy, mas, de outra forma, vamos calcular estes todos por nossa conta. Para adquirir os dados, iriam usar a API de finanças do Yahoo. Esta API retorna os dados do preço histórico para o símbolo do ticker que especificamos e para o período de tempo que pedimos. Quanto maior o intervalo de tempo, menor a resolução de dados que obtemos. Então, se você solicitar um período de tempo de 1 dia para a AAPL, você receberá dados de 3 minutos de OHLC (open high low close). Se você pedir 10 anos, você receberá dados diários, ou mesmo prazos de 3 dias. Tenha isso em mente e escolha um período de tempo que corresponda às suas metas. Além disso, se você escolher um intervalo de tempo suficientemente baixo e obter uma granularidade suficientemente alta, a API retornará o tempo em um carimbo de hora do Unix, em comparação com um selo de data. Uma vez que possamos os dados, gostaríamos de representá-lo. Para começar, bem, apenas trace as linhas, mas a maioria das pessoas vai querer traçar um castiçal em vez disso. Usaremos a função de castiçal Matplotlibs, e criamos uma edição simples para melhorá-la ligeiramente. Neste mesmo gráfico, bem, também supera alguns cálculos de média móvel. Depois disso, iriam criar uma subtração e representar o gráfico do volume. Não podemos plotar o volume na mesma subtrama imediatamente, porque a escala é diferente. Para começar, vamos traçar o volume embaixo em outro sub-gráfico, mas, eventualmente, realmente supera o volume na mesma figura e torná-lo um pouco transparente. Então, iriam adicionar 2 sub-lotes e traçar um indicador RSI na parte superior e o indicador MACD na parte inferior. Para todos estes, iriam compartilhar o eixo X, para que possamos ampliar e diminuir em 1 parcela e todos irão igualar o mesmo período de tempo. Vai traçar o formato da data para o eixo X e personalizar praticamente todas as coisas que podemos fazer para a estética. Isso inclui a mudança das cores do rótulo, das cores da linha da espinha, das cores das linhas, das cores do candelabro do OHLC, aprenda como criar um gráfico preenchido (para volume), histogramas, desenhar linhas específicas (hline para RSI) e muito mais. Heres o resultado final (eu tenho uma versão Python 3 e Python 2 para isso. Python 3 primeiro, em seguida, Python 2. Certifique-se de que você está usando o que combina com a sua Python Version): Isso é tudo por enquanto. Quer mais tutoriais Dirija-se ao Home Matplotlib Crash Course

No comments:

Post a Comment