Friday 21 July 2017

Python Pandas Exponencial Média Móvel


Biblioteca de Análise de Dados Python pandas é uma fonte aberta, biblioteca BSD-licenciado fornecendo alto desempenho, fácil de usar estruturas de dados e ferramentas de análise de dados para a linguagem de programação Python. Pandas é um projeto NUMFocus patrocinado. Isso ajudará a garantir o sucesso do desenvolvimento de pandas como um projeto open source de classe mundial. 0.19.0 Final (2 de outubro de 2016) Esta é uma versão importante do 0.18.1 e inclui o número de alterações de API, vários novos recursos, melhorias e melhorias de desempenho, juntamente com um grande número de correções de bugs. Recomendamos que todos os usuários atualizem para esta versão. Veja aqui readcsv () agora suporta análise de dados categóricos, veja aqui Uma função unioncategorical () foi adicionada para combinar categoricals, Veja aqui PeriodIndex agora tem seu próprio período dtype, e mudou para ser mais consistente com outras classes Index. Veja aqui Estruturas de dados esparsas ganharam suporte aprimorado de int e bool dtypes, veja aqui Operações de comparação com a série já não ignora o índice, veja aqui para uma visão geral das alterações API. Introdução de uma API de desenvolvimento de pandas para funções de utilidade, veja aqui. Deprecation de Panel4D e PanelND. Recomendamos representar esses tipos de dados n-dimensionais com o pacote xarray. Remoção dos módulos previamente reprovados pandas. io. data. Pandas. io. wb. Pandas. tools. rplot. Veja a visão geral do Whatsnew para uma extensa lista de todos os aprimoramentos e bugs que foram corrigidos em 0.19.0. Por favor, relate qualquer problema aqui Melhor maneira de instalar a melhor maneira de obter pandas é instalar via conda Builds para osx-64, linux-64, linux-32, win-64, win-32 para Python 2.7, Python 3.4 e Python 3.5 Estão disponíveis. Conda install pandas Quick vignette Qual é o problema pandas resolver Python tem sido grande para a munging de dados e preparação, mas menos para a análise de dados e modelagem. Pandas ajuda a preencher esta lacuna, permitindo-lhe realizar todo o fluxo de trabalho de análise de dados em Python sem ter que mudar para um idioma mais específico do domínio como R. Combinado com o excelente kit de ferramentas IPython e outras bibliotecas, o ambiente para fazer a análise de dados em Python excels No desempenho, na produtividade e na capacidade de colaborar. Pandas não implementa funcionalidade de modelagem significativa fora da regressão linear e de painel para isso, olhe para statsmodels e scikit-learn. Mais trabalho ainda é necessário para tornar o Python um ambiente de modelagem estatística de primeira classe, mas estamos bem no nosso caminho rumo a esse objetivo. O que nossos usuários têm a dizer 8220 pandas nos permite nos concentrar mais na pesquisa e menos na programação. Temos encontrado pandas fácil de aprender, fácil de usar e fácil de manter. A linha de fundo é que ele aumentou a nossa produtividade. 8221 Director de Optimização e Analytics amp 8220 pandas é a ferramenta perfeita para colmatar o fosso entre iterações rápidas de análise ad-hoc e código de qualidade de produção. Se você quer que uma ferramenta seja usada em uma organização multidisciplinar de engenheiros, matemáticos e analistas, não procure mais. 8222 8220 Utilizamos pandas para processar dados de séries temporais em nossos servidores de produção. A simplicidade e elegância de sua API e seu alto nível de desempenho para grandes volumes de dados, o tornaram uma escolha perfeita para nós.8221 Destaques da Biblioteca Um objeto DataFrame rápido e eficiente para manipulação de dados com indexação integrada Ferramentas para ler e gravar dados entre Estruturas de dados em memória e formatos diferentes: arquivos CSV e texto, Microsoft Excel, bancos de dados SQL eo rápido formato HDF5 Alinhamento inteligente de dados e tratamento integrado de dados em falta. Ganho automático alinhamento baseado em rótulo em computações e facilmente manipular dados confusos em uma forma ordenada Flexível remodelação e articulação de conjuntos de dados Intelligent baseado em rótulo de corte. Indexação extravagante. E subconjunto de grandes conjuntos de dados Colunas podem ser inseridos e excluídos das estruturas de dados para tamanho mutabilidade Agregação ou transformação de dados com um poderoso grupo por motor permitindo split-aplicar-combinar operações em conjuntos de dados Alto desempenho fusão e união de conjuntos de dados Hierárquico eixo indexação fornece Uma forma intuitiva de trabalhar com dados de alta dimensionalidade em uma estrutura de dados de menor dimensão Série temporal - funcionalidade: geração de intervalo de datas e conversão de frequência, estatísticas de janelas em movimento, regressões lineares de janelas móveis, mudança de data e atraso. Mesmo criar domínios específicos de tempo offsets e juntar séries de tempo sem perder dados Altamente otimizado para o desempenho. Com caminhos de código críticos escritos em Cython ou C. Python com pandas está em uso em uma ampla variedade de domínios acadêmicos e comerciais, incluindo Finanças, Neurociências, Economia, Estatística, Publicidade, Web Analytics, e muito mais. Backtesting um Crossover Médio Móvel em Python Com pandas Por Michael Halls-Moore em 21 de janeiro de 2014 No artigo anterior sobre Pesquisa Backtesting Ambientes Em Python Com Pandas criamos um ambiente orientado a objetos baseado em pesquisa backtesting e testou-o em uma estratégia de previsão aleatória. Neste artigo, faremos uso da maquinaria que introduzimos para realizar pesquisas sobre uma estratégia real, a saber, o Crossover Médio Móvel na AAPL. Estratégia de Crossover Média em Movimento A técnica de Crossover de Moving Average é uma estratégia de momentum simplista extremamente bem conhecida. É freqüentemente considerado o exemplo Hello World para negociação quantitativa. A estratégia aqui descrita é longa. São criados dois filtros separados de média móvel simples, com períodos de retrocesso variáveis, de uma série temporal específica. Os sinais para comprar o ativo ocorrem quando a média móvel de retrocesso mais curta excede a média móvel de maior tempo de retrocesso. Se a média mais longa subseqüentemente exceder a média mais curta, o ativo é vendido de volta. A estratégia funciona bem quando uma série de tempo entra em um período de forte tendência e, em seguida, lentamente inverte a tendência. Para este exemplo, eu escolhi a Apple, Inc. (AAPL) como a série de tempo, com um lookback curto de 100 dias e um lookback longo de 400 dias. Este é o exemplo fornecido pela biblioteca de negociação algorítmica do zipline. Assim, se queremos implementar nosso próprio backtester, precisamos garantir que ele corresponda aos resultados em tirolesa, como um meio básico de validação. Implementação Certifique-se de seguir o tutorial anterior aqui. Que descreve como a hierarquia de objeto inicial para o backtester é construída, caso contrário, o código abaixo não funcionará. Para essa implementação em particular, usei as seguintes bibliotecas: A implementação do macross. py requer backtest. py do tutorial anterior. O primeiro passo é importar os módulos e objetos necessários: Como no tutorial anterior, vamos subclassificar a classe-base Abstract de Estratégia para produzir MovingAverageCrossStrategy. Que contém todos os detalhes sobre como gerar os sinais quando as médias móveis de AAPL cruzar uns aos outros. O objeto requer uma janela curta e uma janela longa sobre a qual operar. Os valores foram ajustados para padrões de 100 dias e 400 dias respectivamente, que são os mesmos parâmetros usados ​​no exemplo principal de tirolesa. As médias móveis são criadas usando a função rollingmean pandas sobre o preço de fecho barsClose do estoque AAPL. Uma vez construídas as médias móveis individuais, a Série de sinais é gerada ajustando a coluna igual a 1,0 quando a média móvel curta é maior que a média móvel longa, ou 0,0 caso contrário. A partir daí, as ordens de posição podem ser geradas para representar sinais de negociação. O MarketOnClosePortfolio é subclassificado do Portfolio. Que é encontrado em backtest. py. É quase idêntico à implementação descrita no tutorial anterior, com a exceção de que as negociações são agora realizadas em uma base Close-to-Close, em vez de uma base Open-to-Open. Para obter detalhes sobre como o objeto Portfolio está definido, consulte o tutorial anterior. Ive deixou o código em para a integridade e para manter este tutorial auto-contido: Agora que as classes MovingAverageCrossStrategy e MarketOnClosePortfolio foram definidas, uma função principal será chamado para amarrar todas as funcionalidades em conjunto. Além disso, o desempenho da estratégia será analisado através de um gráfico da curva de equivalência patrimonial. O objeto DataReader do pandas faz o download dos preços OHLCV das ações da AAPL para o período de 1º de janeiro de 1990 a 1º de janeiro de 2002, momento em que os sinais DataFrame são criados para gerar os sinais long-only. Subseqüentemente, a carteira é gerada com uma base de capital inicial de 100.000 USD e os retornos são calculados na curva de patrimônio líquido. O passo final é usar matplotlib para traçar um gráfico de dois dígitos de ambos os preços da AAPL, superposto com as médias móveis e sinais de compra / venda, bem como a curva de equidade com os mesmos sinais de compra / venda. O código de plotagem é obtido (e modificado) a partir do exemplo de implementação da tirolesa. A saída gráfica do código é a seguinte. Eu fiz uso do comando IPython colar para colocar isso diretamente no console IPython enquanto no Ubuntu, para que a saída gráfica permaneceu na vista. Os upticks rosa representam a compra do estoque, enquanto os downticks pretos representam vendê-lo de volta: Como pode ser visto a estratégia perde dinheiro durante o período, com cinco negócios de ida e volta. Isto não é surpreendente, tendo em conta o comportamento da AAPL ao longo do período, que registou uma ligeira tendência descendente, seguida de um aumento significativo a partir de 1998. O período de retrocesso dos sinais da média móvel é bastante grande e isso afectou o lucro do comércio final , O que de outra forma pode ter feito a estratégia rentável. Em artigos subseqüentes, criaremos um meio mais sofisticado de analisar o desempenho, bem como descrevendo como otimizar os períodos de retorno dos sinais individuais de média móvel. Michael Halls-Moore Mike é o fundador da QuantStart e tem estado envolvido na indústria de finanças quantitativas nos últimos cinco anos, principalmente como um desenvolvedor quant e mais tarde como consultor de comerciante quant para ferramentas hedge fundsputational Analogamente, DataFrame tem um método cov para calcular Pairwise covariances entre as séries no DataFrame, também excluindo NA / valores nulos. Assumindo que os dados ausentes estão faltando aleatoriamente, isso resulta em uma estimativa para a matriz de covariância que é imparcial. No entanto, para muitas aplicações esta estimativa pode não ser aceitável porque a matriz de covariância estimada não é garantida para ser semi-definitiva positiva. Isto pode levar a correlações estimadas com valores absolutos que são maiores do que um, e / ou uma matriz de covariância não-invertible. Consulte Estimativa de matrizes de covariância para obter mais detalhes. DataFrame. cov também suporta uma palavra-chave opcional minperiods que especifica o número mínimo necessário de observações para cada par de colunas, a fim de ter um resultado válido. Os pesos usados ​​na janela são especificados pela palavra-chave wintype. A lista de tipos reconhecidos são: boxcar triang blackman hamming bartlett parzen bohman blackmanharris nuttall barthann kaiser (necessidades beta) gaussian (necessidades std) generalgaussian (precisa de poder, largura) slepian (precisa de largura). Observe que a janela do boxcar é equivalente a mean (). Para algumas funções de janelas, parâmetros adicionais devem ser especificados: Para. sum () com um wintype. Não há normalização feita para os pesos para a janela. Passando pesos personalizados de 1, 1, 1 irá produzir um resultado diferente do que passando pesos de 2, 2, 2. Por exemplo. Ao passar um wintype em vez de especificar explicitamente os pesos, os pesos já estão normalizados para que o maior peso seja 1. Em contraste, a natureza do cálculo. mean () é tal que os pesos são normalizados em relação uns aos outros. Os pesos de 1, 1, 1 e 2, 2, 2 produzem o mesmo resultado. Rolling de reconhecimento de tempo na versão 0.19.0. Novo na versão 0.19.0 são a capacidade de passar um offset (ou conversível) para um método. rolling () e tê-lo produzir janelas de tamanho variável com base na janela de tempo passada. Para cada ponto de tempo, isso inclui todos os valores anteriores ocorrendo dentro do delta de tempo indicado. Isto pode ser particularmente útil para um índice de frequência de tempo não regular. Este é um índice de freqüência regular. Usando um parâmetro de janela inteiro funciona para rolar ao longo da freqüência da janela. Especificar um deslocamento permite uma especificação mais intuitiva da freqüência de rolamento. Usando um índice não regular, mas ainda monotônico, rolar com uma janela de número inteiro não dá nenhum cálculo especial. A utilização da especificação de tempo gera janelas variáveis ​​para estes dados esparsos. Além disso, agora permitimos que um opcional parâmetro para especificar uma coluna (em vez do padrão do índice) em um DataFrame. Rolling vs Resampling Time-aware Usando. rolling () com um índice baseado em tempo é bastante semelhante a resampling. Ambos operam e realizam operações redutoras em objetos pandas indexados no tempo. Ao usar. rolling () com um deslocamento. O deslocamento é um tempo-delta. Tome uma janela olhando para trás-no tempo, e agregar todos os valores nessa janela (incluindo o ponto final, mas não o ponto de início). Este é o novo valor nesse ponto no resultado. Estas são janelas de tamanho variável no espaço de tempo para cada ponto da entrada. Você obterá um resultado do mesmo tamanho que a entrada. Ao usar. resample () com um deslocamento. Construa um novo índice que é a freqüência do deslocamento. Para cada compartimento de freqüência, o agregado aponta da entrada dentro de uma janela que olha para trás-no tempo que caem nesse compartimento. O resultado dessa agregação é a saída desse ponto de freqüência. As janelas são tamanho de tamanho fixo no espaço de freqüência. Seu resultado terá a forma de uma freqüência regular entre o min eo máximo do objeto de entrada original. Para resumir. Rolling () é uma operação de janela baseada em tempo, enquanto. resample () é uma operação de janela baseada em freqüência. Centrando o Windows Por padrão, os rótulos são definidos para a borda direita da janela, mas uma palavra-chave central está disponível para que os rótulos possam ser definidos no centro. Funções de janelas binárias cov () e corr () podem calcular as estatísticas da janela em movimento sobre duas séries ou qualquer combinação de DataFrame / Series ou DataFrame / DataFrame. Aqui está o comportamento em cada caso: duas séries. Calcular a estatística para o emparelhamento. DataFrame / Series. Calcular as estatísticas para cada coluna do DataFrame com a série passada, retornando um DataFrame. DataFrame / DataFrame. Por padrão, calcular a estatística para nomes de colunas correspondentes, retornando um DataFrame. Se o argumento de palavra-chave pairwiseTrue é passado, em seguida, calcula a estatística para cada par de colunas, retornando um painel cujos itens são as datas em questão (consulte a próxima seção). Calculando as covariâncias e as correlações em pares de rotação Na análise de dados financeiros e em outros campos, é comum calcular covariâncias e matrizes de correlação para uma coleção de séries temporais. Muitas vezes também se interessa por matrizes de covariância de janela móvel e de correlação. Isso pode ser feito passando o argumento de palavra-chave pairwise, que no caso de entradas DataFrame irá render um painel cujos itens são as datas em questão. No caso de um único argumento de DataFrame, o argumento pairwise pode até ser omitido: Os valores ausentes são ignorados e cada entrada é calculada usando as observações completas pairwise. Consulte a seção de covariância para ressalvas associadas a este método de cálculo de matrizes de covariância e correlação. Além de não ter um parâmetro de janela, essas funções têm as mesmas interfaces que suas contrapartes de rolagem. Como acima, os parâmetros que todos aceitam são: minperiods. Limite de pontos de dados não nulos a exigir. O padrão é o mínimo necessário para calcular estatística. Nenhum NaNs será emitido uma vez que os pontos de dados não-nulos de minperiods foram vistos. centro. Boolean, se deseja definir os rótulos no centro (o padrão é False) A saída dos métodos. rolling e. expanding não retorna um NaN se houver pelo menos valores nulos de minperiods na janela atual. Isso difere de cumsum. Cumprod. Cummax. E cummin. Que retornam NaN na saída onde quer que um NaN seja encontrado na entrada. Uma estatística de janela em expansão será mais estável (e menos responsiva) do que a sua contrapartida de janela de rolamento à medida que o tamanho de janela crescente diminui o impacto relativo de um ponto de dados individual. Como um exemplo, aqui está a saída mean () para o conjunto de dados da série de tempo anterior: Exponentially Weighted Windows Um conjunto de funções relacionadas são exponencialmente ponderadas versões de várias das estatísticas acima. Uma interface semelhante ao. rolling e. expanding é acessada pelo método. ewm para receber um objeto EWM. Uma série de métodos de expansão EW (exponencialmente ponderada) são fornecidos: Advanced Matplotlib Series (vídeos e fonte final apenas) Uma vez que você tem uma compreensão básica de como funciona Matplotlib, você pode ter interesse em levar seu conhecimento um pouco mais. Algumas das necessidades gráficas mais complexas vêm na forma de análise de ações e gráficos, ou Forex. Nesta série tutorial, foram indo para cobrir onde e como automaticamente pegar, classificar e organizar alguns stock livre e dados de preços forex. Em seguida, foram indo para gráfico usando alguns dos indicadores mais populares como um exemplo. Aqui, bem fazer MACD (Moving Average Convergence Divergence) eo RSI (Relative Strength Index). Para nos ajudar a calculá-los, usaremos o NumPy, mas, caso contrário, calcularemos tudo por conta própria. Para adquirir os dados, iriam usar a API de finanças do Yahoo. Esta API retorna dados de preços históricos para o símbolo de ticker que especificamos e para o tempo que pedimos. Quanto maior o período de tempo, menor a resolução de dados que obtemos. Assim, se você pedir um período de tempo de 1 dia para AAPL, você receberá 3-minuto OHLC (aberto alto fechamento baixo) dados. Se você pedir 10 anos vale a pena, você obterá dados diários, ou mesmo 3 dias de tempo. Tenha isso em mente e escolha um período de tempo que se ajuste aos seus objetivos. Além disso, se você escolher um intervalo de tempo baixo o suficiente e obter alta granularidade suficiente, a API retornará o tempo em um carimbo de data / hora unix, em comparação com um carimbo de data. Uma vez que tenhamos os dados, vamos querer graficá-lo. Para começar, basta traçar as linhas, mas a maioria das pessoas vai querer traçar um castiçal em seu lugar. Vamos usar a função de candelabro Matplotlibs, e fazer uma edição simples para melhorar ligeiramente. Neste mesmo gráfico, bem também sobrepor alguns cálculos de média móvel. Depois disso, vamos criar uma sub-trama, e graficar o volume. Não podemos plotar o volume na mesma subtrama imediatamente, porque a escala é diferente. Para começar, vamos plotar o volume embaixo em outro sub-plot, mas eventualmente bem realmente sobreposição de volume na mesma figura e torná-lo um pouco transparente. Então, foram indo para adicionar 2 sub-parcelas e traçar um RSI indicador na parte superior eo MACD indicador na parte inferior. Para todos estes, foram indo para compartilhar o eixo X, para que possamos zoom in e out em 1 parcela e todos eles correspondem ao mesmo período de tempo. Vamos tramar no formato de data para o eixo X, e personalizar quase todas as coisas que podemos para a estética. Isso inclui mudar as cores da etiqueta da marca, as cores da borda / coluna, as cores das linhas, as cores do candelabro da OHLC, aprender a criar um gráfico preenchido (para o volume), histogramas, desenhar linhas específicas (hline para RSI) e muito mais. Heres o resultado final (eu tenho tanto um Python 3 e uma versão Python 2. Python 3 primeiro, depois Python 2. Certifique-se de que você está usando o que corresponde a sua versão Python): Isso é tudo por agora. Quer mais tutoriais Cabeça para a Home Page Matplotlib Crash CourseSmoothing com Exponentially Weighted Moving Averages Uma média móvel leva uma série de tempo barulhento e substitui cada valor com o valor médio de uma vizinhança sobre o valor dado. Este bairro pode consistir em dados puramente históricos, ou pode ser centrado sobre o valor dado. Além disso, os valores no bairro podem ser ponderados usando diferentes conjuntos de pesos. Aqui está um exemplo de uma média móvel ponderada de três pontos, usando dados históricos, Aqui, representa o sinal suavizado e representa a série de tempo ruidosa. Em contraste com as médias móveis simples, uma média móvel exponencialmente ponderada (EWMA) ajusta um valor de acordo com uma soma exponencialmente ponderada de todos os valores anteriores. Esta é a idéia básica, Isso é bom porque você não precisa se preocupar com ter uma janela de três pontos, versus uma janela de cinco pontos, ou se preocupar com a adequação de seu esquema de ponderação. Com o EWMA, as perturbações anteriores 8220 lembradas, 8221 e 8220 são esquecidas, 8221 pelo termo na última equação, enquanto que com uma janela ou vizinhança com limites discretos, uma perturbação é esquecida assim que passa para fora da janela. Avaliando o EWMA para acomodar as tendências Depois de ler sobre EWMAs em um livro de análise de dados, eu tinha ido longitudinalmente feliz usando esta ferramenta em cada aplicação única suavização que me deparei. Não foi até mais tarde que eu aprendi que a função EWMA é realmente apenas adequado para dados estacionários, ou seja, dados sem tendências ou sazonalidade. Em particular, a função EWMA resiste tendências longe da média atual que 8282s já 8220seen8221. Assim, se você tem uma função de som ruidosa que vai de 0, para 1 e, em seguida, de volta para 0, então a função EWMA retornará valores baixos no lado de subida e altos valores no lado de down-hill. Uma maneira de contornar isso é suavizar o sinal em ambas as direções, marchar para frente e, em seguida, marchar para trás, e, em seguida, média dos dois. Aqui, usaremos a função EWMA fornecida pelo módulo pandas. Holt-Winters Second Order EWMA E aqui está algum código Python implementando o método de segunda ordem Holt-Winters em outra função de som ruidoso, como antes. Post navigation Recent Posts Arquivos

No comments:

Post a Comment