Estratégia de negociação backtest python


estratégia de negociação Backtest python
Puxe pedidos 0.
Participe do GitHub hoje.
O GitHub é o lar de mais de 20 milhões de desenvolvedores que trabalham juntos para hospedar e rever o código, gerenciar projetos e criar software juntos.
Clone com HTTPS.
Use o Git ou o check-out com o SVN usando o URL da web.
Stock (SYMBOL) instancia um objeto contendo preços históricos para um SÍMBOLO desde 2001. Um objeto de estoque é semelhante a uma lista de objetos Tick.
Stock. plot é um método de instância versátil que permite traçar atributos Tick.
Marque os atributos que você deseja traçar:
Para plotar o valor de fechamento e a banda Bollinger superior e inferior para N = 30 e K = 1:
Ele salvará o gráfico no arquivo png / GOOG. png.
BackTest () instancia um objeto de backtesting. por exemplo. backtest = BackTest ()
Uma estratégia é um objeto invocável que aceita um objeto Tick como um argumento e retorna a compra, Nenhuma ou a venda.
Para voltar a testar a estratégia bollinger contra o estoque goog:
Para plotar PNL (rede) e posição (longo /. / Curto) ao longo do tempo, recorde BackTest. plot:
Ele salvará o enredo no arquivo png / GOOG_Bollinger. png.
Backtest. cost deve ser uma função assumindo um valor comercial como argumento e devolvendo um custo. Por padrão, não há custo de negociação, mas ainda é muito fácil de mudar:
Factará em 0,5% de custo de negociação para o cálculo PNL líquido.
&cópia de; 2018 GitHub, Inc. Termos Privacidade Segurança Status Ajuda.
Você não pode executar essa ação neste momento.
Você fez login com outra guia ou janela. Recarregue para atualizar sua sessão. Você se separou em outra guia ou janela. Recarregue para atualizar sua sessão.

bt - Backtesting flexível para Python¶
O que é bt? ¶
bt é um framework flexível de backtesting para Python usado para testar estratégias de negociação quantitativas. Backtesting é o processo de testar uma estratégia em um dado conjunto de dados. Esta estrutura permite que você crie facilmente estratégias que combinam e combinam diferentes Algos. Ele visa promover a criação de blocos de lógica de estratégia facilmente testáveis, reutilizáveis ​​e flexíveis para facilitar o rápido desenvolvimento de estratégias comerciais complexas.
O objetivo: salvar quants de reinventar a roda e deixá-los concentrar-se na parte importante do trabalho - desenvolvimento da estratégia.
bt é codificado em Python e se junta a um ecossistema vibrante e rico para análise de dados. Existem inúmeras bibliotecas para aprendizado de máquina, processamento de sinal e estatísticas e podem ser alavancadas para evitar reinventar a roda - algo que acontece muitas vezes ao usar outras linguagens que não têm a mesma riqueza de alta qualidade, projetos de fontes.
bt é construído em cima do ffn - uma biblioteca de funções financeiras para Python. Confira!
Um exemplo rápido¶
Aqui está um gosto rápido de bt:
Um Backtest de Estratégia Simples¶
Vamos criar uma estratégia simples. Criaremos uma estratégia mensal reequilibrada e de longa duração, onde colocamos pesos iguais em cada ativo em nosso universo de ativos.
Primeiro, vamos baixar alguns dados. Por padrão, bt. get (alias para ffn. get) baixa o Fechar ajustado do Yahoo! Finança. Vamos baixar alguns dados a partir de 1º de janeiro de 2018 para os propósitos desta demonstração.
Uma vez que possamos nossos dados, criaremos nossa estratégia. O objeto Estratégia contém a lógica estratégica ao combinar vários Algos.
Finalmente, vamos criar um Backtest, que é a combinação lógica de uma estratégia com um conjunto de dados.
Uma vez feito isso, podemos executar o backtest e analisar os resultados.
Agora, podemos analisar os resultados do nosso backtest. O objeto Result é um wrapper fino em torno de ffn. GroupStats que adiciona alguns métodos auxiliares.
Modificando uma Estratégia¶
Agora, e se fizéssemos essa estratégia semanalmente e também usássemos alguma abordagem de estilo de paridade de risco usando pesos que são proporcionais ao inverso da volatilidade de cada ativo? Bem, tudo o que temos a fazer é ligar alguns algos diferentes. Ver abaixo:
Como você pode ver, a lógica da estratégia é fácil de entender e, mais importante, fácil de modificar. A idéia de usar Algos simples e composíveis para criar estratégias é um dos principais blocos de construção do bt.
Estrutura da árvore A estrutura da árvore facilita a construção e composição de estratégias complexas de negociação algorítmica que são modulares e reutilizáveis. Além disso, cada nó de árvore possui seu próprio índice de preços que pode ser usado por Algos para determinar a alocação de um nó & # 8217; s. Algorithm Stacks Algos e AlgoStacks são outras características principais que facilitam a criação de lógica de estratégia modular e reutilizável. Devido à sua modularidade, esses blocos de lógica também são mais fáceis de testar - um passo importante na construção de soluções financeiras robustas. Charting and Reporting bt também fornece muitas funções de gráficos úteis que ajudam a visualizar os resultados do backtest. Também planejamos adicionar mais gráficos, tabelas e formatos de relatório no futuro, como relatórios PDF gerados automaticamente. Estatísticas detalhadas Além disso, bt calcula um monte de estatísticas relacionadas a um backtest e oferece uma maneira rápida de comparar essas várias estatísticas em vários backtests diferentes através dos métodos de exibição dos resultados.
Futuros esforços de desenvolvimento incidirão em:
Velocidade Devido à natureza flexível do bt, um trade-off teve que ser feito entre usabilidade e desempenho. A usabilidade sempre será a prioridade, mas desejamos melhorar o desempenho tanto quanto possível. Algos Também desenvolveremos mais algoritmos com o passar do tempo. Também incentivamos alguém a contribuir com seus próprios algos também. Cartografia e Relatórios Esta é outra área que desejamos melhorar constantemente, pois o relatório é um aspecto importante do trabalho. A elaboração de gráficos e relatórios também facilitam a descoberta de erros na lógica da estratégia.

