Friday 9 June 2017

Pandas Moving Average Example


Hmmm, parece que essa citação para implementar a função é realmente muito fácil de se errar e promoveu uma boa discussão sobre a eficiência da memória. Estou feliz por ter tossido se isso significa saber que algo foi feito corretamente. Ndash Richard 20 de setembro 14 às 19:23 NumPys, a falta de uma função particular específica de domínio é talvez devido à disciplina e à fidelidade das equipes principais à diretiva principal do NumPys: forneça um tipo de matriz N-dimensional. Bem como funções para criar e indexar esses arrays. Como muitos objetivos fundamentais, este não é pequeno, e NumPy faz isso de forma brilhante. O SciPy (muito) maior contém uma coleção muito maior de bibliotecas específicas de domínio (chamadas subpacotes por desenvolvedores SciPy) - por exemplo, otimização numérica (otimização), processamento de sinal (sinal) e cálculo integral (integrar). Meu palpite é que a função que você está procurando é em pelo menos um dos subpacotes de SciPy (scipy. signal talvez) no entanto, eu olharia primeiro na coleção de SciPy scikits. Identifique o (s) scikit (s) relevante (s) e procure a função de interesse lá. Os Scikits são pacotes desenvolvidos de forma independente com base em NumPySciPy e dirigidos a uma disciplina técnica específica (por exemplo, scikits-image. Scikits-learn, etc.). Vários desses foram (em particular, o incrível OpenOpt para otimização numérica) eram altamente conceituados, projetos maduros por muito tempo Antes de escolher residir sob a rubrica de scikits relativamente nova. A página inicial do Scikits gostava de incluir acima de cerca de 30 desses scikits. Embora pelo menos vários deles não estejam mais em desenvolvimento ativo. Seguindo este conselho o levaria a scikits-timeseries no entanto, esse pacote não está mais em desenvolvimento ativo. Na verdade, o Pandas tornou-se, a AFAIK, a biblioteca de séries temporais baseada em NumPy. Pandas tem várias funções que podem ser usadas para calcular uma média móvel, o mais simples é provavelmente o padrão de rolamento. Que você usa da mesma forma: Agora, basta chamar a função rollingmean passando no objeto Series e um tamanho de janela. Que no meu exemplo abaixo é de 10 dias. Verifique se funcionou - por exemplo. Comparou os valores de 10 a 15 na série original em relação à nova série suavizada com a média de rolamento. A função rollingmean, juntamente com cerca de uma dúzia de outras funções, são agrupadas informalmente na documentação do Pandas sob as funções da janela de mudança de rubrica, um segundo grupo relacionado de funções Em Pandas é referido como funções ponderadas exponencialmente (por exemplo, ewma. Que calcula a média ponderada exponencialmente móvel). O fato de que este segundo grupo não está incluído na primeira (funções da janela em movimento) é talvez porque as transformações ponderadas exponencialmente não dependem de uma janela de comprimento fixo. Movimento com médias móveis ponderadas exponencialmente Uma média móvel leva uma série de tempo ruidosa e substitui cada valor Com o valor médio de uma vizinhança sobre o valor dado. Esta vizinhança pode consistir em dados puramente históricos, ou pode ser centrada 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 de três pontos igualmente ponderada, 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 ponderada exponencialmente (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 em ter uma janela de três pontos, versus uma janela de cinco pontos, ou se preocupar com a adequação do seu esquema de ponderação. Com o EWMA, as perturbações anteriores foram lembradas, 8221 e 8220, esquecidas rapidamente, 8221 pelo termo na última equação, enquanto que com uma janela ou um bairro com limites discretos, uma perturbaão é esquecida logo que passa para fora da janela. Avaliando o EWMA para acomodar tendências Depois de ler sobre EWMAs em um livro de análise de dados, eu tinha ido feliz usando essa ferramenta em cada aplicativo de suavização que encontrei. Não foi até mais tarde que eu aprendi que a função EWMA é realmente apenas apropriada para dados estacionários, isto é, dados sem tendências ou sazonalidade. Em particular, a função EWMA resiste tendências longe da corrente significa que it8217s já são 8220seen8221. Então, se você tem uma função de chapéu ruidoso que vai de 0, para 1, e depois de volta para 0, então a função EWMA retornará valores baixos no lado ascendente e valores altos no lado de baixo. Uma maneira de contornar isso é suavizar o sinal em ambas as direções, marchando para a frente e, em seguida, marchando para trás, e então a 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 que implementa o método de segunda ordem Holt-Winters em outra função de chapéu ruidoso, como antes. Publicação de navegação Publicações recentesBacktesting um Crossover média móvel em Python com pandas No artigo anterior sobre Ambientes de Backtesting de Pesquisa Em Python Com Pandas, criamos um ambiente de backtesting baseado em pesquisa orientado a objetos e testávamos isso 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 de média móvel na AAPL. Estratégia de Crossover média móvel A técnica de Crossover de média móvel é uma estratégia de impulso simplista extremamente conhecida. Muitas vezes é considerado o exemplo do Hello World para negociação quantitativa. A estratégia descrita aqui é longa apenas. São criados dois filtros de média móvel simples separados, com diferentes períodos de lookback, de uma série temporal específica. Os sinais para comprar o recurso ocorrem quando a média móvel de lookback mais curta excede a média móvel de lookback mais longa. Se a média mais longa exceder a média mais curta, o ativo é vendido de volta. A estratégia funciona bem quando uma série temporal entra em um período de forte tendência e, em seguida, inverte lentamente a tendência. Para este exemplo, escolhi a Apple, Inc. (AAPL) como a série temporal, com um curto lookback de 100 dias e um longo lookback de 400 dias. Este é o exemplo fornecido pela biblioteca de negociação algorítmica de tirolesa. Assim, se quisermos implementar nosso próprio backtester, precisamos garantir que ele coincida com os resultados na linha aérea, 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 esta implementação particular eu 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 sub-classificar a classe básica abstrata Estratégia para produzir MovingAverageCrossStrategy. Que contém todos os detalhes sobre como gerar os sinais quando as médias móveis da AAPL se cruzam. O objeto requer uma janela curta e uma longa janela para operar. Os valores foram configurados 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 pandas rollingmean nas barras. O preço de fechamento fechado do estoque AAPL. Uma vez que as médias móveis individuais foram construídas, a série do sinal é gerada definindo a coluna igual a 1,0 quando a média móvel curta é maior do que a média móvel longa, ou 0,0 caso contrário. A partir disso, as ordens de posições podem ser geradas para representar sinais de negociação. O MarketOnClosePortfolio é subclassado do Portfolio. Que é encontrado em backtest. py. É quase idêntico à implementação descrita no tutorial anterior, com a exceção de que os negócios são agora realizados em uma base Close-to-Close, em vez de Open-to-Open. Para obter detalhes sobre como o objeto Portfolio está definido, consulte o tutorial anterior. Eu deixei o código em completo e mantenho esse tutorial autônomo. Agora que as classes MovingAverageCrossStrategy e MarketOnClosePortfolio foram definidas, uma função principal será chamada para amarrar toda a funcionalidade em conjunto. Além disso, o desempenho da estratégia será examinado através de um gráfico da curva de equidade. O objeto DataReader de pandas baixa os preços de ações da AAPL da OHLCV para o período de 1º de janeiro de 1990 a 1º de janeiro de 2002, em que ponto os sinais DataFrame são criados para gerar os sinais de longo tempo. Posteriormente, o portfólio é gerado com uma base de capital inicial de 100.000 USD e os retornos são calculados na curva de patrimônio. O passo final é usar matplotlib para plotar um gráfico de dois dígitos de ambos os preços AAPL, superado com as médias móveis e os sinais de buysell, bem como a curva de equidade com os mesmos sinais de compra. O código de plotagem é tomado (e modificado) do exemplo de implementação de tirolesa. A saída gráfica do código é a seguinte. Eu usei o comando de pasta IPython para colocar isso diretamente no console do IPython, enquanto no Ubuntu, de modo que a saída gráfica permaneceu em exibição. As barras-de-rosa cor-de-rosa representam a compra do estoque, enquanto os bastões negros representam vendê-lo de volta: como pode ser visto, a estratégia perde dinheiro durante o período, com cinco comércios de ida e volta. Isso não é surpreendente, dado o comportamento da AAPL durante o período, que estava em uma ligeira tendência descendente, seguido de um aumento significativo em 1998. O período de lookback dos sinais da média móvel é bastante grande e isso impactou o lucro do comércio final , O que de outra forma pode ter tornado a estratégia rentável. Em artigos subseqüentes, criaremos um meio mais sofisticado de análise de desempenho, bem como descrevendo como otimizar os períodos de lookback dos sinais individuais de média móvel.

No comments:

Post a Comment