Mudança Média Python Pandas


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 uma estratégia de previsão aleatória. Neste artigo, faremos uso das máquinas que introduzimos para realizar pesquisas sobre uma estratégia real, a saber, o Cromo 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 de tempo entra em um período de forte tendência e depois 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 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 inicial do objeto 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 de base abstrata da 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 utilizados no exemplo principal de tirolesa. As médias móveis são criadas usando a função pandas rollingmean nas barras fechar o preço de fechamento do estoque AAPL. Uma vez que as médias móveis individuais foram construídas, a Série de 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 de 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 este tutorial autônomo. Agora que as classes MovingAverageCrossStrategy e MarketOnClosePortfolio foram definidas, uma função principal será chamada para amarrar todas as funcionalidades 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, momento em que 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 equivalência patrimonial. O passo final é usar matplotlib para plotar um gráfico de dois dígitos de ambos os preços da AAPL, superados 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 traçado é 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 IPython, enquanto no Ubuntu, de modo que a saída gráfica permaneça em exibição. As barras-de-rosa cor-de-rosa representam a compra do estoque, enquanto os baixos negros representam vendê-lo de volta: como pode ser visto, a estratégia perde dinheiro ao longo do período, com cinco comércios 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 descendente, seguido por um aumento significativo em 1998. O período de lookback dos sinais de 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 médios móveis individuais. Existe um objeto Pandas DataFrame com alguns dados de estoque. 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 curto SMA (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 que o 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 definida, 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 ambiguidade 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 significar por 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 assim as linhas se cruzaram e assim por diante. Talvez isso ajude se você mostrou 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 de investitopedia. 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 que o SMA45 anterior) - ou vice-versa. No código, isso pode ser expresso como Se mudarmos seus dados para que haja cruzamentos,

Comments

Popular Posts