Python forex backtesting


Python Algorithmic Trading Library PyAlgoTrade é uma biblioteca de negociação algorítmica Python com foco em backtesting e suporte para papel-trading e live-trading. Vamos dizer que você tem uma idéia para uma estratégia de negociação e você gostaria de avaliá-lo com dados históricos e ver como ele se comporta. PyAlgoTrade permite que você faça assim com esforço mínimo. Principais características Totalmente documentado. Evento conduzido. Suporta ordens de Market, Limit, Stop e StopLimit. Suporta Yahoo Finance, Google Finance e NinjaTrader arquivos CSV. Suporta qualquer tipo de dados de séries temporais em formato CSV, por exemplo, Quandl. Suporte comercial Bitcoin através Bitstamp. Indicadores técnicos e filtros como SMA, WMA, EMA, RSI, Bandas de Bollinger, expoente de Hurst e outros. Métricas de desempenho como Sharpe ratio e análise de redução. Gerenciando eventos do Twitter em tempo real. Perfurador de eventos. Integração TA-Lib. Escalável Muito fácil de ser escalado horizontalmente, ou seja, usando um ou mais computadores para testar uma estratégia. Livre PyAlgoTrade é livre, de código aberto, e é licenciado sob o Apache Licença, Versão 2.0.Institutional-classe de gerenciamento de dados / backtesting / solução de implantação de estratégia: - ações, opções, futuros, moedas, cestas e instrumentos sintéticos personalizados são suportados - múltiplos Suporte a fluxos de dados de baixa latência (velocidades de processamento em milhões de mensagens por segundo em terabytes de dados) - C e backtesting e otimização de estratégias baseadas - execução de múltiplos corretores suportados, sinais de negociação convertidos em pedidos FIX QuantFACTORY - Gerenciamento / backtesting / estratégia de dados de classe institucional - QuantDEVELOPER - estrutura e IDE para desenvolvimento de estratégias de negociação, depuração, backtesting e otimização, disponível como um plug-in do Visual Studio - QuantDATACENTER - permite gerenciar um data warehouse histórico e capturar dados de mercado em tempo real ou ultra baixa de latência Provedores e intercâmbios - QuantENGINE - permite implantar e executar estratégias pré-compiladas - multi-ativos, multi-período de baixa latência de dados, múltiplos corretores suportados de classe institucional de gerenciamento de dados / backtesting / solução de implantação de estratégia: OpenQuant - C e VisualBasic backtesting QuantTrader - ambiente de negociação de produção - QuantBase - gerenciamento de dados centralizado - QuantRouter - roteamento de dados e ordens - gerenciamento de dados de classe institucional / backtesting / estratégia Solução de implantação: - solução multi-asset, múltiplos feeds de dados suportados, banco de dados suporta qualquer tipo de RDBMS fornecendo uma interface JDBC, por exemplo Oracle, Microsoft SQL Server, Sybase, MySQL, etc - os clientes podem usar o IDE para script sua estratégia em Java, Ruby ou Python, ou eles podem usar sua própria estratégia IDE - Gerenciamento de dados de classe / backtesting / solução de implantação de estratégia: - solução multi-asset (forex, opções, futuros, ações, ETFs, commodities, instrumentos sintéticos e spreads derivados personalizados) , Backtesting e otimização - execução de múltiplos corretores suportados, sinais de negociação convertidos em ordens de FIX (IB, JPMorgan, FXCM, etc.) Plataforma de software dedicada integrada com dados de Tradestations para backtesting e auto-trading: - dados diários intraday (Análise técnica), apoio à linguagem de programação EasyLanguage - suporte a ETFs de ações norte-americanas, futuros, índices norte-americanos, ações alemãs, índices alemães, sem forex para clientes de corretagem da Tradestation - 249,95 mensais para não - (Plataforma de software Tradestation somente, sem corretagem) - 299,95 mensais para profissionais (plataforma de software Tradestation somente, sem corretagem) Plataforma dedicada de software para backtesting e auto-trading: - suporte a estratégias diárias / intraday, testes e otimização de nível de portfólio, (Análise técnica) - link direto para eSignal, Interactive Brokers, IQFeed, myTrack, FastTrack, QP2, TC2000, qualquer DDE compatível Feed, MS, txtfiles e mais (Yahoo Finance. ) - taxa única 279 para a edição Standard ou 339 para a edição Professional Plataforma dedicada de software para backtesting e auto-trading: - backtesting e negociação do sistema de nível de portfólio, multi-asset, testes de nível intraday, otimização, Auto-trading em linguagem de script Perl com todas as funções subjacentes escritas em C nativo, preparado para co-location de servidor - nativo FXCM e Interactive Brokers suporte - suporte gratuito FXCM, 100 por mês para plataforma IB, contacte Salesseertrading para outras opções Plataforma de software dedicado para Backtesting e auto-trading: - suporte a estratégias diárias / intraday, testes de nível de carteira e otimização - melhor para backtesting baseados em preços de sinais (análise técnica), C scripting - extensões de software suportado - manipulação de feeds de dados, execução da estratégia, etc 799 por licença, 150 taxa anual após a plataforma de software dedicado para backtesting, otimização, atribuição de desempenho e análise: - Axioma ou dados de terceiros - análise fatorial, modelagem de risco, análise do ciclo de mercado Plataforma dedicada de software para backtesting e auto-trading: - melhor para backtesting baseados em preços de sinais (Análise técnica), apoiando estratégias diárias / intraday, testes de nível de carteira e otimização - Turtle Edition - backtesting motor, gráficos, relatórios, testes de EoD - Professional Edition - mais editor de sistema, análise de pé frente, estratégias intraday, testes multi-threaded etc. - Pro Edition Plus - mais gráficos de superfície 3D, scripting etc - Edição de Construtor - IB API, depurador etc - Turtle Edition 990 - Edição Profissional 1.990 - Edição Pro Plus 2.990 - Edição Construtor 3.990 Plataforma de software dedicado para backtesting e auto - - suporte a estratégias diárias / intraday, testes de nível de carteira e otimização, gráficos, visualização, relatórios personalizados, etc - melhor para backtesting baseados em preços de sinais (análise técnica) - link direto para Interactive Brokers, MB Trading, TD Ameritrade, FXCM e outros - dados De arquivos de texto, eSignal, Google Finanças, Yahoo finance, IQFeed e outros - funcionalidade básica (funcionalidade EoD) - livre - funcionalidade avançada - locação de 50 / mês ou 995 licença de vida Plataforma de software dedicado para backtesting e auto-trading: - melhor para Backtesting baseados em preços de sinais (análise técnica), apoiando estratégias diárias / intraday, testes de nível de carteira e otimização, gráficos, visualização, relatórios personalizados - suporta C e Visual Basic - link direto para Interactive Brokers, IQFeed, txtfiles e muito mais. ) - licença perpétua - 499 - leasing 50 por mês Plataforma de software dedicada para backtesting e auto-trading: - suporte a estratégias diárias / intraday, testes e otimização de nível de portfólio, gráficos, relatórios personalizados - sinais técnicos e também fundamentais (Suporte a provedores de dados múltiplos e corretores) Plataforma dedicada de software para backtesting e auto-trading: - suporte a estratégias diárias / intraday, testes de nível de portfólio e otimização - melhor para backtesting Preços baseados em sinais (análise técnica) - incorporar dados para ações, futuros e forex (ações diárias dos EUA a partir de 1990, futuros diários de 31 anos, forex a partir de 1983, etc.) - preço de 45 / mês para 295 / mês Disponibilidade de dados) Plataforma de software dedicada para backtesting e auto-trading: - usa a linguagem MQL4, usada principalmente para negociar no mercado forex - suporta múltiplos corretores de forex e feeds de dados - suporta gerenciamento de múltiplas contas Plataforma de software dedicada para backtesting e auto-trading: (Análise técnica), suporte à linguagem de programação EasyLanguage - suporte a vários feeds de dados (Bloomberg, Thomson Reuters, CSI, CQG, eSignal, etc.), suporte direto para Multicharts Pro 9,900 (feed de dados da Bloomberg Thomson Reuters, etc.) Ferramenta de backtesting baseada na Web para testar estratégias de escolha de ações: - ETFs de ações dos EUA (diariamente) - ponto - Em tempo de dados fundamentais desde 1999 - longo / curto estratégias, preços / fundamentais impulsionado sinais - Designer - 139 / mês - Manager - 199 / month - funcionalidade completa Backtesting ferramenta baseada na Web para testar stock picking estratégias: - US estoques (diariamente) Dados fundamentais desde 1988 - preços / sinais fundamentais impulsionados - Estrategista - 995 / ano (dados desde 2000, 10 portfólios salvos) - Gerente - 1.995 / ano - (funcionalidade completa, dados desde 1988, 50 portfólios salvos) Web (Daily / intraday), desde 1998, dados de QuantQuote - dados do forex de FXCM - suportando Trader Interactive Brokers para a troca viva a correia fotorreceptora baseou a ferramenta backtesting: - Os estoques dos EU e os preços de ETFs (diário / intraday) Desde 2002 - dados fundamentais da Morningstar (mais de 600 métricas) - suporte a Interactive Brokers para negociação ao vivo Ferramentas de backtesting baseadas na Web: - simples de usar, estratégias de alocação de ativos, dados desde 1992 - impulso das séries temporais e estratégias de média móvel nos ETFs - Simple Momentum and Estratégias de coleta de ações de Valor Simples Ferramenta de backtesting baseada na Web: - até 25 anos de dados para 49 estoques Futures e SP500 - caixa de ferramentas em Python e Matlab - Quantiacs hospeda competições de negociação algorítmica com investimentos variando de 500k a 1 milhão Estratégias de alocação de ativos e estratégias de alocação de ativos: - múltiplos fatores de patrimônio com alfa comprovada sobre benchmarks de mercado, vários universos de investimento, filtros de gerenciamento de risco - estratégias de alocação de ativos backtests, mistura de alocação de ativos e picking de fatores em um portfólio MATLAB - Linguagem de alto nível e ambiente interativo para computação estatística e gráficos: - computação paralela e GPU, backtesting e otimização, amplas possibilidades de integração, etc. - preço sob consulta aqui Ambiente de software livre para computação estatística e gráficos, muitos quants preferem usá-lo para sua arquitetura aberta excepcional e flexibilidade: - facilidade de tratamento e armazenamento de dados eficazes, facilidades gráficas para análise de dados, facilmente estendida via pacotes - Extensões recomendadas - quantstrat, Rmetrics, quantmod, quantlib, PerformanceAnalytics, TTR, portfolio, portfolioSim, backtest, etc. Linguagem de programação open source livre, arquitetura aberta, flexível, facilmente estendida via pacotes: - extensões recomendadas - pandas (Python Data Analysis Library) BacktestingXL Pro é um add-in para construir e testar suas estratégias de negociação no Microsoft Excel 2018 e 2017: - os usuários podem usar o VBA para construir estratégias para o BacktestingXL Pro, o conhecimento do VBA é Opcional, os usuários podem construir regras de negociação em uma planilha usando códigos de backtesting pré-fabricados padrão - suporta pirâmide, limitação de posição de curto / longo prazo, cálculo de comissões, monitoramento de patrimônio, controle de saída de dinheiro, personalização de preço de compra / venda Relatórios - 74,95 para BacktestingXL Pro Ferramenta de backtesting baseada na Web: - simples de usar, ferramenta de backtesting baseada na web de nível de entrada para testar força relativa e estratégias de média móvel em ETFs - vários tipos de estratégias para funcionalidade de backtesting completa gratuita 34,99 mensal FactorWave É simples de usar a ferramenta de backtesting baseada na web para o fator investir: - permite ao usuário misturar vários ETF / opções / futuros / fatores de equidade com alfa comprovada sobre benchmarks de mercado-cap - livre - ETF / Stock Screener com 5 fatores - 149 / Livre de opções de opções de opções, estratégias de futuros, estratégias vix Web-Based Tool - Free Stock Ratings, análise sazonal, gráficos Fundamentos - Free Freemium modelo Free backtesting ferramenta baseada na web para testar estratégias de picking de ações: - ações dos EUA, de ValueLine 1986-2017 - preço e dados fundamentais, 1700 estoques, teste de granularidade mensal O testeQSForex é um backtesting de eventos open-source e plataforma de negociação ao vivo para uso nos mercados de câmbio (forex), atualmente em um estado alfa. Ele foi criado como parte da série Forex Trading Diary em QuantStart para fornecer a comunidade comercial sistemática com um mecanismo de negociação robusto que permite a implementação direta de estratégia forex e testes. O software é fornecido sob uma licença MIT permissiva (veja abaixo). Open-Source - O QSForex foi lançado sob uma Licença de MIT de código aberto extremamente permissiva, que permite o uso completo em pesquisas e aplicações comerciais, sem restrições, mas sem garantia de qualquer tipo. Free - QSForex é totalmente gratuito e não custa nada para download ou uso. Colaboração - Como o QSForex é de código aberto, muitos desenvolvedores colaboram para melhorar o software. Novos recursos são adicionados com freqüência. Quaisquer erros são rapidamente determinados e corrigidos. Desenvolvimento de Software - QSForex é escrito na linguagem de programação Python para suporte cruzado direto. QSForex contém um conjunto de testes de unidade para a maioria do seu código de cálculo e novos testes são constantemente adicionados para novos recursos. Arquitetura Orientada a Eventos - QSForex é completamente orientada a eventos tanto para backtesting quanto para negociação ao vivo, o que leva à transição direta de estratégias de uma fase de pesquisa / teste para uma implementação de negociação ao vivo. Custos de Transação - Os custos de spread são incluídos por padrão para todas as estratégias testadas. Backtesting - O QSForex apresenta backtesting de par multi-moeda de vários dias. Trading - A QSForex atualmente oferece suporte a negociação intraday ao vivo usando a OANDA Brokerage API em um portfólio de pares. Métricas de Desempenho - QSForex atualmente suporta medição de desempenho básico e visualização de equidade através das bibliotecas de visualização Matplotlib e Seaborn. Instalação e Uso 1) Visite o site oanda / e configure uma conta para obter as credenciais de autenticação da API, que você precisará realizar na negociação ao vivo. Eu explico como realizar isso neste artigo: quantstart / articles / Forex-Trading-Diary-1-Automated-Forex-Trading-com-OANDA-API. 2) Clone este repositório git em um local adequado em sua máquina usando o seguinte comando em seu terminal: git clone github / mhallsmoore / qsforex. git. Alternativa você pode baixar o arquivo zip do ramo mestre atual em github / mhallsmoore / qsforex / archive / master. zip. 3) Crie um conjunto de variáveis ​​de ambiente para todas as configurações encontradas no arquivo settings. py no diretório raiz do aplicativo. Como alternativa, você pode codificar suas configurações específicas, substituindo as chamadas os. environ. get (.) Para cada configuração: 4) Crie um ambiente virtual (virtualenv) para o código QSForex e utilize pip para instalar os requisitos. Por exemplo, em um sistema baseado em Unix (Mac ou Linux), você pode criar um diretório como o seguinte, digitando os seguintes comandos no terminal: Isso criará um novo ambiente virtual para instalar os pacotes em. Supondo que você baixou o repositório gst do QSForex para um diretório de exemplo como / projects / qsforex / (mude este diretório abaixo para onde você instalou o QSForex), então para instalar os pacotes você precisará executar os seguintes comandos: Tempo como NumPy, SciPy, Pandas, Scikit-Learn e Matplotlib devem ser compilados. Há muitos pacotes necessários para que isso funcione, por favor, dê uma olhada nesses dois artigos para obter mais informações: Você também precisará criar um link simbólico do seu diretório de pacotes do site para o diretório de instalação do QSForex para poder chamar Importe qsforex dentro do código. Para fazer isso, você precisará de um comando semelhante ao seguinte: Certifique-se de alterar / projects / qsforex para o diretório de instalação e /venv/qsforex/lib/python2.7/site-packages/ para o diretório de pacotes do site virtualenv. Agora você poderá executar corretamente os comandos subseqüentes. 5) Nesta fase, se você simplesmente deseja realizar prática ou negociação ao vivo, então você pode executar python trading / trade. py. Que utilizará a estratégia de negociação padrão do TestStrategy. Isso simplesmente compra ou vende um par de moedas a cada 5 tick. É puramente para testes - não usá-lo em um ambiente de negociação ao vivo Se você deseja criar uma estratégia mais útil, basta criar uma nova classe com um nome descritivo, p. MeanReversionMultiPairStrategy e verifique se ele tem um método calculatesignals. Você precisará passar esta classe a lista de pares, bem como a fila de eventos, como em trading / trading. py. Consulte estratégia / estratégia. py para obter detalhes. 6) A fim de realizar qualquer backtesting é necessário para gerar dados forex simulados ou download histórico tiquetaquear dados. Se você quiser simplesmente tentar o software para fora, a maneira mais rápida de gerar um exemplo backtest é gerar alguns dados simulados. O formato de dados atual usado pelo QSForex é o mesmo que o fornecido pelo DukasCopy Historical Data Feed em dukascopy / swiss / english / marketwatch / historical /. Para gerar alguns dados históricos, certifique-se de que a configuração CSVDATADIR em settings. py seja definida para um diretório no qual você deseja que os dados históricos sejam transmitidos. Em seguida, você precisa executar generatesimulatedpair. py. Que está sob o diretório scripts /. Ele espera um único argumento de linha de comando, que neste caso é o par de moedas no formato BBBQQQ. Por exemplo: Neste estágio, o script é codificado para criar um único mês de dados para janeiro de 2017. Ou seja, você verá arquivos individuais, do formato BBBQQQYYYYMMDD. csv (por exemplo, GBPUSD20170112.csv) aparecem no seu CSVDATADIR para todos os dias úteis em Esse mês. Se você deseja alterar o mês / ano da saída de dados, basta modificar o arquivo e voltar a executar. 7) Agora que os dados históricos foram gerados, é possível realizar um backtest. O próprio arquivo backtest é armazenado em backtest / backtest. py. Mas isso só contém a classe Backtest. Para realmente executar um backtest você precisa instanciar essa classe e fornecer os módulos necessários. A melhor maneira de ver como isso é feito é observar a implementação do Crossover de Moving Average no arquivo examples / mac. py e usá-lo como um modelo. Isso faz uso do MovingAverageCrossStrategy que é encontrado em strategy / strategy. py. Isso padrão para negociação tanto GBP / USD e EUR / USD para demonstrar o uso de par de moedas múltiplas. Ele usa os dados encontrados no CSVDATADIR. Para executar o exemplo backtest, basta executar o seguinte: Isso levará algum tempo. No meu sistema de desktop Ubuntu em casa, com os dados históricos gerados via generatesimulatedpair. py. Leva cerca de 5-10 minutos para ser executado. Uma grande parte deste cálculo ocorre no final do backtest real, quando o levantamento está sendo calculado, por favor, lembre-se que o código não desligou Por favor, deixe-o até a conclusão. 8) Se você quiser ver o desempenho do backtest você pode simplesmente usar output. py para ver uma curva de equidade, retornos de período (ou seja, retornos de tick-to-tick) e uma curva de redução: E thats it Nesta fase você está pronto Para começar a criar seus próprios backtests modificando ou anexando estratégias em strategy / strategy. py e usando dados reais baixados do DukasCopy (dukascopy / swiss / english / marketwatch / historical /). Se você tiver alguma dúvida sobre a instalação, então sinta-se livre para me enviar um e-mail no mikequantstart. Se você tiver quaisquer bugs ou outros problemas que você acha que podem ser devido à codebase especificamente, sinta-se livre para abrir uma questão Github aqui: github / mhallsmoore / qsforex / issues Copyright (c) 2017 Michael Halls-Moore A qualquer pessoa que obtenha uma cópia deste software e arquivos de documentação associados (o Software), para negociar o Software sem restrições, incluindo, sem limitação, os direitos de usar, copiar, modificar, fundir, publicar, distribuir, sublicenciar e / Ou vender cópias do Software e permitir que as pessoas a quem o Software é fornecido o façam, sujeito às seguintes condições: O aviso de copyright acima e este aviso de permissão devem ser incluídos em todas as cópias ou partes substanciais do Software. O SOFTWARE É FORNECIDO TAL COMO É, SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM FIM ESPECÍFICO E NÃO-INFRAÇÃO. EM NENHUMA CIRCUNSTÂNCIA OS AUTORES OU TITULARES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTROS NEGÓCIOS NA PROGRAMAS. Negação de Negociação de Forex Trocando o câmbio na margem carrega um nível elevado do risco, e não pode ser apropriado para todos os investors. O desempenho passado não é indicativo de resultados futuros. O alto grau de alavancagem pode trabalhar contra você, bem como para você. Antes de decidir investir em divisas você deve considerar cuidadosamente seus objetivos de investimento, nível de experiência e apetite pelo risco. A possibilidade existe que você poderia sustentar uma perda de alguns ou todos do seu investimento inicial e, portanto, você não deve investir o dinheiro que você não pode dar ao luxo de perder. Você deve estar ciente de todos os riscos associados com negociação de câmbio, e procurar aconselhamento de um conselheiro financeiro independente, se você tiver quaisquer dúvidas. Python Trader código e habilidades de compartilhamento Sim, eu uso 2 raspberrypi. Baixa potência alta estabilidade (ups em seu). Raspy Python Oandapy gt Esta configuração é muito versátil Esta configuração é muito versátil e funciona muito bem Após este tópico, eu acho que para começar com a negociação programada python. Oanda tem alguns benefícios, e vejo que você também está usando. Eu acho que seria difícil executar muitos eas em mt4 no mesmo tempo, o que é mais provável o caminho que eu irei para o próximo. Eu acho que um Pi ou um Mac mini (por seu preço eu posso comprar uma dúzia Pi-s.) Seria ideal para executar tais configurações 24/7. Eu só não confio windows ou Mt4 para coisas sérias. Quantos exemplos de programas de negociação você pode executar no Pi ao mesmo tempo Pi corresponde em velocidade para computadores i usado no início de 2000, por isso não deve ser muito lento. Cheers e obrigado pela idéia, kResearch Backtesting Ambientes em Python com pandas Por Michael Halls-Moore em 16 de janeiro de 2017 Backtesting é o processo de pesquisa de aplicar uma estratégia de negociação idéia de dados históricos, a fim de verificar o desempenho passado. Em particular, um backtester não garante o desempenho futuro da estratégia. No entanto, são um componente essencial do processo de pesquisa de pipeline estratégico, permitindo que as estratégias sejam filtradas antes de serem colocadas em produção. Neste artigo (e aqueles que o seguem) um sistema de backtesting orientado a objetos básico escrito em Python será descrito. Este sistema inicial será principalmente um auxiliar de ensino, usado para demonstrar os diferentes componentes de um sistema de backtesting. À medida que progredimos através dos artigos, funcionalidades mais sofisticadas serão adicionadas. Visão geral do Backtesting O processo de criação de um robusto sistema de backtesting é extremamente difícil. Efetivamente simular todos os componentes que afetam o desempenho de um sistema de negociação algorítmica é um desafio. Fraca granularidade de dados, opacidade do roteamento de ordens em um corretor, latência de pedidos e uma miríade de outros fatores conspiram para alterar o verdadeiro desempenho de uma estratégia versus o desempenho backtestado. Ao desenvolver um sistema de backtesting é tentador querer constantemente reescrevê-lo a partir do zero como mais fatores são encontrados para ser crucial na avaliação de desempenho. Nenhum sistema de backtesting é sempre terminado e um julgamento deve ser feito em um ponto durante o desenvolvimento que fatores suficientes foram capturados pelo sistema. Com estas preocupações em mente o backtester apresentado aqui será um pouco simplista. À medida que exploramos outras questões (otimização de portfólio, gerenciamento de riscos, manipulação de custos de transação), o backtester se tornará mais robusto. Tipos de sistemas de Backtesting Existem geralmente dois tipos de backtesting sistema que será de interesse. O primeiro é baseado na pesquisa. Usado principalmente nos estágios iniciais, onde muitas estratégias serão testadas para selecionar aqueles para avaliação mais séria. Estes sistemas de backtesting de pesquisa são muitas vezes escritos em Python, R ou MatLab como velocidade de desenvolvimento é mais importante do que a velocidade de execução nesta fase. O segundo tipo de sistema de backtesting é baseado em eventos. Ou seja, realiza o processo de backtesting em um loop de execução semelhante (se não idêntico) ao próprio sistema de execução de negociação. Ele modelará realisticamente os dados de mercado e o processo de execução de ordens, a fim de proporcionar uma avaliação mais rigorosa de uma estratégia. Os últimos sistemas são frequentemente escritos em uma linguagem de alto desempenho, como C ou Java, onde a velocidade de execução é essencial. Para estratégias de baixa freqüência (embora ainda intraday), Python é mais do que suficiente para ser usado neste contexto. Object-Oriented Research Backtester em Python O projeto e a implementação de um ambiente de backtesting baseado em pesquisa orientada a objetos serão agora discutidos. A orientação do objeto foi escolhida como o paradigma de design de software pelas seguintes razões: As interfaces de cada componente podem ser especificadas antecipadamente, enquanto as internas de cada componente podem ser modificadas (ou substituídas) à medida que o projeto progride. Para testar eficazmente como cada componente se comporta (através de testes de unidade) Ao estender o sistema, novos componentes podem ser construídos sobre ou além de outros, seja por herança ou composição. Nesta fase, o backtester é projetado para facilidade de implementação e um grau razoável de flexibilidade , À custa da verdadeira precisão do mercado. Em particular, este backtestter só será capaz de lidar com estratégias agindo em um único instrumento. Mais tarde o backtester será modificado para lidar com conjuntos de instrumentos. Para o backtestter inicial, são necessários os seguintes componentes: Estratégia - Uma classe Strategy recebe um Pandas DataFrame de barras. I. e. uma lista de pontos de dados Open-High-Low-Close-Volume (OHLCV) a uma frequência particular. A Estratégia produzirá uma lista de sinais. Que consistem numa marca de tempo e num elemento do conjunto indicando um sinal longo, de espera ou curto, respectivamente. Portfolio - A maioria do trabalho de backtesting ocorrerá na classe Portfolio. Ele receberá um conjunto de sinais (conforme descrito acima) e criará uma série de posições, alocadas contra um componente em dinheiro. O trabalho do objeto Portfolio é produzir uma curva de equivalência patrimonial. Incorporar os custos de transação básicos e acompanhar os negócios. Desempenho - O objeto Performance obtém um portfólio e produz um conjunto de estatísticas sobre seu desempenho. Em particular, produzirá características de risco / retorno (Sharpe, Sortino e Ratios de Informação), métricas de lucro / lucro e informações de levantamento. O que está faltando Como pode ser visto, este backtest não inclui qualquer referência ao gerenciamento de carteira / risco, processamento de execução (ou seja, sem ordens de limite) nem fornecerá uma modelagem sofisticada de custos de transação. Isto não é muito de um problema nesta fase. Isso nos permite familiarizar-nos com o processo de criação de um backtester orientado a objetos e as bibliotecas Pandas / NumPy. Com o tempo ele será melhorado. Implementação Vamos agora descrever as implementações para cada objeto. Estratégia O objeto de Estratégia deve ser bastante genérico nesta fase, já que será o manejo das estratégias de previsão, reversão média, momentum e volatilidade. As estratégias aqui consideradas serão sempre baseadas em séries temporais, isto é, orientadas por preço. Um requisito prévio para este backtester é que as classes de Estratégia derivadas aceitarão uma lista de barras (OHLCV) como entrada, em vez de carrapatos (preços de trade-by-trade) ou dados de lista de pedidos. Assim, a granularidade mais fina que está sendo considerada aqui será barras de 1 segundo. A classe Estratégia também produzirá sempre recomendações de sinal. Isso significa que ele irá aconselhar uma instância Portfolio no sentido de ir longo / curto ou segurando uma posição. Essa flexibilidade nos permitirá criar vários conselheiros de Estratégia que forneçam um conjunto de sinais que uma classe de portfólio mais avançada pode aceitar para determinar as posições reais que estão sendo inseridas. A interface das classes será aplicada utilizando uma metodologia de classe base abstrata. Uma classe base abstrata é um objeto que não pode ser instanciado e, portanto, somente as classes derivadas podem ser criadas. O código Python é dado abaixo em um arquivo chamado backtest. py. A classe Estratégia exige que qualquer subclasse implemente o método generateatesignals. Para evitar que a classe Estratégia seja instanciada diretamente (uma vez que é abstrata) é necessário usar os objetos ABCMeta e abstractmethod do módulo abc. Definimos uma propriedade da classe, chamada metaclasse para ser igual a ABCMeta e, em seguida, decorar o método generateatesignals com o decorador abstractmethod. Embora a interface acima seja direta, ela se tornará mais complicada quando essa classe for herdada para cada tipo específico de estratégia. Em última análise, o objetivo da classe Estratégia nessa configuração é fornecer uma lista de sinais long / short / hold para cada instrumento a ser enviado para um Portfolio. Carteira A classe Portfolio é onde residirá a maioria da lógica de negociação. Para este backtester de pesquisa, o portfólio é responsável por determinar o dimensionamento de posição, análise de risco, gerenciamento de custos de transação e tratamento de execução (ou seja, ordens de mercado sobre fechamento). Numa fase posterior, estas tarefas serão divididas em componentes separados. Agora eles serão incluídos em uma classe. Esta classe faz uso amplo de pandas e fornece um grande exemplo de onde a biblioteca pode economizar uma enorme quantidade de tempo, particularmente no que diz respeito à disputa de dados padronizada. Como um aparte, o principal truque com pandas e NumPy é evitar iterar sobre qualquer conjunto de dados usando o para d in. Sintaxe. Isso ocorre porque NumPy (que subjaz pandas) otimiza loop por operações vectorized. Assim, você verá poucas (se houver) iterações diretas ao utilizar pandas. O objetivo da classe Portfolio é, em última instância, produzir uma seqüência de negociações e uma curva patrimonial, que será analisada pela classe Performance. Para isso, deve ser fornecida uma lista de recomendações de negociação a partir de um objeto Estratégia. Mais tarde, este será um grupo de objetos Estratégia. A classe Portfolio precisará ser informada sobre como o capital deve ser implantado para um determinado conjunto de sinais de negociação, como lidar com custos de transação e quais formas de ordens serão utilizadas. O objeto Estratégia está operando em barras de dados e, portanto, devem ser feitas premissas em relação aos preços obtidos na execução de uma ordem. Uma vez que o preço alto / baixo de qualquer barra é desconhecida a priori, só é possível usar os preços abertos e fechados para negociação. Na realidade, é impossível garantir que uma ordem será preenchida a um desses preços particulares quando se utiliza uma ordem de mercado, pelo que será, na melhor das hipóteses, uma aproximação. Além de suposições sobre pedidos sendo preenchidos, este backtester irá ignorar todos os conceitos de restrições de margem / corretagem e assumirá que é possível ir longas e curtas em qualquer instrumento livremente sem quaisquer restrições de liquidez. Esta é claramente uma suposição muito irrealista, mas é aquela que pode ser relaxada mais tarde. A listagem a seguir continua backtest. py: Nesta fase, as classes básicas abstratas Strategy e Portfolio foram introduzidas. Agora estamos em posição de gerar algumas implementações derivadas concretas dessas classes, a fim de produzir uma estratégia de brinquedo de trabalho. Começaremos gerando uma subclasse de estratégia chamada RandomForecastStrategy. A única tarefa de que é produzir aleatoriamente escolhidos long / short sinais Embora esta é claramente uma estratégia de negociação absurda, que irá servir às nossas necessidades, demonstrando o objeto orientado backtesting quadro. Assim, vamos começar um novo arquivo chamado randomforecast. py. Com a lista para o forecaster aleatório da seguinte forma: Agora que temos um sistema de previsão concreto, devemos criar uma implementação de um objeto Portfolio. Este objeto irá abranger a maioria do código backtesting. Ele é projetado para criar dois DataFrames separados, o primeiro dos quais é um quadro de posições, usado para armazenar a quantidade de cada instrumento realizada em qualquer barra em particular. O segundo, carteira. Na verdade contém o preço de mercado de todas as explorações para cada barra, bem como um comprovante do dinheiro, assumindo um capital inicial. Isso, em última instância, fornece uma curva de equidade sobre a qual avaliar o desempenho da estratégia. O objeto Portfolio, embora extremamente flexível em sua interface, requer opções específicas quando se trata de como lidar com os custos de transação, ordens de mercado, etc Neste exemplo básico, eu considerei que será possível ir long / short um instrumento facilmente sem restrições ou Margem, comprar ou vender diretamente ao preço de abertura da barra, custos de transação zero (abrangendo derrapagem, taxas e impacto no mercado) e especificou a quantidade de ações diretamente para compra para cada comércio. Aqui está a continuação da listagem randomforecast. py: Isso nos dá tudo o que precisamos para gerar uma curva de equidade baseada nesse sistema. A etapa final é amarrar tudo junto com uma função principal: A saída do programa é a seguinte. O seu diferirá da saída abaixo, dependendo do intervalo de datas que você selecionar e da semente aleatória utilizada: Neste caso, a estratégia perdeu dinheiro, o que não surpreende dada a natureza estocástica do antecessor Os próximos passos são criar um objeto de desempenho que aceita um Portfolio e fornece uma lista de métricas de desempenho sobre as quais basear a decisão de filtrar a estratégia para fora ou não. Também podemos melhorar o objeto Portfolio para ter um tratamento mais realista dos custos de transação (como comissões de corretores interativos e deslizamento). Também podemos incluir diretamente um mecanismo de previsão em um objeto Estratégia, que (esperamos) produza melhores resultados. Nos próximos artigos, exploraremos esses conceitos com mais profundidade. Michael Halls-Moore Mike é o fundador da QuantStart e tem estado envolvido na indústria de finanças quantitativas nos últimos cinco anos, principalmente como desenvolvedor quantitativo e, mais tarde, como consultor de comerciante de quant para hedge funds.

Comments

Popular Posts