Wednesday, 1 November 2017

Forex Trading Api Python


Mastering Python for Finance Negociação de Forex com OANDA API Nas seções anteriores, implementamos um sistema de negociação interagindo com Interactive Brokers Trader WorkStation X através das conexões de soquete em uma única porta. No entanto, muitos outros corretores oferecem diferentes opções de conexão de software de negociação personalizado sobre uma API. Nesta seção, aprenderemos como interagir nossa estratégia de negociação com a API OANDAs REST. A OANDA é um dos principais players no mercado de câmbio (forex) que presta serviços de manutenção a investidores de varejo. Vamos usar uma estratégia de tendência seguinte para negociar produtos forex. O que é REST REST significa Representational State Transfer. Refere-se a APIs de serviço da Web para transferir dados através de HTTP usando o GET. COLOCAR. POSTAR. Ou DELETE métodos. Com a API REST, podemos transmitir. O melhor conteúdo para sua carreira. Aprendizagem de máquina em qualquer forma, incluindo o reconhecimento de padrões, tem naturalmente muitos usos de voz e reconhecimento facial para pesquisa médica. Neste caso, a nossa pergunta é se podemos ou não usar o reconhecimento de padrões para referenciar situações anteriores que foram semelhantes em padrão. Se podemos fazer isso, podemos então fazer comércios com base no que sabemos que aconteceu com esses padrões no passado e realmente fazer um lucro Para fazer isso, iriam codificar completamente tudo nós mesmos. Se acontecer de você apreciar este tópico, o próximo passo seria olhar para a aceleração de GPU ou threading. Só precisariam de Matplotlib (para visualização de dados) e alguns NumPy (para o número crunching), eo resto depende de nós. O Python é naturalmente uma linguagem de thread único, o que significa que cada script irá usar apenas uma única CPU (geralmente isso significa que ele usa um único núcleo de CPU e, às vezes, apenas metade ou um quarto, ou pior, desse núcleo). É por isso que os programas em Python podem levar algum tempo para algo de computador, mas seu processamento pode ser somente 5 e RAM 10. Para saber mais sobre o threading, você pode visualizar o tutorial de segmentação neste site. A maneira mais fácil de obter esses módulos hoje em dia é usar pip instalar. Não sei o que é pip ou como instalar módulos Pip é provavelmente a maneira mais fácil de instalar pacotes Depois de instalar o Python, você deve ser capaz de abrir o prompt de comando, como cmd. exe no windows, ou bash no linux, e digite: pip Install numpy pip install matplotlib Tendo problemas ainda Não há problema, há um tutorial para isso: pip instalar Python módulos tutorial. Se você ainda está tendo problemas, não hesite em contactar-nos, usando o contato no rodapé deste site. O plano é tomar um grupo de preços em um período de tempo, e convertê-los para a mudança percentual em um esforço para normalizar os dados. Vamos dizer que levamos 50 pontos de preço consecutivos por uma questão de explicação. O que bem fazer é mapear este padrão em memória, avançar um ponto de preço e re-mapear o padrão. Para cada padrão que mapeamos na memória, então queremos saltar para frente um pouco, digamos, 10 pontos de preço e registrar onde o preço está nesse ponto. Em seguida, mapear este resultado para o padrão e continuar. Cada padrão tem seu resultado. Em seguida, tomamos o padrão atual e o comparamos com todos os padrões anteriores. O que bem fazer é comparar a similaridade porcentagem com todos os padrões anteriores. Se a sua percentagem de semelhança for superior a um certo limiar, então o consideraríamos. A partir daqui, talvez tenhamos 20-30 padrões comparáveis ​​da história. Com esses padrões semelhantes, podemos então agregar todos os seus resultados e chegar a um resultado médio estimado. Com esse resultado médio, se for muito favorável, então poderíamos iniciar uma compra. Se o resultado não é favorável, talvez vendemos, ou curto. Para a visualização, heres um exemplo: No exemplo acima, o padrão médio previsto é ir para cima, para que possamos iniciar uma compra. Esta série não terminará com você ter qualquer tipo de algoritmo get-rich-quick. Existem alguns bugs conhecidos com este programa, e as chances de você ser capaz de executar comércios rápido o suficiente com estes dados tick é improvável, a menos que você é um banco. O objetivo aqui é mostrar o quão fácil e básico é o reconhecimento de padrões. Enquanto você tem algum conhecimento básico de programação Python, você deve ser capaz de acompanhar. OANDA API Trading Utilities em Python Programas de exemplo de negociação com a API OANDA através de Python2.7 Este repo contém um programa de negociação que executa negócios quando WMA e SMA cross . Há também um arquivo contendo algumas funções extremamente simples que irá abrir um comércio ou uma ordem, respectivamente. Clone este repo para o local de sua escolha Modifique o api-order. py para fazer o que quiser, ou simplesmente execute o api-trade-averages. py usando o Python2.7 Para executar o script, especifique o número de velas sobre o qual calcular o WMA e SMA, a granularidade da vela, o instrumento eo seu accountId. Este script usa o ambiente sandbox, então por favor use o sandbox accountId. Python api-trade-averages. py 10 S5 EURUSD Este programa destina-se a demonstrar funcionalidade OANDA API e não se destina como conselho de investimento ou uma solução para comprar ou vender qualquer produto de investimento. QSForex é um backtesting open-source evento-driven e ao vivo Plataforma de negociação 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 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 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 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 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 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 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) 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 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. Forex Trading Diário 1 - Automated Forex Trading com a API OANDA Por Michael Halls-Moore em 21 de janeiro de 2015 Eu mencionei anteriormente no artigo QuantStart: 2014 Revisão que eu estaria gastando alguns de 2015 escrevendo sobre forex trading automatizado. Dado que eu próprio geralmente realizar pesquisas em mercados de ações e futuros, eu pensei que seria divertido (e educacional) para escrever sobre minhas experiências de entrar no mercado de forex no estilo de um diário. Cada entrada do diário tentará construir em todas aquelas antes, mas deve igualmente ser relativamente self-contained. Nesta primeira entrada do diário Ill ser descrevendo como configurar uma nova conta corretora prática com OANDA, bem como a forma de criar um motor de negociação multiprojetos básicos orientada a eventos que pode executar automaticamente comércios em uma prática e viver definição. No ano passado, passamos muito tempo olhando para o backtestter evento-driven. Principalmente para ações e ETFs. O que eu apresento abaixo é voltado para forex e pode ser usado para negociação de papel ou negociação ao vivo. Tenho escrito todas as instruções a seguir para Ubuntu 14.04, mas eles devem facilmente traduzir para Windows ou Mac OS X, usando uma distribuição Python como Anaconda. A única biblioteca adicional usada para o mecanismo de negociação Python é a biblioteca de solicitações, que é necessária para a comunicação HTTP com a API OANDA. Uma vez que este é o primeiro post diretamente sobre o comércio de câmbio, eo código apresentado abaixo pode ser diretamente adaptado a um ambiente de negociação ao vivo, gostaria de apresentar as seguintes isenções: Isenção de responsabilidade: Troca de câmbio sobre margem transporta um alto nível de risco, E pode não ser adequado para todos os investidores. 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 consultor financeiro independente, se você tiver quaisquer dúvidas. Este software é fornecido como tal e quaisquer garantias expressas ou implícitas, incluindo, mas não se limitando a, garantias implícitas de comercialização e adequação a um propósito específico, são excluídas. Em nenhum caso os regentes ou contribuintes serão responsáveis ​​por quaisquer danos diretos, indiretos, incidentais, especiais, exemplares ou conseqüentes (incluindo, mas não se limitando a, aquisição de bens ou serviços substitutivos perda de uso, dados ou lucros ou interrupção de negócios ) No entanto causado e em qualquer teoria da responsabilidade, seja no contrato, responsabilidade estrita, ou delito (incluindo negligência ou de outra forma) decorrentes de qualquer fora do uso deste software, mesmo se avisado da possibilidade de tais danos. Configurando uma conta com OANDA A primeira pergunta que vem à mente é Por que escolher OANDA. Basta colocar, depois de um pouco de Googling em torno de forex corretores que tinham APIs, vi que a OANDA tinha recentemente lançado um adequado REST API que poderia ser facilmente comunicada com a partir de praticamente qualquer idioma de uma forma extremamente simples. Depois de ler a documentação da API do desenvolvedor. Eu decidi dar-lhes uma tentativa, pelo menos com uma conta de prática. Para ser claro - Eu não tenho nenhuma relação anterior ou existente com a OANDA e estou apenas fornecendo esta recomendação com base na minha experiência limitada brincando com sua prática API e alguns breves uso (para download de dados de mercado), enquanto empregado em um fundo anteriormente. Se alguém se deparar com qualquer outro corretores forex que também têm uma API similarmente moderna, então Id ser feliz para dar-lhes um olhar também. Antes de utilizar a API é necessário se inscrever para uma conta de prática. Para fazer isso, vá para o link de inscrição. Você verá a seguinte tela: Você poderá então fazer login com suas credenciais de login. Certifique-se de selecionar a guia fxTradePractice na tela de login: uma vez que você precisa fazer uma anotação do seu ID da conta. Ele está listado abaixo do cabeçalho de Meus Fundos pretos ao lado da Primária. O meu é um número de 7 dígitos. Além disso, você também precisará gerar um token API pessoal. Para fazer isso, clique em Gerenciar o Acesso à API abaixo da guia Outras Ações, no canto inferior esquerdo: Neste estágio, você será capaz de gerar um token da API. Você precisará da chave para usar mais tarde, portanto, certifique-se de anotá-la também. Agora você vai querer lançar o aplicativo FXTrade Practice, que nos permitirá ver as ordens executadas e nossa perda de papel (lucro) em lucro. Se você estiver executando um sistema Ubuntu você precisará instalar uma versão ligeiramente diferente do Java. Em particular, a versão Oracle do Java 8. Se você não fizer isso, então o simulador de prática não vai carregar a partir do navegador. Eu executei esses comandos no meu sistema: Você agora será capaz de lançar o ambiente de negociação de prática. Retorne ao painel do OANDA e clique no link Verde destacado Lançamento FXTrade Practice. Ele exibirá um diálogo Java perguntando se você deseja executá-lo. Clique em Executar e a ferramenta fxTrade Practice será carregada. Mine faltou a um gráfico de vela de 15 minutos de EUR / USD com o Painel de Cotações à esquerda: Neste ponto, estamos prontos para começar a projetar e codificar nosso sistema automatizado de negociação forex contra a API OANDA. Visão geral da arquitetura de negociação Se você tem acompanhado a série de backtester orientada a eventos para ações e ETFs que criei no ano passado, você estará ciente de como esse sistema de negociação orientado a eventos funciona. Para aqueles de vocês que são novos para o software de eventos. Eu sugeriria fortemente a leitura através do artigo a fim ganhar alguma introspecção em como trabalham. Em essência, todo o programa é executado em um loop infinte while que só termina quando o sistema de negociação é desligado. O mecanismo de comunicação central do programa é dado através de uma fila que contém eventos. A fila é constantemente consultada para verificar novos eventos. Uma vez que um evento foi retirado do topo da fila ele deve ser manipulado por um componente apropriado do programa. Assim, um feed de dados de mercado pode criar TickEvent s que são colocados na fila quando um novo preço de mercado chega. Um objeto de estratégia de geração de sinal pode criar OrderEvent s que devem ser enviados para uma corretora. A utilidade de tal sistema é dada pelo fato de que não importa qual ordem ou tipos de eventos são colocados na fila, pois eles sempre serão tratados corretamente pelo componente certo dentro do programa. Além disso, diferentes partes do programa podem ser executadas em threads separados. O que significa que nunca há qualquer espera por qualquer componente específico antes de processar qualquer outro. Isso é extremamente útil em situações de negociação algorítmica em que manipuladores de alimentação de dados de mercado e geradores de sinal de estratégia têm características de desempenho muito diferentes. O loop de negociação principal é dado pelo seguinte pseudo-código Python: Como dissemos acima, o código é executado em um loop infinito. Em primeiro lugar, a fila é consultada para recuperar um novo evento. Se a fila estiver vazia, então o loop simplesmente reinicia após um período de sono curto conhecido como batimento cardíaco. Se um evento é encontrado, seu tipo é avaliado e, em seguida, o módulo relevante (a estratégia ou o manipulador de execução) é chamado para lidar com o evento e possivelmente gerar novos que voltam para a fila. Os componentes básicos que vamos criar para o nosso sistema de negociação incluem o seguinte: Streaming Price Handler - Isto manterá uma conexão de longa duração aberta para servidores OANDAs e enviar dados tick (ou seja, bid / ask) através da conexão para todos os instrumentos que estavam interessados In. Estratégia Gerador de Sinal - Isso levará uma seqüência de eventos de carrapatos e usá-los para gerar ordens de negociação que serão executadas pelo manipulador de execução. Execution Handler - Toma um conjunto de eventos de ordem e os executa cegamente com OANDA. Eventos - Esses objetos constituem as mensagens que são passadas ao redor na fila de eventos. Exigimos apenas dois para esta implementação, nomeadamente o TickEvent eo OrderEvent. Ponto de entrada principal - O ponto de entrada principal também inclui o loop de comércio que pesquisa continuamente a fila de mensagens e envia mensagens para o componente correto. Isso geralmente é conhecido como o loop de eventos ou manipulador de eventos. Vamos agora discutir a implementação do código em detalhes. Na parte inferior do artigo é a lista completa de todos os arquivos de código-fonte. Se você colocá-los no mesmo diretório e executar python trading. py você começará a gerar ordens, assumindo que você tenha preenchido o seu ID de conta e token de autenticação da OANDA. Implantação do Python É má prática para armazenar senhas ou chaves de autenticação dentro de um codebase como você nunca pode prever quem será eventualmente permitido acesso a um projeto. Em um sistema de produção, armazenamos essas credenciais como variáveis ​​de ambiente com o sistema e, em seguida, consultamos esses envvars cada vez que o código é redistribuído. Isso garante que as senhas e os tokens de autenticação nunca sejam armazenados em um sistema de controle de versão. No entanto, como estamos unicamente interessados ​​em construir um sistema de negociação de brinquedos e não estamos preocupados com detalhes de produção neste artigo, em vez disso, separarão esses tokens de autenticação em um arquivo de configurações. No seguinte arquivo de configuração do settings. py, temos um dicionário chamado ENVIRONMENTS que armazena os pontos de extremidade da API para a API de fluxo de preços da OANDA ea API de negociação. Cada subdicionário contém três pontos de extremidade separados da API: real. Prática e sandbox. A API do sandbox é puramente para testar o código e para verificar se não há erros ou erros. Ele não tem as garantias de disponibilidade das APIs reais ou práticas. A API prática, em essência, fornece a capacidade de comércio de papel. Ou seja, fornece todos os recursos da API real em uma conta de prática simulada. A API real é apenas isso - é a negociação ao vivo Se você usar esse ponto de extremidade em seu código, ele será negociado contra o saldo da sua conta real. SER EXTREMAMENTE CUIDADOSO IMPORTANTE: Ao negociar contra a API prática lembre-se que um custo de transação importante, que de impacto de mercado. Não é considerado. Uma vez que nenhum comércio está sendo realmente colocado no ambiente, este custo deve ser contabilizado de outra forma em outro lugar usando um modelo de impacto de mercado se você deseja avaliar realisticamente o desempenho. A seguir, estamos usando a conta de prática como dada pela configuração DOMAIN. Precisamos de dois dicionários separados para os domínios, um para cada componente de streaming e trading API. Finalmente temos o ACCESSTOKEN e ACCOUNTID. Ive preenchido os dois abaixo com IDs fictícios assim que você precisará utilizar o seu próprio, que pode ser acessado a partir da página conta OANDA: O próximo passo é definir os eventos que a fila irá usar para ajudar a todos os componentes individuais comunicar. Precisamos de dois: TickEvent e OrderEvent. O primeiro armazena informações sobre dados de mercado de instrumentos, tais como o (melhor) lance / pedido eo tempo de negociação. O segundo é usado para transmitir ordens para o manipulador de execução e, portanto, contém o instrumento, o número de unidades para o comércio, o tipo de ordem (mercado ou limite) eo lado (ou seja, comprar e vender). Para o nosso código de eventos à prova de futuro, vamos criar uma classe base chamada Evento e todos os eventos herdarão isso. O código é fornecido abaixo em events. py: A próxima classe que vamos criar irá lidar com a estratégia de negociação. Nesta demo vamos criar uma estratégia um pouco absurda que simplesmente recebe todos os carrapatos do mercado e em cada tick 5 tick aleatoriamente compra ou vende 10.000 unidades de EUR / USD. Claramente esta é uma estratégia ridícula No entanto, é fantástico para fins de testes, porque é fácil de codificar e entender. Em entradas do diário futuro, estaremos substituindo isso por algo significativamente mais emocionante que (esperamos) gire lucro. O arquivo strategy. py pode ser encontrado abaixo. Permite trabalhar através dele e ver o que está acontecendo. Em primeiro lugar, importamos a biblioteca aleatória eo objeto OrderEvent de events. py. Precisamos da lib aleatória para selecionar uma ordem de compra ou venda aleatória. Precisamos de OrderEvent, pois é assim que o objeto de estratégia enviará ordens para a fila de eventos, que será mais tarde executada pelo manipulador de execução. A classe TestRandomStrategy simplesmente toma o instrumento (neste caso EUR / USD), o número de unidades ea fila de eventos como um conjunto de parâmetros. Em seguida, cria um contador de carrapatos que é usado para dizer quantas ocorrências TickEvent ele viu. A maior parte do trabalho ocorre no método calculatesignals, que simplesmente leva um evento, determina se ele é um TickEvent (caso contrário, ignore) e incrementa o contador de carrapatos. Em seguida, verifica para ver se a contagem é divisível por 5 e, em seguida, aleatoriamente compra ou vende, com uma ordem de mercado, o número especificado de unidades. Sua certamente não é a maior estratégia de negociação de mundos, mas será mais do que adequado para nossos propósitos de teste de API de corretagem OANDA O próximo componente é o manipulador de execução. Esta classe é encarregada de atuar em instâncias OrderEvent e fazer pedidos para o corretor (neste caso OANDA) de forma estúpida. Ou seja, não há nenhuma gestão de risco ou sobreposição de construção de potfolio. O manipulador de execução irá simplesmente executar qualquer ordem que tenha sido dada. Devemos passar todas as informações de autenticação para a classe Execution, incluindo o domínio (practice, real ou sandbox), o token de acesso e o ID da conta. Em seguida, criamos uma conexão segura com httplib. Um dos Pythons construídos em bibliotecas. A maior parte do trabalho ocorre em executeorder. O método requer um evento como um parâmetro. Em seguida, constrói dois dicionários - os cabeçalhos e os parâmetros. Esses dicionários serão então codificados corretamente (parcialmente por urllib, outra biblioteca Python) para serem enviados como uma solicitação HTTP POST para a API OANDAs. Passamos os parâmetros de cabeçalho Content-Type e Authorization, que incluem nossas informações de autenticação. Além disso, codificamos os parâmetros, que incluem o instrumento (EUR / USD), unidades, tipo de ordem e lado (compra / venda). Finalmente, fazemos o pedido e salvamos a resposta: O componente mais complexo do sistema de negociação é o objeto StreamingForexPrices, que lida com as atualizações de preço de mercado da OANDA. Existem dois métodos: connecttostream e streamtoqueue. O primeiro método usa a biblioteca de solicitações Python para se conectar a um soquete de transmissão com os cabeçalhos e parâmetros apropriados. Os parâmetros incluem a ID da conta ea lista de instrumentos necessários que devem ser ouvidas para actualizações (neste caso, é apenas EUR / USD). Observe a seguinte linha: Isso informa a conexão a ser transmitido e, portanto, mantidos abertos de forma longa. O segundo método, streamtoqueue. Na verdade tenta se conectar ao fluxo. Se a resposta não for bem sucedida (ou seja, o código de resposta não é HTTP 200), então simplesmente retornar e sair. Se for bem-sucedido, tentaremos carregar o pacote JSON retornado em um dicionário Python. Finalmente, convertemos o dicionário Python com o instrumento, bid / ask e timestamp em um TickEvent que é enviado para a fila de eventos: Agora temos todos os principais componentes no lugar. O passo final é encerrar tudo o que temos escrito até agora em um programa principal. O objetivo deste arquivo, conhecido como trading. py. É criar dois segmentos separados. Um dos quais executa o manipulador de preços eo outro que executa o manipulador de negociação. Por que precisamos de dois threads separados Simplificando, estamos executando duas partes separadas de código, os quais estão continuamente em execução. Se fôssemos criar um programa não-threaded, então o soquete streaming usado para as atualizações de preços jamais seria liberado de volta para o caminho do código principal e, portanto, nunca seria realmente realizar qualquer negociação. Da mesma forma, se executássemos o loop comercial (veja abaixo), nunca retornaríamos o caminho do fluxo para o soquete de streaming de preços. Portanto, precisamos de vários segmentos, um para cada componente, para que eles possam ser realizados de forma independente. Ambos se comunicarão entre si através da fila de eventos. Vamos examinar isso um pouco mais. Criamos dois segmentos separados com as seguintes linhas: Passamos o nome da função ou método para o argumento de palavra-chave de destino e passamos um iterável (como uma lista ou tupla) para o argumento de palavras-chave args, que passa esses argumentos para o método real /função. Finalmente nós começamos ambos os segmentos com as seguintes linhas: Assim, somos capazes de executar dois, efetivamente infinito loop, segmentos de código de forma independente, que ambos se comunicam através da fila de eventos. Observe que a biblioteca de threading Python não produz um verdadeiro multi-core multithreaded ambiente devido à implementação CPython do Python eo Global Interpreter Lock (GIL). Se você gostaria de ler mais sobre multithreading em Python, por favor, dê uma olhada neste artigo. Vamos examinar o resto do código em detalhes. Em primeiro lugar, importamos todas as bibliotecas necessárias, incluindo Fila. Threading e tempo. Importamos então todos os arquivos de código acima. Eu pessoalmente prefiro capitalizar quaisquer configurações, que é um hábito que eu peguei de trabalhar com o Django Depois que definimos a função de comércio, que foi explicado em Python-pseudocódigo acima. Um loop while infinito é executado (enquanto True:) que continuamente sondagens da fila de eventos e só ignora o loop se for encontrado vazio. Se um evento é encontrado, então é um TickEvent ou um OrderEvent e, em seguida, o componente apropriado é chamado para executá-lo. Neste caso, é um manipulador de estratégia ou de execução. O loop, em seguida, simplesmente dorme para segundos de pulsação (neste caso, 0,5 segundos) e continua. Finalmente, definimos o ponto de entrada principal do código na função principal. É bem comentado abaixo, mas vou resumir aqui. Em essência, instanciamos a fila de eventos e definimos os instrumentos / unidades. Em seguida, criamos a classe StreamingForexPrices streaming de preços e, em seguida, subseqüentemente o manipulador execução Execution. Ambos recebem os detalhes de autenticação necessários fornecidos pela OANDA ao criar uma conta. Em seguida, criamos a instância TestRandomStrategy. Finalmente, definimos os dois threads e, em seguida, iniciá-los: Para executar o código, você simplesmente precisa colocar todos os arquivos no mesmo diretório e chamar o seguinte no terminal: Note que para parar o código nesta fase, Processo Python. Via Ctrl-Z ou equivalente Ive não adicionou um thread adicional para lidar com a procura do sys. exit () que seria necessário para parar o código com segurança. Uma maneira potencial de parar o código em uma máquina Ubuntu / Linux é digitar: E então passar a saída deste (um número de processo) para o seguinte: Onde PROCESSID deve ser substituído pela saída de pgrep. Note que isto NÃO é uma prática particularmente boa Em artigos posteriores nós estaremos criando um mecanismo mais sofisticado de parar / iniciar que faz uso da supervisão de processo de Ubuntus para ter o sistema de negociação funcionando 24/7. A saída após 30 segundos ou assim, dependendo da hora do dia em relação ao horário de negociação principal para EUR / USD, para o código acima, é dada abaixo: As cinco primeiras linhas mostram os dados de carrapato JSON retornados de OANDA com bid / ask Preços. Posteriormente, você pode ver a saída de ordem de execução, bem como a resposta JSON retornado de OANDA confirmando a abertura de um comércio de compra de 10.000 unidades de EUR / USD eo preço que foi alcançado em. Isso continuará a ser executado indefinidamente até você matar o programa com um comando Ctrl-Z ou similar. O que vem em seguida Em artigos posteriores, vamos realizar algumas melhorias muito necessárias, incluindo: Estratégias reais - Estratégias de Forex adequadas que geram sinais lucrativos. Infraestrutura de produção - Implementação de servidor remoto e sistema de comércio monitorado 24/7, com capacidade de parar / iniciar. Portfólio e gestão de risco - Portfólio e sobreposições de risco para todas as ordens sugeridas a partir da estratégia. Múltiplas Estratégias - Construindo um portfólio de estratégias que se integram à superposição de gerenciamento de risco Como acontece com o backtestter de ações, também precisamos criar um módulo de backtesting forex. Isso nos permitirá realizar pesquisas rápidas e facilitar a implantação de estratégias. Código Completo settings. py (lembre-se de alterar ACCOUNTID e ACCESSTOKEN):

No comments:

Post a Comment