Friday, 30 March 2018

Estratégias de negociação de backtesting em python


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.

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.

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 Frank Smietana em 18 de julho de 2017.
Neste artigo, Frank Smietana, um dos colaboradores experientes do QuantStart, descreve a paisagem do software de backtesting de código aberto da Python e fornece conselhos sobre quais framework de backtesting são adequados para suas próprias necessidades de projeto.
Backtesting é indiscutivelmente a parte mais crítica do processo de produção da Sistemática de Negociação Sistemática (STS), sentado entre o desenvolvimento da estratégia e a implantação (negociação ao vivo). Se uma estratégia é defeituosa, um teste rigoroso provavelmente expõe isso, evitando que uma estratégia de perda seja implantada.
Uma série de capacidades relacionadas se sobrepõem com backtesting, incluindo simulação comercial e negociação ao vivo. O Backtesting usa dados históricos para quantificar o desempenho STS. Os simuladores de negociação levam backtesting um passo adiante, visualizando o desencadeamento de trades e desempenho de preços em uma base bar-a-bar. A negociação simulada / ao vivo implementa um STS testado em tempo real: negociações de sinalização, gerando ordens, roteando ordens para corretores e mantendo as posições à medida que as ordens são executadas.
A maioria dos quadros vai além do backtesting para incluir algumas capacidades de negociação ao vivo. Isso é conveniente se você deseja implantar a partir de sua estrutura de backtesting, que também funciona com o seu fornecedor preferido e fontes de dados. Quantopian / Zipline vai um passo adiante, fornecendo uma solução totalmente integrada de desenvolvimento, backtesting e implantação.
A comunidade Python é bem servida, com pelo menos seis estruturas de backtesting de código aberto disponíveis. No entanto, estão em vários estágios de desenvolvimento e documentação. Se você gosta de trabalhar em uma equipe construindo uma estrutura de backtesting de código aberto, confira seus reembolsos Github.
Antes de avaliar quadros de teste, vale a pena definir os requisitos do seu STS.
Qual classe de ativos você está negociando? Embora a maioria dos frameworks ofereça suporte aos dados da US Equities via YahooFinance, se uma estratégia incorporar derivados, ETFs ou títulos de EM, os dados precisam ser importados ou fornecidos pela estrutura. As coberturas de classe de ativos vão além dos dados. O framework pode lidar com futuros e opções de tamanho finito e gerar negociações de roll-over automaticamente? E quanto aos mercados ilíquidos, quão realista é uma suposição ao executar grandes encomendas?
Qual a frequência e o detalhe dos dados do seu STS? Um sistema de negociação que exige que cada marca ou lance / peça tenha um conjunto muito diferente de problemas de gerenciamento de dados do que um intervalo de 5 minutos ou horário. Os hedge funds e as lojas HFT investiram significativamente na construção de quadros robustos e escaláveis ​​de backtesting para lidar com esse volume e freqüência de dados. Algumas plataformas fornecem um conjunto rico e profundo de dados para várias classes de ativos, como ações da S & P, com resolução de um minuto.
Qual (s) tipo (s) de ordem o seu STS requer? No mínimo, o limite, as paradas e o OCO devem ser suportados pela estrutura.
Nível de suporte e amp; documentação necessária. Os quadros de estágio inicial têm escassa documentação, poucos têm suporte além de placas comunitárias.
Os Componentes de um Quadro de Teste de Backtesting.
Dados e aquisição de STS: os componentes de aquisição consomem o arquivo de script / definição STS e fornecem os dados necessários para testes. Se a estrutura exige que qualquer STS seja recodificado antes do teste posterior, a estrutura deve suportar funções enlatadas para os indicadores técnicos mais populares para acelerar o teste STS. Os usuários determinam o tempo de um período histórico para fazer backtest com base no que o framework fornece, ou o que eles são capazes de importar.
O teste de desempenho aplica a lógica STS à janela de dados históricos solicitada e calcula uma ampla gama de riscos & amp; métricas de desempenho, incluindo redução máxima, taxas Sharpe e Sortino. A maioria dos frameworks suporta um número decente de capacidades de visualização, incluindo curvas de equidade e estatísticas decimais.
A otimização tende a exigir a maior parte dos recursos de computação no processo STS. Se o seu STS precisar de otimização, concentre-se em uma estrutura que suporte processamento escalável distribuído / paralelo.
No contexto de estratégias desenvolvidas usando indicadores técnicos, os desenvolvedores de sistemas tentam encontrar um conjunto ideal de parâmetros para cada indicador. Mais simplesmente, a otimização pode achar que um fluxo de média móvel de 6 e 10 dias STS acumulou mais lucro sobre os dados de teste históricos do que qualquer outra combinação de períodos de tempo entre 1 e 20. Já com este exemplo trivial, 20 * 20 = 400 combinações de parâmetros devem ser calculado & amp; classificado.
No contexto de um portfólio, a otimização procura encontrar a ponderação ideal de cada ativo na carteira, incluindo os instrumentos em curto e alavancado. Em uma base periódica, o portfólio é reequilibrado, resultando na compra e venda de participações da carteira, conforme necessário, para alinhar com os pesos otimizados.
O dimensionamento de posição é um uso adicional da otimização, ajudando os desenvolvedores de sistemas a simular e analisar o impacto da alavancagem e dimensionamento de posição dinâmico no STS e no desempenho do portfólio.
Seis quadros de teste para o Python.
As capacidades padrão das plataformas open source Python backtesting parecem incluir:
Gerenciamento de eventos, flexível e irrestrito Coleta decente de indicadores técnicos pré-definidos Captação de desempenho padrão / visualização / geração de relatórios.
PyAlgoTrade.
PyAlgoTrade é uma estrutura de backtesting mutuamente documentada, juntamente com capacidades de negociação em papel e ao vivo. O suporte a dados inclui Yahoo! Finanças, Google Finance, NinjaTrader e qualquer tipo de série de tempo baseada em CSV, como Quandl. Os tipos de pedidos suportados incluem Market, Limit, Stop e StopLimit.
O PyAlgoTrade suporta a negociação Bitcoin via Bitstamp e o gerenciamento de eventos do Twitter em tempo real.
bt - Backtesting para Python.
bt "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 framework é particularmente adequado para testar STS com base em portfólio, com algos para ponderação de ativos e reequilíbrio de portfólio. A modificação de uma estratégia para executar em diferentes freqüências de tempo ou pesos de ativos alternativos envolve um mínimo de ajuste de código. bt é construído em cima do ffn - uma biblioteca de funções financeiras para Python.
Backtrader.
Esta plataforma está excepcionalmente bem documentada, com um blog acompanhante e uma comunidade on-line ativa para postar perguntas e solicitações de recursos. O Backtrader suporta uma série de formatos de dados, incluindo arquivos CSV, Pandas DataFrames, iteradores de incandescência e feeds de dados em tempo real de três corretores. Esses feeds de dados podem ser acessados ​​simultaneamente e podem até representar diferentes cronogramas. Os corretores suportados incluem Oanda para negociação de Forex e negociação de classes de ativos múltiplos através de Interactive Brokers e Visual Chart.
Pysystemtrade.
O desenvolvedor da Pysystemtrade, Rob Carver, tem uma ótima postagem em discussão sobre o porquê ele se propôs a criar mais uma nova estrutura de teste do Python e os argumentos para e contra o desenvolvimento do framework. A estrutura backtesting para pysystemtrade é discutida no livro Rob, "Systematic Trading".
Pysystemtrade lista uma série de recursos de roteiro, incluindo um testador de back-up completo, que inclui técnicas de otimização e calibração e negociação de futuros totalmente automáticos com Interactive Brokers. Os contribuidores da fonte aberta são bem-vindos.
Zipline é um simulador de negociação algorítmica com recursos de papel e negociação ao vivo. Acessível através da interface do navegador IPython baseado no navegador, a Zipline fornece uma alternativa fácil de usar para ferramentas de linha de comando. Suportado e desenvolvido por Quantopian, Zipline pode ser usado como uma estrutura de backtesting autônomo ou como parte de um ambiente completo de desenvolvimento, teste e implantação de STS, de Aosta / Zipline STS. A Zipline fornece 10 anos de dados de estoque históricos históricos de última hora e uma série de opções de importação de dados.
QSTrader é uma estrutura de backtesting com capacidades de negociação ao vivo. O fundador da QuantStart, Michael Halls-Moore, lançou o QSTrader com a intenção de construir uma plataforma robusta e escalável o suficiente para atender às necessidades dos fundos de hedge quantitativos institucionais, bem como aos comerciantes quantos de varejo. O QSTrader atualmente suporta dados de resolução "barra" da OHLCV em várias escalas de tempo, mas permite que dados de marca sejam usados.
Tanto o backtesting como o comércio ao vivo são completamente orientados para eventos, simplificando a transição das estratégias da pesquisa para o teste e, finalmente, a negociação ao vivo. A estratégia básica / código do portfólio geralmente é idêntico em ambas as implementações.
O principal benefício do QSTrader é em sua modularidade, permitindo uma ampla personalização de código para aqueles que possuem requisitos específicos de gerenciamento de risco ou portfólio.
Abraçando o Backtest.
É a natureza humana se concentrar na recompensa de desenvolver um STS (esperançosamente lucrativo), então apressar-se a implantar uma conta financiada (porque esperamos), sem gastar tempo e recursos suficientes para testar completamente a estratégia. Mas backtesting não é apenas um gatekeeper para nos impedir de implementar estratégias erradas e perder capital comercial, também fornece uma série de diagnósticos que podem informar o processo de desenvolvimento STS. Por exemplo, testando um STS idêntico em dois intervalos de tempo diferentes, compreendendo a redução máxima de uma estratégia no contexto de correlações de ativos e criando portfólios mais inteligentes por backtesting de alocações de ativos em várias regiões geográficas.
Em futuras postagens, iremos abordar frameworks de backtesting para ambientes que não sejam Python e o uso de várias técnicas de amostragem como bootstrapping e jackknife para testar modelos de negociação preditivos.
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égias de negociação de backtest em python
Puxe pedidos 8.
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.