Jon V.
BigData. Iniciantes. Negociação.
BigData. Iniciantes. Negociação.
Construindo um sistema backtesting em Python: ou como perdi $ 3400 em duas horas.
Construir um sistema de backtest é realmente muito fácil. Fácil de estragar, quero dizer. Embora existam toneladas de excelentes bibliotecas por aí (e as abordaremos em algum momento), eu sempre gosto de fazer isso por conta própria para ajustá-la.
De todos os sistemas backtesting que eu vi, podemos assumir que existem duas categorias:
Hoje, falaremos sobre "loopers".
Os "for-loopers" são o meu tipo favorito de backtesters. Eles são triviais para escrever e super divertidos para expandir, mas eles têm alguns fluxos vitais e, infelizmente, a maioria dos backtesters lá fora é "for-loopers" (ps: Eu preciso encontrar um nome melhor para isso!).
Como funciona o looping? Usando um loop for (como você pode ter adivinhado). É algo assim:
Muito simples, certo? É assim que funciona um sistema de backtesting, que executa uma estratégia de impulso:
Então qual é o problema?
Muito difícil de escalar (horizontalmente) Precisa de muito trabalho para manter sua estratégia de aplicação () trabalhando no backtesting e na produção Você precisa ter tudo na mesma linguagem de programação.
Vamos mergulhar nessas, uma a uma.
Escalabilidade. Eu estava experimentando um par de semanas atrás com um algoritmo de escalada de colina para otimizar uma das minhas estratégias. Ainda está em execução. Depois de duas semanas. E eu construo sistemas robustos para uma vida. Por que ainda está funcionando? Você pode usar multiprocessamento, Disco, produtor / consumidor (usando o ZeroMQ) ou apenas threads para acelerar isso, mas alguns problemas não são "paralisações embaraçosas" (sim, este é um termo real, e não uma das minhas palavras inventadas). A quantidade de trabalho para escalar um backtester como esse (especialmente quando você quer fazer a mesma máquina aprendendo em cima dela) é enorme. Você pode fazê-lo, mas é o caminho errado.
Produção e backtesting em sincronia. As vezes que fui mordido por isso. Posso recordar as trocas perdidas onde eu estava "hm, por que eu entrei nesse comércio?" ou o meu antigo favorito "POR QUE A PARADA DE REALIZAÇÃO FOI APLICADA AGORA?".
Tempo da história: tive uma ideia para otimizar minha estratégia, para executar um backtester para ver o que aconteceria se eu pudesse colocar uma parada posterior depois que o comércio fosse rentável para garantir sempre lucros. Backtesting funcionou como um charme com um aumento de 13% nos ganhos e a produção perdeu todo comércio. Descobri que depois do meu algo perdi US $ 3400 em algumas horas (uma lição muito cara).
Manter a estratégia apply_strategy em sincronia é muito difícil e torna-se quase impossível quando você deseja fazê-lo de forma distribuída. E você não quer ter duas versões de sua estratégia que sejam "quase" idênticas. A menos que você tenha US $ 3400 de sobra.
Usando diferentes idiomas, adoro Python. E Erlang. E Clojure. E J. E C. E R. E Ruby (na verdade eu odeio Ruby). Eu quero poder aproveitar a força de outros idiomas no meu sistema. Quero experimentar estratégias em R onde há bibliotecas muito bem testadas e há uma enorme comunidade por trás disso. Eu quero ter Erlang para escalar meu código e C para crunch dados. Se você quer ser bem sucedido (não apenas na negociação), você precisa usar todos os recursos disponíveis sem prejuízos. Aprendi toneladas de coisas de sair com os desenvolvedores R sobre como você pode delta hedge bonds e visualizá-los ou por que razão Sharpe pode ser uma mentira. Todo idioma tem uma multidão diferente e você quer que muitas pessoas despejam idéias em seu sistema. Se você tentar aplicar a estratégia apply_strategy em idioma diferente, então, boa sorte com (2).
Você está convencido agora? Bem, eu não estou tentando convencê-lo como for-loopers é uma ótima maneira de executar seus testes iniciais. É como eu comecei e, para muitas estratégias, não as envio para o pipeline. Um "melhor" caminho (para que você possa dormir à noite) são os geradores de eventos.
Próximamente, compartilhando e discutindo meu backtester mais simples (mas com maior sucesso)!
Se você tiver mais comentários, clique-me no jonromero ou inscreva-se no boletim informativo.
Legal outro. Este é um tutorial de engenharia sobre como construir uma plataforma algotrading para experimentação e FUN. Qualquer sugestão aqui não é um conselho financeiro. Se você perder qualquer (ou todos) o seu dinheiro porque seguiu quaisquer conselhos de negociação ou implantou este sistema na produção, não pode culpar este blog aleatório (e / ou eu). Aproveite a seu próprio risco.

