Suponha que você tivesse algo a ver com o mercado de ações antes. Ou, não tendo uma, se empolgou com o quente (mas nos últimos meses já notavelmente frio ...) tema de criptomoeda. Vamos supor também que você foi ainda mais longe e decidiu que o “controle manual” dos vôos já é ineficaz e que você precisaria automatizar suas idéias brilhantes e transformar o macaco em algo mais tecnológico. Exatamente neste ponto, começam as perguntas que eu gostaria de discutir no artigo: existe uma solução pronta para o backtesting de idéias de negociação (grátis é desejável), onde obter dados históricos (idealmente grátis) e também o que fazer com tudo isso posteriormente, isto é Quais são as soluções para o lançamento em combate de sistemas de negociação automatizados que foram testados com sucesso em um backtest? Observe um e dois: o artigo foi escrito para bibliotecas e sistemas baseados em Python, não posso julgar como pode ser a acessibilidade para outras linguagens; é dada prioridade aos mercados estrangeiros e / ou criptomoedas; também não pretendo julgar como aplicável ao mercado de ações russo.

Este material não é um guia ou revisão exaustiva, mas uma proposta para trocar idéias de trabalho com base em uma pesquisa prática de uma montagem de trabalho normal para uso pessoal. Diante da necessidade de automatizar estratégias de negociação simples (comércio de momento, acompanhamento de tendências, etc.), surgiram vários problemas imediatamente. Vamos apontar o que precisamos:
- Formule uma hipótese e a algoritmo
- Teste a hipótese em dados históricos. Uma observação super importante: você também deve entender quais dados históricos se enquadram na categoria “adequado” para uso no backtest de sistemas de negociação. Não vou me comprometer a escrever um post separado sobre isso agora (embora isso exija, mas há muitos materiais sobre esse assunto em domínio público), descreverei alguns problemas importantes com dados históricos: são empresas que abandonaram os índices ou faliram, são divididas em ações, e também como a rentabilidade é considerada - levando em consideração os dividendos (retorno total) ou não. Peço desculpas pela brevidade, mas este post ainda não é sobre isso e esse não é um conjunto exaustivo de requisitos de dados.
- Se a verificação for bem-sucedida, como transferir a hipótese para uma conta comercial real, adicionando um sistema de gerenciamento de riscos, gerenciamento de pedidos, reequilíbrio e avaliação do resultado.
Agora é a hora de fazer
duas digressões importantes sobre o "introdutório" com o qual estamos trabalhando neste artigo. A primeira é a escolha da linguagem: muitos dirão que o C # para criar robôs de negociação / sistemas de negociação automatizados é muito mais comum e mais rápido que o Python. Não posso discordar, mas devo levar em consideração o segundo ponto importante - a diferença entre negociação algorítmica e automação de sistemas de negociação. A partir de conversas com profissionais de negociação quantitativa e simplesmente a partir de materiais teóricos encontrados, pode-se concluir que a negociação algorítmica (frequentemente usada como sinônimo de “High-Frequency Trading (HFT)) é uma tática para trabalhar com ordens, com fluxos de dados para diferentes trocas, com base na velocidade acesso a eles (e dependendo de milissegundos), e lá exclusivamente C # pode lidar com as tarefas. Ao mesmo tempo, as tarefas que o comerciante de algo “doméstico” realiza são provavelmente o Python, porque nosso objetivo é automatizar sistemas de negociação especulativos de curto e médio prazo, cuja rotatividade de portfólio não atinge 100% por dia e o número de pedidos e requisitos a velocidade de sua execução não excede um limite razoável que separa as transações de alta frequência e as transações automatizadas de curto / médio prazo.
Como os sistemas de negociação são avaliados, como os algoritmos de negociação são escritos e assim por diante - tudo isso agora está além do escopo, caso contrário, não há como se encaixar no artigo. Vejamos um exemplo específico - eu tenho um sistema de negociação baseado no descrito no livro "Ações em movimento: superando o mercado com estratégias de momento de hedge fund". A estratégia de negociação é escrita em Python e não inclui nenhum elemento supercomplexo. A primeira coisa que você precisa é a oportunidade de testar a estratégia em dados históricos. Não tenho problema em discutir a escolha do intermediário, uso os serviços dos intermediários interativos e eles já têm uma API nativa para Python. No entanto, a possibilidade de um backtest mesmo com assinaturas de dados pagas não é fornecida lá. Aqui está o que eu consegui encontrar para o backtest:
1) Todo mundo está ouvindo - Quantopian.comSomente o Python 2.7 é suportado, é possível criar e testar sistemas de negociação de graça, há dados históricos gratuitos para usar (ações e futuros dos EUA), online está disponível, instalação local não é possível. Não vou escrever uma longa revisão, descreverei imediatamente as áreas problemáticas que foram encontradas, mesmo em um nível básico: como removeram a possibilidade de vincular a uma conta de corretagem, não há como usar os sistemas de negociação desenvolvidos e testados para negociação ao vivo. Isso impõe imediatamente restrições (algumas delas ajudarão a resolver tirolesa ao vivo, mais sobre isso abaixo), porque O Quantopian é baseado na biblioteca de tirolesa e, além disso, existem algumas funções que funcionam apenas dentro de seu sistema; portanto, quando você deseja transferir seu sistema auto-escrito e testado para a mesma API nativa de um broker, será necessário reescrever metade dele para funcionar, e também decida o que fazer com os snippets de código baseados em tirolesa. O menos (para alguns sistemas) também pode ser considerado a proibição de tickers dinâmicos, mas por enquanto deixamos essa tese sem detalhes.
A principal vantagem do Quantopian (IMHO) (além de um sistema gratuito para testes e dados históricos) é uma comunidade muito ativa, muitas postagens sobre análise e as nuances dos sistemas de construção. Importante: os dados históricos disponíveis levam em conta alguns dos problemas (você pode trabalhar não apenas com empresas ativas, mas também obter listas de índices dos últimos anos para levar em consideração desistências, falências etc.), divisões também são levadas em consideração e existem até (!) Conjuntos de dados de retorno total, ou seja, é possível usar indicadores de rentabilidade com dividendos.
2) Realmente quer ser ouvido por todos, mas ainda não o fez - Backtrader.comO Python 2.7, 3.2-3.6 é suportado, está disponível apenas para uso na máquina local.
Parece que há integração com os intermediários e será possível lançar sistemas usando essa biblioteca em batalha com o mínimo de esforços de integração. Francamente - é muito duvidoso, não vi nenhum exemplo vivo, a comunidade está quase morta - há silêncio no fórum. O autor da biblioteca está promovendo-o ativamente no Quora e em outros recursos. Não há dados históricos, então você precisa comprar ou procurar fontes gratuitas - mas existem os problemas dos "sobreviventes", dividendos (incluídos ou não nos dados), divisões e outras coisas começam. Ficarei feliz em receber feedback real sobre a prática de usar esta biblioteca.
3) QuantConnect - quantconnect.comEsta é uma plataforma online (suportando Python, respectivamente), oferecendo dados, backtest e integração com corretores populares. Mas, ao mesmo tempo, digamos que, para poder negociar com os Interactive Brokers, você precisa pagar um mínimo de US $ 20 por mês para assinar o QuantConnect, e isso não leva em consideração as assinaturas de dados do broker, etc.
Minha opinião subjetiva é que a plataforma não é muito conveniente para uso constante, de alguma forma tudo é muito congestionado e inconveniente, além de pago, além de ter sido originalmente escrito em C # e empacotado para que você possa usar o Python. Então, depois de tentar testar várias estratégias, recusei-me a usá-lo ainda mais. Embora devamos prestar homenagem - a comunidade é menos ativa, há muito material nos fóruns e os problemas podem ser resolvidos rapidamente. Ficaria feliz em compartilhar comentários reais - talvez eu simplesmente não tenha uma experiência do usuário.
4) QuantRocket - quantrocket.comA julgar pela descrição - é apenas uma "música". Há tudo - instalação on-line e local, e backtesting, e dados históricos que podem ser coletados do broker ou fornecidos por você (por US $ 9 por mês), e integração imediata com os brokers, e a integração é tão boa que eles prometem reescrever nada você precisará ... E eles até prometem que, se você se interessou pelo Quantopian e escreveu algumas coisas na tirolesa, eles ajudarão na transição para a plataforma deles e para a biblioteca interna (Moonshot), que permitirá que a negociação ao vivo por meio de um corretor seja implementada com o mínimo esforço ... Tudo parece perfeito se não for por um sobre "mas" - pelo menos US $ 30 por mês para a oportunidade de testar como todo mundo realmente. Não ousei, porque há meses que não exigem sua participação no mercado (por exemplo, todos os filtros para entrar no mercado mostram "parados") e, em seguida, uma taxa de US $ 30 pela oportunidade de testar hipóteses parece injustificada. Mas serei grato por críticas reais - quem tentou, quais são os prós e os contras e assim por diante. Outro ponto embaraçoso é a ligação à plataforma e à biblioteca, que é usada apenas nela, e fica repleta de um aumento nos "custos de troca", ou seja, amanhã, em vez de US $ 30, entreguem por uma tarifa simples todos os US $ 150, e você a vinculará à biblioteca Moonshot exclusiva e implantada em sua plataforma ... Como se costuma dizer, seus ovos em uma cesta ...)
5) Zipline e Zipline-live (http://www.zipline.io, www.zipline-live.io )Ele é instalado localmente, funciona com Python 2.7 e 3.5 para Zipline e apenas 2.7 para zipline-live.
Chegamos ao pacote que, de acordo com minhas observações, é mais usado na comunidade de amantes de sistemas de negociação automatizados em casa.
O que temos: a biblioteca de tirolesas, que é a base do mecanismo Quantopian (consulte o ponto 1) e seu irmão mais novo, tirolesa-live, que suporta a integração com Interactive Brokers e permite executar algoritmos criados usando tirolesa em produção com modificações mínimas. Brevemente sobre a história da questão - quando, há alguns anos, na Quantopian, eles decidiram abandonar o comércio ao vivo, a comunidade ficou agitada, as águas espumaram e nasceu o resultado de esforços coletivos (incluindo a equipe Quantopian, que prometeu apoiar o desenvolvimento da biblioteca ao vivo de maneira desinteressada). Depois disso, o Zipline-live se tornou, de fato, a única (?) Maneira conveniente de graça (e sem registro) para adaptar os sistemas testados no Quantopian (ou localmente no zipline) à negociação real por meio de intermediários interativos (com os quais há integração, mas sem um número). algumas funções importantes e não tão tirolesa). O que pode ser dito sobre esse grupo:
- O zipline é adequado para você localmente se você tiver uma fonte confiável de dados históricos ou se tiver conjuntos de dados quandl suficientes que são incorporados à biblioteca gratuitamente. Lembre-se de que a biblioteca não oferece suporte à tradução de dados on-line, e você deverá fazer o download e fazer o upload para o backtest ( aqui você encontrará mais detalhes sobre isso)
- Em teoria, o zipline-live é adequado se a integração com o IB for implementada normalmente, e os algoritmos transferidos do Quantopian não precisarão de processamento e correção significativos devido a funções não implementadas no zipline-live.
6) QsTrader - github.com/mhallsmoore/qstraderEsta é uma biblioteca dos criadores do portal quantstart, uma comunidade e um conjunto de materiais educacionais, palestras e assim por diante. Instalado localmente, usa Python 3 e superior. Não há uma oportunidade real de negociação por meio de um corretor, mas eles prometem acrescentar. Depende amplamente da pilha de Python usual da Data Science - pandas, numpy, scipy etc., para que você tenha que instalar tudo de uma vez. Não consegui obter estimativas objetivas da prevalência dessa biblioteca e direi francamente - não tentei na prática, porque, a julgar pelo histórico da atualização, o trabalho está inativo, as funções não são adicionadas, o que significa que não funciona para um sistema completo, até mesmo "doméstico" adequado, mas se houver resultados de seu uso e uma opinião pessoal for formada - compartilhe, de repente essa solução é melhor que outras.
7) Em seguida, listarei as bibliotecas que consegui encontrar, mas não posso dizer muito sobre elas. Na maioria das vezes, eles são suportados exclusivamente pelos autores dos blogs que os criaram e não têm a capacidade de integrar-se a um corretor, o que significa que é apenas um backtesting sem a capacidade de ser usado em batalha, sem uma comunidade e com um lento ritmo de desenvolvimento, ou seja. não atende a todas as tarefas atribuídas.-
bt (Backtesting para Python)-
comércio de sistemasResumindo os resultados intermediários, compartilho as conclusões subjetivas:- Se você não se importa com o uso de plataformas on-line que estão se tornando obsoletas em Python 2.7 e seus instrumentos-alvo em estratégias são ações / futuros em sites dos EUA (e corretor IB), uma combinação de Quantopian + tirolesa ao vivo será conveniente e definitivamente gratuita (!) que você receberá dados históricos gratuitos (± atendendo aos critérios de qualidade), um IDE gratuito para testar hipóteses e uma biblioteca local que permite integrar suas realizações a uma conta de corretagem e iniciar o sistema em um voo de combate, levando em consideração todas as cláusulas e uma combinação de limites que foram aqui anteriormente revelados. Pessoalmente, escolhi essa opção por sua conveniência, funcionalidade básica gratuita e uma comunidade muito ativa. No próximo post, mostrarei como foi fácil (ou não fácil) testar e transferir a estratégia de estoques de momento da Quantopian online para viver em tirolesa na máquina local, como é bem desenvolvida a integração com a conta de corretagem no IB nesta biblioteca e também compartilhar os detalhes do uso do nativo API Python do IB.
- Se a prioridade for a instalação local, controle total sobre o sistema e não se incomodar com a necessidade de baixar dados históricos na forma de pacotes de dados para testar hipóteses, ou se houver uma fonte desses dados ou isenta de quandl, o pacote Zipline + Zipline-live se tornará uma solução possível, o que permitirá Você pode implementar estratégias testadas em uma máquina local com dados históricos (próprios ou gratuitos) por meio do IB e tudo isso é gratuito dentro da estrutura da funcionalidade das bibliotecas indicadas e do intermediário da API do Python.
- Se você não pode ou não deseja abrir uma conta com os corretores interativos, em geral, boa parte da lista acima servirá, porque O QuantConnect, por exemplo, trabalha com outros corretores que também oferecem suporte à negociação de FX / Crypto, e assim por diante. E se as tarefas, em princípio, não precisarem ser negociadas ao vivo por meio de um corretor, você poderá tentar todas as bibliotecas / plataformas descritas para backtesting e escolher aquela que atenda melhor às suas tarefas.
PS Em conclusão, quero observar que a importância de escolher uma plataforma / biblioteca não é apenas conveniência, mas também a "escalabilidade" dos sistemas. Digamos que eu desenvolvi algo inteligível e testei em tirolesa. Então, ele decidiu dar vida a ele sem um backtest de qualquer corretor por meio de sua API - e aqui começa um milhão de detalhes adicionais que você não levará em consideração no modo sandbox - como as ordens são executadas, como o sistema funciona em diferentes modos de negociação e se existe uma sessão supervoltaica de lacuna / pós-negociação após o relatório trimestral e assim por diante ... Portanto, na minha opinião subjetiva, é importante escolher uma assembléia para que o código esteja funcionando tanto para o backtest quanto para a implementação do sistema de negociação em batalha, para resolver as falhas, h para melhorar a qualidade de ambos.