Python Backtesting Libraries para Quant Trading Strategies.
Escrito por Khang Nguyen Vo, khangvo88 @ gmail, para o blog RobustTechHouse (Mobile App Development Singapore). Khang é graduado do Programa de Mestrado em Finanças Quantitativas e Computacionais, John Von Neumann Institute 2018. Ele é apaixonado pela pesquisa em aprendizagem mecânica, modelagem preditiva e backtesting de estratégias comerciais.
Bibliotecas de Backtesting de Python, com freqüência mencionada.
É essencial testar estratégias de negociação antes de negociá-las com dinheiro real. Aqui, revisamos as bibliotecas de teste de Python usadas com freqüência. Nós os examinamos em termos de flexibilidade (pode ser usado para backtesting, papel-negociação, além de live-trading), facilidade de uso (boa documentação, boa estrutura) e escalabilidade (velocidade, simplicidade e compatibilidade com outras bibliotecas).
Zipline: trata-se de um framework de backtesting dirigido a eventos usado por Quantopian. A Zipline possui uma ótima comunidade, boa documentação, excelente suporte para Interactive Broker (IB) e integração de Pandas. A sintaxe é clara e fácil de aprender. Tem muitos exemplos. Se o seu principal objetivo de negociação é a equidade dos EUA, esse quadro pode ser o melhor candidato. Quantopian permite que alguém faça um teste, compartilhe e discuta estratégias de negociação em sua comunidade. No entanto, em nosso experimento, Zipline é extremamente lento. Esta é a maior desvantagem desta biblioteca. Quantopian tem algum trabalho, como executar a biblioteca Zipline em paralelo na nuvem. Você pode dar uma olhada nesta postagem se isso lhe interessar. Zipline também parece funcionar mal com dados locais e dados não-americanos. É difícil usar esse quadro para diferentes classes de ativos financeiros. PyAlgoTrade: Esta é outra biblioteca orientada a eventos que é ativa e que oferece suporte ao backtesting, ao comércio de papel e ao comércio ao vivo. Está bem documentado e também suporta integração TA-Lib (Biblioteca de Análise Técnica). Ele supera a Zipline em termos de velocidade e flexibilidade. No entanto, uma grande desvantagem da PyAlgoTrade é que ele não suporta os módulos Pandas-object e Pandas. pybacktest: Vectorized backtesting framework em Python que é muito simples e leve. Este projeto pareceu ser revivido novamente recentemente em 21 de maio de 2018. TradingWithPython: Jev Kuznetsov estendeu a biblioteca pybacktest e criou seu próprio backtester. Esta biblioteca parece atualizada recentemente em fevereiro de 2018. No entanto, a documentação e o curso para esta biblioteca custam US $ 395. Alguns outros projetos: ultra-finanças.
As Bibliotecas de Teste de Python estão resumidas na tabela a seguir:
Zipline vs PyAlgoTrade Python Backtesting Libraries.
Nós nos concentraremos em comparar as mais populares bibliotecas de teste de tirolesa Zipline e PyAlgoTrade Python abaixo.
A documentação pode ser encontrada em zipline. io/tutorial/ e você pode encontrar algumas implementações em Quantopian. Não entramos em detalhes sobre como usar esta biblioteca aqui, uma vez que a documentação é clara e concisa. O exemplo de script abaixo mostra apenas como essa biblioteca Python Backtesting funciona para uma estratégia simples.
A sintaxe para tirolesa é muito clara e simples e é adequada para iniciantes para que eles possam se concentrar na principal estratégia de algoritmo de negociação em si. Suas outras forças incluem:
Boas documentações, excelente comunidade IPython compatível: suporte %% zipline Entrada e saída para tirolesa é baseada no Pandas DataFrame. Esta é uma grande vantagem, uma vez que a Pandas é a biblioteca mais grande e fácil de usar para a análise e modelagem de dados. O suporte é lippage (ou modelo de impacto, isso significa que quando você compra ou vende, essa ação afetará o preço real) e modelo da Comissão (o custo de transação). A modelagem torna as estratégias de negociação mais realistas.
Esta estratégia de negociação é simples, basicamente, compramos 10 ações em cada iteração. Observe que a tirolesa permite dinheiro negativo, então a ordem sempre é preenchida. A iteração ocorre na função handle_data () e, em seguida, cada informação da barra será buscada na variável de dados. Cada detalhe da barra é definido da seguinte forma:
O tempo médio de execução (10 loops) para este script é de cerca de 66 segundos, o que parece muito longo, considerando que estamos apenas buscando dados diários e executando um algoritmo de negociação simples. Em seguida, tentamos usar o arquivo local em vez de buscar no Yahoo Finance.
APPL. csv é o arquivo local baixado de ichart. finance. yahoo/table. csv? s=APPL. A classificação e a localização de dados são obrigatórias porque a tirolesa considera os dados como uma linha de tempo ascendente e extrai a barra de dados dessa.
Em seguida, os dados mudam da seguinte forma:
* Nota: devemos ter cuidado com o campo de volume aqui. Com este método, cada coluna de dados (Open, Close, High, Low, Adj Close e Volume) é tratada como instrumentos individuais aqui e o campo 'volume' é definido como padrão como padrão. No backtest, a ordem é preenchida ou cancelada com base no volume de mercado disponível (veja esta referência), então precisamos alterar o campo 'volume' definido aqui.
O tempo médio de execução é: 61 segundos que não é muito melhor do que load_bars_from_yahoo () que tínhamos tentado antes. O desempenho é de fato um problema conhecido para a biblioteca de tirolesa. Mesmo que usemos arquivos de dados locais, a linha aérea também precisa buscar dados do yahoo para o ambiente de negociação. Isto é devido ao mecanismo de referência incorporado nesta biblioteca. por exemplo: pedido de função get_raw_benchmark_data () para o yahoo para obter o ponto de dados para ^ GSPC.
Claro, pode-se tentar personalizar o código para usar os próprios dados do & # 8217; em vez de buscar dados de outras fontes; No entanto, exige muito esforço. Jason Swearingen lida com esses problemas (afirmou nesta publicação) escrevendo sua própria biblioteca chamada QuanShim, que é compatível com Zipline e Quantopian. No entanto, isso está fora do escopo aqui.
Além disso, é realmente difícil lidar com dados de negociação de maior frequência (por hora, minutos, dados de marca) aqui. Para trabalhar com dados fora do intervalo de datas de referência fornecido, pode-se:
(1) forneça seu próprio benchmark (veja esta sugestão e responda para a questão 271); ou.
(2) executar sem um benchmark e, em seguida, não computar as métricas de risco que o exigem (comente alguma linha de código em risk. py ou benchmark. py). Isso é mencionado na questão 13.
Se o seu mercado-alvo é o mercado dos EUA, então a linha aérea é uma escolha decente para uma biblioteca Python Backtesting. Mas, para testar diferentes ativos financeiros em todos os mercados, a falta de flexibilidade e o lento tempo de execução da tirolesa causará problemas.
2. PyAlgoTrade:
Usamos o seguinte script simples para demonstrar como o PyAlgoTrade funciona em comparação com Zipline. A documentação do PyAlgoTrade & # 8217; aqui pode ser encontrada, incluindo estratégias de exemplo e tutorial. Para uma comparação justa, vamos tentar a mesma estratégia que fizemos acima:
Isso também é bastante simples. O script obtém dados do Yahoo, itera usando o onBars (). Ao contrário da tirolesa, PyAlgoTrade não permite dinheiro negativo por padrão, então devemos explicitamente defini-lo.
Alterar o feed para o arquivo local é muito fácil no PyAlgoTrade, o que torna esta biblioteca mais adequada para backtests de papel do que a tirolesa. No exemplo abaixo, também usamos o arquivo de dados baixado do Yahoo.
Uma coisa que eu gosto sobre PyAlgoTrade é que é mais flexível do que a biblioteca de tirolesa para fazer pedidos. Além de ordens individuais (por exemplo, mercado, limite, parada, ordem de limite), PyAlgoTrade fornece funções de nível superior que envolvem um par de ordens de entrada / saída (por exemplo: enterLong, enterShort, enterLongLimit, interface enterShortLimit).
PyAlgoTrade definitivamente oferece mais flexibilidade para fazer pedidos. Na maioria dos casos, apenas trabalhamos com os primeiros 6 eventos, ou seja, onEnterOk, onEnterCanceled, onExitOk, onExitCanceled, onOrderUpdated e onBars.
No entanto, PyAlgoTrade oferece suas próprias classes DataSeries e Bar e essas classes não funcionam com a biblioteca Pandas. Isso é frustrante, uma vez que a Pandas é comum à Análise e modelagem de dados. Vejamos as barras definidas em cada iteração:
Com a falta de suporte para Pandas, você provavelmente passará mais tempo aprendendo PyAlgoTrade do que o tirolesa de tirolesa. A Zipline fornece uma interface simples e tipo de dados familiar (Pandas) para que o usuário possa se concentrar na própria estratégia, em vez de levar algum tempo trabalhando com outros encanamentos técnicos.
No entanto, em comparação com a tirolesa, o PyAlgoTrade supera claramente em termos de tempo de execução. Com o mesmo algoritmo, o tempo médio de execução é de apenas 2 segundos enquanto o script de tirolesa acima demora cerca de um minuto.
Resumo de Zipline vs PyAlgoTrade Python Backtesting Libraries.
Eu provavelmente classificaria essas 2 bibliotecas de teste de Python da seguinte maneira:
Cada biblioteca Python Backtesting tem seus próprios pontos fortes e fracos, e muitas funções interessantes que eu não crie neste artigo. Então, eu sugiro que você escolha o mais adequado com base em quais são seus requisitos e os prós e contras mencionados acima.
Onde é que o Pyalgotrade é compatível com Interactive Brokers?
Você está certo. Eu acho que o artigo apenas atualizado para indicar pyalgotrade não suporta IB.
Woud você está disposto a incluir & # 8220; backtrader & # 8221; na sua comparação? (backtrader)
É bom encontrar esta publicação e ver que meu humilde backtester está incluído! Obrigado por dar uma olhada.
Gostaria de mencionar que você não precisa pagar pelo curso para acessar o código de backtesting, que é encontrado no github: https: // github / sjev / trading-with-python / blob / master / lib / backtest. py.
O código neste momento é bastante legível, então você deve poder usá-lo sem muita documentação extra.
Quanto ao futuro, planejo desenvolver este código e adicionar uma melhor documentação. Aparentemente, não há uma ferramenta de back-up baseada em vetor de descida por aí ainda # 8230 ;. (pelo menos não para minha ligação 😉
Eu adicionei fork para permitir que pyalgotrade tire dados de pandas diretamente. https: // github / gbeced / pyalgotrade / pull / 107.
Somos especialistas em sistemas móveis e FinTech, apaixonados pelo desenvolvimento de soluções robustas para nossos clientes. Criamos sistemas inovadores de próxima geração nos setores ECommerce, Mobile-Commerce e Financeiro. Nosso objetivo é ser o líder da Tech House na Ásia.
Estamos ansiosos para as suas mensagens. Por favor, deixe-nos uma nota para qualquer consulta e nós voltaremos para você, o mais rápido possível.

No comments:

Post a Comment