O QSForex é um backtesting orientado a eventos de código aberto e uma 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 de negociação 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 trading 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 oanda / e configure uma conta para obter as credenciais de autenticação da API, que você precisará para realizar a 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. Supondo que você baixou o repositório gist QSForex para um diretório de exemplo como / projects / qsforex / (mude este diretório abaixo para onde você instalou 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 os comandos subseqüentes corretamente. 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 de 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 2014. Ou seja, você verá arquivos individuais, do formato BBBQQQYYYYMMDD. csv (por exemplo, GBPUSD20140112.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 acrescentando 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) 2015 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 ACÇÃO DE CONTRATO, DANO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, EM RELAÇÃO AO SOFTWARE OU AO 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, Backtesting kEvent-Driven com Python - Parte I Weve passou os últimos dois meses no QuantStart backtesting várias estratégias comerciais utilizando Python e pandas. A natureza vectorizada dos pandas garante que certas operações em grandes conjuntos de dados são extremamente rápidas. No entanto, as formas de backtester vectorizado que temos estudado até à data sofrem de alguns inconvenientes na forma que a execução do comércio é simulada. Nesta série de artigos, vamos discutir uma abordagem mais realista para a simulação de estratégia histórica, construindo um ambiente de backtesting baseado em eventos usando Python. Software voltado para eventos Antes de aprofundarmos o desenvolvimento de um backtester, precisamos entender o conceito de sistemas orientados a eventos. Os videogames fornecem um caso de uso natural para software orientado a eventos e fornecem um exemplo simples para explorar. Um jogo de vídeo tem vários componentes que interagem uns com os outros em uma configuração em tempo real em framerates alta. Isso é tratado executando o conjunto inteiro de cálculos dentro de um loop infinito conhecido como o loop de eventos ou loop de jogo. Em cada tick do loop de jogo uma função é chamada para receber o evento mais recente. Que terá sido gerado por alguma ação anterior correspondente dentro do jogo. Dependendo da natureza do evento, que pode incluir um pressionar a tecla ou um clique do mouse, alguma ação subseqüente é tomada, que terminará o loop ou gerará alguns eventos adicionais. O processo continuará então. Aqui está um exemplo de pseudo-código: O código está continuamente verificando novos eventos e, em seguida, executando ações com base nesses eventos. Em particular, permite a ilusão de resposta em tempo real manipulação porque o código está continuamente sendo looped e eventos verificados. Como será claro que isso é precisamente o que precisamos para realizar simulação de negociação de alta freqüência. Por que um backtester conduzido por eventos Os sistemas conduzidos por eventos oferecem muitas vantagens em relação a uma abordagem vectorizada: Reutilização de código - Um backtestter baseado em eventos, por design, pode ser usado tanto para o backtesting histórico como para o live trading com a troca mínima de componentes. Isto não é verdade nos backtesters vectorizados onde todos os dados devem estar disponíveis de uma só vez para realizar a análise estatística. Bias de Lookahead - Com um backtester orientado a eventos não há viés de lookahead como recibo de dados de mercado é tratado como um evento que deve ser atendido. Assim, é possível gotejar um backtestter baseado em eventos com dados de mercado, replicando como um sistema de gerenciamento de pedidos e portfólio se comportaria. Realismo - Os backtesters controlados por eventos permitem uma personalização significativa sobre como as ordens são executadas e os custos de transação são incorridos. É fácil lidar com ordens básicas de mercado e limite, assim como mercado-em-aberto (MOO) e mercado-em-fechamento (MOC), uma vez que um manipulador de troca personalizado pode ser construído. Embora sistemas impulsionados por eventos venham com muitos benefícios, eles sofrem de duas grandes desvantagens em relação aos sistemas mais simples de vetorização. Em primeiro lugar, eles são significativamente mais complexos de implementar e testar. Há mais partes móveis que levam a uma maior chance de introduzir bugs. Para mitigar esta metodologia de teste de software apropriada, tal como desenvolvimento test-driven pode ser empregado. Em segundo lugar, eles são mais lentos para executar em comparação com um sistema vectorizado. Operações vetoriais ótimas não podem ser utilizadas quando se realizam cálculos matemáticos. Vamos discutir maneiras de superar essas limitações em artigos posteriores. Visão Geral Para aplicar uma abordagem orientada a eventos para um sistema de backtesting é necessário definir nossos componentes (ou objetos) que lidarão com tarefas específicas: Evento - O Evento é a unidade de classe fundamental do sistema orientado a eventos. Ele contém um tipo (como MARKET, SIGNAL, ORDER ou FILL) que determina como ele será manipulado dentro do ciclo de eventos. Fila de eventos - A fila de eventos é um objeto de fila Python na memória que armazena todos os objetos da subclasse de eventos que são gerados pelo restante do software. DataHandler - O DataHandler é uma classe base abstrata (ABC) que apresenta uma interface para manipulação de dados de mercado históricos ou ao vivo. Isto proporciona uma flexibilidade significativa, uma vez que os módulos da Estratégia e da Carteira podem assim ser reutilizados entre ambas as abordagens. O DataHandler gera um novo MarketEvent em cada pulsação do sistema (veja abaixo). Estratégia - A Estratégia também é um ABC que apresenta uma interface para tirar dados de mercado e gerar SignalEvents correspondentes, que são utilizados pelo objeto Portfolio. Um SignalEvent contém um símbolo ticker, uma direção (LONG ou SHORT) e um timestamp. Portfolio - Trata-se de um ABC que trata da gestão de ordens associada a posições atuais e posteriores de uma estratégia. Também realiza a gestão de risco em toda a carteira, incluindo a exposição do setor eo dimensionamento da posição. Em uma implementação mais sofisticada, isso poderia ser delegado a uma classe RiskManagement. O Portfolio leva SignalEvents da Fila e gera OrderEvents que são adicionados à Fila. ExecutionHandler - O ExecutionHandler simula uma conexão com uma corretora. O trabalho do manipulador é levar OrderEvents da fila e executá-los, quer através de uma abordagem simulada ou uma conexão real para uma corretora de fígado. Uma vez que as ordens são executadas o manipulador cria FillEvents, que descrevem o que realmente foi transacionado, incluindo taxas, comissão e derrapagem (se modelado). O Loop - Todos esses componentes são envolvidos em um loop de eventos que manipula corretamente todos os tipos de eventos, encaminhando-os para o componente apropriado. Este é um modelo bastante básico de um mecanismo de negociação. Há uma margem significativa para expansão, particularmente no que diz respeito ao uso do portfólio. Além disso, os diferentes modelos de custos de transação também podem ser capturados em sua própria hierarquia de classes. Nesta fase, introduz complexidade desnecessária dentro desta série de artigos por isso não vamos discuti-la ainda mais. Em tutoriais posteriores, provavelmente expandiremos o sistema para incluir realismo adicional. Aqui está um trecho do código do Python que demonstra como o backtester funciona na prática. Existem dois loops que ocorrem no código. O loop externo é usado para dar ao backtester um batimento cardíaco. Para negociação ao vivo, essa é a freqüência com que os novos dados de mercado são consultados. Para backtesting estratégias isso não é estritamente necessário uma vez que o backtester usa os dados de mercado fornecidos no formulário de gotejamento-feed (veja a linha bars. updatebars ()). O loop interno realmente lida com os eventos do objeto Queue de eventos. Eventos específicos são delegados para o respectivo componente e posteriormente novos eventos são adicionados à fila. Quando a fila de eventos está vazia, o loop de pulsação continua: Este é o esboço básico de como é projetado um backtestter baseado em eventos. No próximo artigo discutiremos a hierarquia de classes Event.
No comments:
Post a Comment