Monday 27 November 2017

Mover média python pandas


Backtesting um Crossover Médio Móvel em Python com pandas. No artigo anterior sobre Backtesting de Investigação Ambientes Em Python Com Pandas criamos um ambiente de backtesting baseado em pesquisa orientado a objeto e testado em uma estratégia de previsão aleatória Neste artigo vamos fazer uso do Maquinaria que nós introduzimos para realizar a pesquisa em uma estratégia real, a saber o Crossover médio movente em AAPL. Moving Crossover médio Strategy. The Moving Crossover média técnica é uma estratégia extremamente bem conhecida do momento momentum É considerado frequentemente o exemplo do mundo do Hello para o comércio quantitativo . A estratégia descrita aqui é longa apenas dois filtros de média simples simples separados são criados, com períodos de lookback variando, de uma série de tempo particular. 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 longo. Média é, posteriormente, superior à média mais curta, o activo é vendido de volta. 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 Apple, Inc AAPL como a série de tempo, com um lookback curto de 100 dias e um longo lookback de 400 dias Isto é O exemplo fornecido pela biblioteca de negociação algorítmica de tirolesa Assim, se quisermos implementar nosso próprio backtester, precisamos garantir que ele corresponda aos resultados em tirolesa, como um meio básico de validação. Certifique-se de seguir o tutorial anterior aqui que descreve como a inicial A hierarquia de objeto para o backtester é construída, caso contrário, o código abaixo não funcionará Para esta implementação em particular eu usei as seguintes bibliotecas. A implementação de requer do tutorial anterior A primeira etapa é importar os módulos e objects. As necessários no anterior Tutorial vamos subclasse a Estratégia base de classe abstrata para produzir MovingAverageCrossStrategy que contém todos os detalhes sobre como gerar os sinais quando a movimentação av Os valores foram definidos para padrões de 100 dias e 400 dias, respectivamente, que são os mesmos parâmetros usados ​​no exemplo principal de tirolesa. A movimentação As médias são criadas usando a função rollingmean das pandas nas barras Fechar preço de fechamento do estoque AAPL Depois que as médias móveis individuais foram construídas, o sinal Série é gerado estabelecendo a colum igual a 1 0 quando a média curta móvel é maior do que a média A média móvel longa, ou 0 0 caso contrário, a partir destas ordens de posições podem ser gerados para representar sinais de negociação. O MarketOnClosePortfolio é subclassificado do portfólio que é encontrado em É quase idêntico à implementação descrita no tutorial anterior, com a exceção de que os comércios São agora realizadas em uma base Close-to-Close, em vez de uma base Open-to-Open Para detalhes sobre como o objeto Portfolio está definido, Utorial Eu deixei o código dentro para a integridade e para manter este tutorial self-contained. Now que as classes MovingAverageCrossStrategy e MarketOnClosePortfolio foram definidas, uma função principal será chamada para amarrar toda a funcionalidade junto Além disso o desempenho da estratégia será Ser examinado através de uma trama da curva de equidade. O objeto pandas DataReader downloads OHLCV preços de ações AAPL para o período de janeiro de 1990 a 01 de janeiro de 2002, momento em que os sinais DataFrame é criado para gerar os sinais de apenas longos Subseqüentemente o portfólio é Gerado com uma base de capital inicial de 100.000 USD e os retornos são calculados na curva de equidade. A etapa final é usar matplotlib para traçar um gráfico de dois dígitos dos preços da AAPL, sobreposto com as médias móveis e comprar sinais de venda, bem como A curva de equidade com os mesmos sinais de venda de compra O código de plotagem é tomado e modificado a partir do exemplo de implementação de tirolesa. A saída gráfica do código é a seguinte I mad E uso do comando IPython colar para colocar isso diretamente no console IPython, enquanto no Ubuntu, de modo que a saída gráfica permaneceu em vista Os upticks rosa representam a compra do estoque, enquanto os downticks pretos representam vendê-lo de volta. AAPL Moving Average Crossover Performance from 1990-01-01 a 2002-01-01.Como se pode ver a estratégia perde dinheiro durante o período, com cinco negócios de ida e volta Isso não é surpreendente, dado o comportamento da AAPL ao longo do período, que estava em uma ligeira tendência de queda , Seguido por um aumento significativo início em 1998. O período de lookback dos sinais de média móvel é bastante grande e isso afetou o lucro do comércio final, o que de outra forma pode ter feito a estratégia rentável. Em artigos subseqüentes vamos criar um meio mais sofisticado de Analisando o desempenho, bem como descrevendo como otimizar os períodos de lookback dos sinais individuais de média móvel. Apenas começando com Quantitative Trading. Smoothing com Exponentially Weig A média móvel toma uma série de tempo ruidosa e substitui cada valor pelo valor médio de uma vizinhança sobre o valor dado. Essa vizinhança pode consistir em dados puramente históricos ou pode ser centrada sobre o valor dado. Além disso, os valores em A vizinhança pode ser ponderada usando diferentes conjuntos de pesos Aqui está um exemplo de uma média móvel igualmente ponderada de três pontos, usando dados históricos. Aqui, representa o sinal suavizado e representa a série de tempo ruidoso Em contraste com as médias móveis simples, uma ponderação exponencial A média móvel EWMA ajusta um valor de acordo com uma soma exponencialmente ponderada de todos os valores anteriores Esta é a idéia básica. Isto é bom porque você don t tem que se preocupar com 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 lembradas, e lentamente esquecidas, 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 window. Averaging o EWMA para acomodar 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 Eu 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 de distância da média atual que já foi visto Então, se Você tem uma função de som ruidoso 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 cima-colina e valores altos no lado de baixo-colina Uma maneira de contornar isso é Para suavizar o sinal em ambas as direções, marchando para a frente e, em seguida, marchar para trás e, em seguida, média dos dois Aqui, vamos usar a função EWMA fornecida pelo módulo pandas. Holt-Winters segunda ordem EWMA. O Holt-Winters segunda ordem encontrada Hod tenta incorporar a tendência estimada nos dados suavizados, usando um termo que mantém o controle da inclinação do sinal original. O sinal suavizado é escrito para o termo. E aqui está algum código Python que implementa o método de segunda ordem de Holt-Winters em outro Ruidoso hat função, como before. Post navegação. Recent Postsputational tools. Analogously, DataFrame tem um cov método para calcular covariâncias pairwise entre as séries no DataFrame, também excluindo NA valores nulos. Assumir os dados ausentes estão faltando ao acaso isso resulta em um 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 poderia levar a correlações estimadas com valores absolutos que são maiores do que um, e ou Uma matriz de covariância não-inversível Veja Estimativa de matrizes de covariância para mais detalhes. 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 para ter um resultado válido. Os pesos usados ​​na janela são especificados pela palavra-chave wintype A lista de tipos reconhecidos are. kaiser precisa de beta. gaussian Necessidades std. generalgaussian precisa de energia, width. slepian necessidades width. Note que a janela boxcar é equivalente a mean. For algumas funções de janelas, parâmetros adicionais devem ser specified. For com um wintype não há normalização feito para os pesos para a janela Passando Os pesos personalizados de 1, 1, 1 produzirão um resultado diferente do que os pesos de passagem de 2, 2, 2 por exemplo Ao passar um wintype em vez de especificar explicitamente os pesos, os pesos já estão normalizados de modo que o maior peso seja 1. Em contraste , A natureza do cálculo é 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. New na versão 0 19 0.Ne W na versão 0 19 0 são a capacidade de passar um deslocamento ou conversível para um método 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 que ocorrem dentro do delta tempo indicado. Ser particularmente útil para um índice de freqüê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 janela frequency. Specifying um deslocamento permite uma especificação mais intuitiva da freqüência de rolamento. Usando um não regular, Mas ainda índice monotônico, rolando com uma janela de número inteiro não transmitir qualquer cálculo especial. Usando a especificação de tempo gera janelas variáveis ​​para este dados escassa. Além disso, agora permitem um parâmetro opcional para especificar uma coluna em vez do padrão do índice Em um DataFrame. Time-cientes Rolling vs Resampling. Using com um índice baseado em tempo é bastante semelhante à reamostragem Ambos operam e executar operações redutoras em pa indexadas no tempo Ndas objetos. Quando usar com um deslocamento O deslocamento é um tempo-delta Tome uma janela olhando para trás-em-tempo, e agregam todos os valores nessa janela, incluindo o ponto final, mas não o ponto de início Este é o novo Valor naquele 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 com um deslocamento Construa um novo índice que seja a freqüência do deslocamento Para Cada intervalo de freqüência, pontos agregados a partir da entrada dentro de uma janela olhando para trás em tempo que caem naquele bin O resultado desta agregação é a saída para esse 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 rolando é uma operação de janela baseada em tempo, enquanto é uma operação de janela baseada em freqüência. Centering Windows. Por padrão as etiquetas são definidas para a borda direita Da janela, mas um Center está disponível para que os rótulos possam ser definidos no center. Binary Functions. cov janela e corr pode calcular as estatísticas janela em movimento sobre duas séries ou qualquer combinação de DataFrame Series ou DataFrame DataFrame Aqui está o comportamento em cada caso. Estatística para o emparelhamento. DataFrame Series calcular as estatísticas para cada coluna do DataFrame com a série passada, retornando assim um DataFrame. DataFrame DataFrame por padrão calcular a estatística para correspondência nomes de colunas, retornando um DataFrame Se o argumento de palavra-chave, Calcula a estatística para cada par de colunas, devolvendo um Painel cujos itens são as datas em questão ver a próxima seção processando rolar pairwise covariâncias e correlações. Em análise de dados financeiros e outros campos é comum para calcular covariância e matrizes de correlação para uma coleção de tempo Série Muitas vezes também está interessado em covariância de janela móvel e matrizes de correlação Isso pode ser feito por pa Ssing o argumento de palavra-chave pairwise, que no caso de entradas DataFrame irá produzir 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. Missing valores são ignorados e cada entrada é calculada usando As observações completas pairwise Consulte a seção de covariância para advertências associadas com 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 Como acima, os parâmetros que todos aceitam are. minperiods Limiar de pontos de dados não nulos para exigir Padrões ao mínimo necessário para calcular estatística Nenhum NaNs será emitido uma vez que os pontos de dados não nulos de minperiods tenham sido vistos. centro booleano, se definir os rótulos no centro padrão é False. Os métodos e não retornar um NaN se há pelo menos minperiods valores não nulos na janela atual Isso difere de cumsum cumprod cumma X e cummin que retornam NaN na saída onde quer que um NaN seja encontrado na entrada. Uma estatística de janela de expansão será mais estável e menos responsiva do que a sua contrapartida de janela de rolamento como o tamanho de janela crescente diminui o impacto relativo de um ponto de dados individual. Exemplo, aqui está a saída média para o conjunto de dados de séries temporais anteriores. Exponencialmente ponderada Windows. A conjunto de funções relacionadas são exponencialmente ponderada versões de várias das estatísticas acima Uma interface semelhante e é acessado através do método para receber um objeto EWM Um número De expansão EW exponencialmente ponderada métodos são fornecidos.

No comments:

Post a Comment