QuantStart.
Junte-se ao portal de membros privados da Quantcademy que atende à comunidade de comerciantes de varejo de varejo em rápido crescimento. Você encontrará um grupo bem informado de mentalistas quant pronto para responder suas perguntas comerciais mais importantes.
Confira meu ebook sobre o comércio de quant, onde eu ensino você como criar estratégias de negociação sistemáticas lucrativas com ferramentas Python, desde o início.
Dê uma olhada no meu novo ebook sobre estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas bayesianas, com Python e R.
Por Michael Halls-Moore em 21 de janeiro de 2018.
No artigo anterior sobre Ambientes de Análise de Análise 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, ou seja, o Crossover de média móvel na AAPL.
Estratégia de Crossover Média em Movimento.
A técnica de Crossover de média móvel é uma estratégia de impulso simplista extremamente conhecida. Muitas vezes, é considerado o exemplo do "Olá Mundo" 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 o 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 usei as seguintes bibliotecas:
A implementação do ma_cross. 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 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 um short_window e um long_window sobre o qual 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 rolling_mean nas barras ['Fechar'] preço de fechamento do estoque da 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 comerciais.
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 __main__ 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 transfere 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 patrimônio.
O passo final é usar matplotlib para plotar um gráfico de dois dígitos de ambos os preços da AAPL, superado com as médias móveis e os sinais de compra / venda, bem como a curva de equidade com os mesmos sinais de compra / venda. 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. Utilizei o comando IPython% paste para colocar isso diretamente no console IPython, enquanto no Ubuntu, de modo que a saída gráfica permaneça em exibição. Os roseticks cor-de-rosa representam a compra do estoque, enquanto os bastões negros representam a venda de volta:
AAPL Moving Average Crossover Performance de 1990-01-01 a 2002-01-01.
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 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 subsequentes, criaremos um meio mais sofisticado de análise de desempenho, além de descrever como otimizar os períodos de lookback dos sinais de média móvel individual.
Apenas iniciando o comércio quantitativo?
3 razões para se inscrever para a lista de e-mails QuantStart:
1. Quant Trading Lessons.
Você terá acesso instantâneo a um curso de e-mail gratuito de 10 partes, repleto de sugestões e dicas para ajudá-lo a começar a negociação quantitativa!
2. Todo o conteúdo mais recente.
Todas as semanas, vou enviar-lhe um envoltório de todas as atividades no QuantStart para que você nunca mais perca uma postagem novamente.
Real, dicas de negociação viáveis, sem tonturas.

