Tuesday 12 September 2017

Python Médio Móvel Simples


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 subsequentes, 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. Por isso estou escrevendo uma classe que calculará uma média móvel simples em uma lista de preços. Calcula a média a cada N número de preços sem calcular os primeiros N-1 dias. Isto é o que eu tenho: eu testei ele fazendo um objeto de classe no shell x Simplemovingaverage (3, 1,2,3,4,5,6,7,8,9,10) e depois fazendo o método de cálculo por x. calcular a saída que recebi foi: então, da minha lista de números, só calcula até 7,8,9, o último número deve ser 9, porque essa é a média de 8,9,10 e também deve haver apenas 3 zeros desde N É 3. Esta é a saída Estou à procura: perguntou 18 de fevereiro 14 em 5: 32 Estou jogando em Python um pouco novamente, e eu encontrei um livro limpo com exemplos. Um dos exemplos é traçar alguns dados. Eu tenho um arquivo. txt com duas colunas e eu tenho os dados. Eu planejei os dados bem, mas no exercício que diz: Modifique seu programa para calcular e traçar a média de execução dos dados, definida por: onde r5 neste caso (e o yk é a segunda coluna no arquivo de dados) . Peça ao programa que trace os dados originais e a média de corrida no mesmo gráfico. Até agora eu tenho isso: Então, como faço para calcular a soma Em Mathematica é simples desde a manipulação simbólica (Sumi, por exemplo), mas como calcular a soma em python, que leva cada dez pontos nos dados e a média, e faz isso Até o final dos pontos eu olhei para o livro, mas não encontrei nada que explicasse isso: o código da Heltonbikers fez o truque: D Muito obrigado :) Existe um problema com a resposta aceita. Eu acho que precisamos usar o válido em vez do mesmo aqui - retornar numpy. convolve (intervalo, janela, o mesmo). Como um exemplo, experimente a MA desse conjunto de dados 1,5,7,2,6,7,8,2,2,7,8,3,7,3,7,3,15,6 - o resultado Deve ser de 4,2,5,4,6,0,5,0,5,0,5,2,5,4,4,4,5,4,5,6,5,6,4,6,7.0,6.8. Mas ter o mesmo dá-nos uma saída incorreta de 2.6,3.0,4.2,5.4,6.0,5.0,5.0,5.2,5.4,4.4,5.4,5.6,5.6, 4.6,7.0,6.8,6.2,4.8 Código oxidado para tentar isso -: Tente com um válido amplificador e veja se a matemática faz sentido. Respondeu 29 de outubro 14 às 4:27 Haven39t tentou isso, mas eu vou olhar para ele, faz um tempo desde que eu fui codificado em Python. Ndash dingod 29 de outubro 14 às 7:07 dingod Por que não tenta rapidamente isso com o código oxidado (e o conjunto de dados de amostra (como uma lista simples), publiquei. Para algumas pessoas preguiçosas (como eu já estive no início) - está mascarando o fato de que a média móvel está incorreta. Provavelmente, você deve considerar editar sua resposta original. Eu tentei isso ontem e a verificação dupla me salvou cara de parecer mal em relatar ao nível Cxo. Tudo o que você precisa fazer é tentar Sua mesma média móvel uma vez com quotvalidquot e outra vez com quotsamequot - e uma vez que você está convencido me dê algum amor (aka-up-vote) ndash ekta 29 de outubro às 7:16

No comments:

Post a Comment