Wednesday 23 August 2017

Pandas Em Python Médios Móveis


Existe um objeto Pandas DataFrame com alguns dados de estoque. As SMAs são médias móveis calculadas a partir de 4515 dias anteriores. Quero encontrar todas as datas, quando SMA15 e SMA45 se cruzam. Pode ser feito de forma eficiente usando Pandas ou Numpy Como o que quero dizer por interseção: a linha de dados, quando: o valor SMA (45) longo foi maior do que o valor SMA curto (15) por um período SMA mais longo do que curto (15) e tornou-se menor . O valor longo do SMA (45) foi menor do que o valor curto de SMA (15) por um período SMA mais longo do que curto (15) e tornou-se maior. Perguntou 5 de fevereiro às 13:31 Isso realmente não respondeu à pergunta da DSM39. Você precisa definir o que você quer dizer interceptar. Se você quer dizer interseção, então isso implicaria que você quer todos os valores que ocorrem tanto no SMA45 quanto no SMA15, independentemente de eles ocorrerem no mesmo dia. Ou talvez você só queira uma interseção de seus valores no mesmo dia. Sua pergunta, como está atualmente, apresenta muita ambigüidade para receber uma resposta focada. Ndash auslacy 5 de fevereiro 15 às 13:46 chilliq: isso não responde a pergunta. Existem muitas coisas que você pode querer dizer com quotintersectquot: (1) concordar (ser igual), possivelmente dentro de alguma tolerância (2) 39crossover39, como no título da pergunta, no sentido de que SMA45 gt SMA15 é verdadeiro em uma data, mas SMA45 SMA15 no próximo, e as linhas se cruzaram e assim por diante. Talvez isso ajudasse se você mostrasse a maneira ineficiente de fazer isso que você tinha em mente. Ndash DSM 5 de fevereiro de 15 às 13:48 Estou tendo um crossover para significar quando as linhas SMA - como funções do tempo - se cruzam, conforme descrito nesta página do inqualopedia. Uma vez que os SMAs representam funções contínuas, há um cruzamento quando, para uma determinada linha, (SMA15 é inferior a SMA45) e (o SMA15 anterior é maior do que o SMA45 anterior) - ou vice-versa. No código, isso pode ser expresso como Se nós mudarmos seus dados para que haja cruzamentos, Operações de Colunas de Pandas (operações básicas de matemática e médias móveis). Neste vídeo tutorial Pandas com Python com código de exemplo, cobrimos alguns dos rápidos e básicos Operações que podemos realizar nos nossos dados. Digamos que você tenha um conjunto de dados para o qual você deseja adicionar uma média móvel, ou talvez queira fazer alguns cálculos matemáticos com base em alguns bits de dados em outras colunas, adicionando o resultado a uma nova coluna. Vamos ver como podemos fazer isso: Todos os itens acima devem ser entendidos, já que já foram cobertos até este ponto. Agora, vamos fazer uma nova coluna, chamando H-L, onde os dados na coluna são o resultado do preço alto menos o preço baixo. Aqui, bem como você faria com um dicionário, nós definimos um novo objeto em nossos dados da Pandas, nomeando H-L. A partir daí, dizemos que o valor desse objeto H-L é (df. High - df. Low). Ainda não foi criado, mas isso é realmente muito interessante que podemos fazer isso, mas também pode ser confuso. Podemos também dizer dfH-L dfHigh - dfLow, mas, uma vez que Pandas é tão fortemente baseado em objetos, também conseguiu fazer referência a ele puramente como um objeto. É até você como você quer fazê-lo. Eu prefiro tratá-lo como um objeto, já que isso é o que é. Depois de executar isso, podemos ver, imprimindo a cabeça (), que temos uma nova e agradável coluna contendo nossos novos dados. Isso é bom, mas e quanto a referenciar dados anteriores em outras colunas. Podemos fazê-lo. Eu quero fazer uma média móvel. Claro nós podemos. As médias móveis são, de fato, incorporadas em Pandas, chamado rollingmean. Acima, nós definimos mais uma coluna, como nós podemos um dicionário, e disse que a coluna é igual a df. rollingmean () do preço de fechamento. Nosso segundo parâmetro aqui é o prazo para esta média móvel. Então, nós apenas imprimimos uma fatia dos dados, do elemento 200 ao 210. Nós realmente não podemos fazer df. head () aqui. Poderíamos, mas os dados para o 100MA não seriam calculados até que tivéssemos 100 partes de dados para calcular. Outra função incorporada interessante com Pandas é diff (): Com a função diff (), foram capazes de calcular a diferença, ou alterar a partir do valor anterior, para uma coluna. Então, há algumas operações básicas e uma introdução inicial para algumas manipulações de dados e análises com Pandas. Eu acho que você provavelmente está vendo agora o quão impressionante este módulo é. Backtesting 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 um 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