estratégia de negociação Backtest python
Pegue os pedidos 7.
Participe do GitHub hoje.
O GitHub é o lar de mais de 20 milhões de desenvolvedores que trabalham juntos para hospedar e rever o código, gerenciar projetos e criar software juntos.
Clone com HTTPS.
Use o Git ou o check-out com o SVN usando o URL da web.
Com a versão 1.9.50.117 amostras de dados e feeds de dados do YahooFinance foram atualizados para a última informação disponível. Mas sendo o formato não documentado, ainda pode haver mudanças e cantos inesperados.
Aqui, um trecho de um CrossOver médio simples simples. Isso pode ser feito de várias maneiras diferentes. Use os documentos (e exemplos) Luke!
Incluindo um gráfico completo. De uma chance! Isso está incluído nas amostras como sigsmacross / sigsmacross2.py. Ao longo é sigsmacross. py, que pode ser parametrizado a partir da linha de comando.
Live Trading e backtesting plataforma escrita em Python.
Feed de dados ao vivo e negociação com corretores interativos (precisa de IbPy e beneficia muito de uma pira instalada) Gráfico visual (precisa de um garfo de comtypes até que uma solicitação de tração seja integrada na versão e benefícios de pira) Oanda (precisa de oatoterapia) (apenas API REST - v20 não suportou a transmissão em sequência quando implementado) Os feeds de dados de csv / arquivos, fontes on-line ou de pandas e chama Filtros para dados (como quebrar uma barra diária em pedaços para simular intradía) Múltiplos fluxos de dados e estratégias múltiplas suportadas Múltiplos cronogramas ao mesmo tempo Integrados Resampling e Repetição Step-Step backtesting ou de uma só vez (exceto na avaliação da Estratégia) Bateria de indicadores integrada Suporte do indicador TA-Lib (precisa de python ta-lib / verificar os documentos) Desenvolvimento fácil de indicadores personalizados Analisadores (por exemplo: TimeReturn , Ratio de Sharpe, SQN) e integração do pacto. Definição flexível dos esquemas de comissão. Simulação de corretores integrada com Mercado, Close, Limit, Stop, StopLimit, StopTrail, StopTrailLimit * e * OCO, ordens, deslizamento e ajuste contínuo de caixa para instrumentos futuros. Plotting (requer matplotlib)
Leia a documentação completa em:
Lista de indicadores embutidos (116)
Python 2.7 Python 3.2 / 3.3 / 3.4 / 3.5 / 3.6 Também funciona com pypy e pypy3 (sem traçado - matplotlib não é suportado em pypy)
A compatibilidade é testada durante o desenvolvimento com 2.7 e 3.5.
As outras versões são testadas automaticamente com Travis.
O backtrader é autônomo sem dependências externas (exceto se desejar traçar)
pip instalar backtrader.
pip instalar backtrader [plotting]
Se matplotlib não estiver instalado e você deseja fazer algum planejamento.
A versão mínima matplotlib é 1.4.1.
Um exemplo para IB Data Feeds / Trading:
IbPy não parece estar no PyPi. Ou:
ou (se git não estiver disponível no seu sistema):
Para outras funcionalidades como: Visual Chart, Oanda, TA-Lib, verifique as dependências na documentação.
Coloque o diretório backtrader encontrado nas fontes dentro do seu projeto.
X: Número de versão principal. Deve ficar estável, a menos que algo grande seja alterado como uma revisão para usar numpy Y: Número de versão menor. Para ser alterado após a adição de um novo recurso completo ou (Deus proibe), uma mudança de API incompatível. Z: número de versão de revisão. Para ser alterado para atualizações de documentação, pequenas mudanças, pequenas correções de bugs I: Número de Indicadores já incorporados na plataforma.
Se depois de ver os documentos e algumas amostras (veja o blog também) você sente que essa não é sua xícara de chá, você sempre pode dar uma olhada em plataformas semelhantes de Python:
bt ligeiramente pré-data backtrader e tem uma abordagem completamente diferente, mas é divertido, bt também foi escolhido como abreviatura para backtrader durante as importações e que alguns dos métodos têm a mesma denominação (nomeação óbvia de qualquer forma): executar, traçar.
&cópia de; 2018 GitHub, Inc. Termos Privacidade Segurança Status Ajuda.
Você não pode executar essa ação neste momento.
Você fez login com outra guia ou janela. Recarregue para atualizar sua sessão. Você se separou em outra guia ou janela. Recarregue para atualizar sua sessão.

Комментарии