OANDA cookie, cookie, OANDA cookie cookie, cookie. ltiframe largura 1 altura 1 frameborder 0 estilo display nenhum mcestyle exibir nenhum gt lt iframe gt. OANDA FIX OANDA FIX 4 2, 4 3 4 4.REST OANDA, OANDA, 20 v20. API, - OANDA, API API OANDA - API, API OANDA. OANDA API - API, API OANDA API - API, API OANDA API. v20, 101-23423 OANDA API - API, API OANDA API - API, API OANDA API. v20, 101-23423 -105, API v3 REST v20.API REST v20. , 252345, API v1.Forex Diário de Negociação 1 - Automated Forex Trading com o OANDA API. I mencionado anteriormente no artigo QuantStart 2017 In Review que eu estaria gastando alguns de 2017 escrito sobre trading forex automatizado. Dado que eu próprio normalmente realizar Pesquisa em mercados de ações e futuros, eu pensei que seria divertido e educacional para escrever sobre minhas experiências de entrar no mercado forex no estilo de um diário Cada entrada diário tentará construir em todos os antes, mas também deve ser relativamente auto - Contida. Nesta primeira entrada do diário vou estar descrevendo como configurar uma nova conta corretora de prática com OANDA, bem como a forma de criar um motor de negociação multi-thread baseado em evento multi-threaded que pode executar automaticamente comércios em ambos um ambiente de prática e ao vivo . No ano passado, passamos muito tempo olhando para o backtesters evento-driven principalmente para ações e ETFs O que eu apresento abaixo é voltada para forex e pode ser usado tanto para negociação de papel ou tradi Eu 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 pedidos, que É necessário para a comunicação ao OANDA API. Since este é o primeiro borne diretamente sobre a troca de troca extrangeira, eo código apresentado abaixo pode ser adaptado diretamente a um ambiente vivo do comércio, mim gostaria de apresentar os seguintes disclaimers. Disclaimer Trocando o câmbio em Margem carrega 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ê, assim como para você Antes de decidir investir em divisas você deve considerar cuidadosamente o seu Objectivos de investimento, nível de experiência e apetite de risco Existe a possibilidade de que você possa sofrer uma perda de parte ou da totalidade do seu investimento inicial Ent e, portanto, você não deve investir 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 qualquer dúvida. Este software é fornecido como é e qualquer Expressas ou implícitas, incluindo, mas não se limitando a, as garantias implícitas de comercialização e aptidão para um propósito específico são exoneradas. Em nenhum caso os regentes ou contribuintes serão responsáveis por qualquer dano direto, indireto, incidental, especial, exemplar ou conseqüente 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, porém causados e em qualquer teoria de responsabilidade, seja em contrato, responsabilidade estrita ou delito, incluindo negligência ou Do uso deste software, mesmo se avisado da possibilidade de tal damage. Setting Up uma conta com OANDA. A primeira pergunta que vem à mente é Por que escolher a OANDA Basta colocar, depois de um pouco de googling em torno de corretores de forex que tinham APIs, vi que a OANDA tinha lançado recentemente uma adequada REST API que poderia facilmente ser comunicada com de praticamente qualquer idioma de uma forma extremamente simples Depois de ler através de seu desenvolvedor API de documentação Eu decidi dar-lhes uma tentativa, pelo menos com uma prática account. To ser claro - Eu não tenho nenhuma relação anterior ou existente com OANDA e estou apenas fornecendo esta recomendação com base na minha experiência limitada jogando com a sua prática API e alguns breve Uso para o download de dados de mercado, enquanto empregado em um fundo anteriormente Se alguém se deparou com qualquer outro corretores forex que também têm uma API similarmente moderna, então eu d 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 tela de inscrição screen. OANDA a seguir. Você poderá então fazer login com suas credenciais de login Make Certifique-se de selecionar a guia fxTradePractice na tela de login. Tela de login do OANDA. Uma vez que você precisará fazer uma anotação do seu ID da conta está listado sob o meu cabeçalho de fundos preto ao lado da mina principal é um 7 dígitos Número Além disso, você também precisará gerar um token API pessoal Para fazer isso, clique em Gerenciar o Acesso à API embaixo da aba Outras Ações na parte inferior esquerda. Neste estágio, você será capaz de gerar um token da API Você precisará da chave para uso posterior , Então certifique-se de anotá-lo para baixo well. You agora vai querer lançar a aplicação FXTrade Practice, que nos permitirá ver as ordens executadas e nossa perda de lucro papel. Se você estiver executando um sistema Ubuntu você precisará instalar um Versão ligeiramente diferente de 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 system. You agora será capaz de lançar o ambiente de negociação prática Voltar Para o painel OANDA e Clique no verde destacado Lançamento FXTrade Prática link Ela irá abrir um diálogo Java perguntando se você deseja executá-lo Clique em Executar e da ferramenta fxTrade Prática irá carregar Mina predefinido para um gráfico de vela de 15 minutos de EUR USD com o Painel de Cotações à esquerda. OANDA fxTrade Prática screen. At neste ponto estamos prontos para começar a projetar e codificar o nosso sistema de negociação forex automatizado contra o OANDA API. Overview de Trading Architecture. Se você tem seguido a série backtester evento-driven para ações e ETFs que eu criei No ano passado, você vai estar ciente de como tal sistema de negociação orientada a eventos Para aqueles de vocês que são novos para o software orientado a eventos eu sugeriria fortemente a leitura através do artigo, a fim de ganhar alguma introspecção em como eles funcionam. Em essência , Todo o programa é executado em um loop infinte enquanto 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 events. The fila é c Consultado para verificar se há novos eventos Uma vez que um evento foi retirado do topo da fila, ele deve ser manipulado por um componente apropriado do programa. Portanto, 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 que ordem ou tipos de eventos sejam colocados na fila, Será sempre corretamente tratada pelo componente direito dentro do programa. Além disso, diferentes partes do programa pode ser executado em segmentos separados, o que significa que nunca há qualquer espera por qualquer componente particular antes de processar qualquer outro. Isso é extremamente útil em situações de negociação algorítmica onde 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 pseudocódigo de Python. Em primeiro lugar, a fila é pesquisada 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 for encontrado, seu tipo será avaliado e Então o módulo relevante quer 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. Manterá uma conexão de longa duração aberta aos servidores OANDAs e enviará dados de carrapatos, isto é, solicitação de oferta através da conexão para quaisquer instrumentos que estejamos interessados. Gerador de Sinal Estratégico - Isso levará uma seqüência de eventos de carrapatos e os usará para gerar ordens de negociação que Será executado pelo manipulador de execução. Handler Execução - Toma um conjunto de eventos ordem e, em seguida, cegamente executa-los com OANDA. Events - Esses objetos constituem as mensagens que são passadas ao redor Na fila de eventos Só precisamos de dois para esta implementação, a saber, o TickEvent eo OrderEvent. Main Ponto de Entrada - 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. O loop de evento ou handler. We agora irá discutir a implementação do código em detalhe 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 você vai começar a gerar ordens, Supondo que você tenha preenchido o seu ID de conta e de autenticação token de OANDA. Python Implementation. It é má prática para armazenar senhas ou chaves de autenticação dentro de um codebase como você nunca pode prever quem será eventualmente permitido o acesso a um projeto Em um sistema de produção que seria Armazenar essas credenciais como variáveis de ambiente com o sistema e, em seguida, consultar esses envvars cada vez que o código é reimplantado Isso garante que as senhas e aut H nunca são 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 os detalhes de produção neste artigo, em vez disso, separar esses tokens de autenticação em um arquivo de configurações. Arquivo de configuração a seguir temos um dicionário chamado AMBIENTES que armazena os pontos de extremidade da API para a API de fluxo de preços OANDA ea API de negociação Cada subdicionário contém três pontos de extremidade API separados e sandbox. A API de sandbox é puramente para testar código e verificar Não há erros ou bugs Não tem as garantias de uptime das APIs reais ou práticas A API de prática, em essência, fornece a capacidade de comércio de papel Isso é, ele 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 nó de extremidade em seu código, ele será negociado contra o saldo da sua conta real BE EXTREMAMENTE CAREFUL. IMPORTANT Quando a negociação Contra a prática API lembre-se que um custo de transação importante, que de impacto no mercado não é considerado uma vez que nenhum comércio está realmente sendo 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. No seguinte estamos usando a conta de prática como dada pela configuração DOMAIN Nós precisamos de dois dicionários separados para os domínios, um cada para os componentes de API de streaming e negociação Finalmente temos o ACCESSTOKEN e ACCOUNTID Eu preenchi os dois abaixo com IDs fictícios Então você precisará utilizar o seu próprio, que pode ser acessado a partir da página de conta OANDA. O próximo passo é definir os eventos que a fila irá usar para ajudar a todos os componentes individuais comunicar Nós precisamos de dois TickEvent e OrderEvent O primeiro armazena informações Sobre os dados do mercado de instrumentos, tais como o melhor lance de pedir eo tempo de negociação O segundo é usado para transmitir ordens para o manipulador de execução e, portanto, contai Ns o instrumento, o número de unidades a negociar, o tipo de ordem mercado ou limite eo lado isto é compra e venda. Para o futuro-prova nosso código de eventos nós estamos indo criar uma classe de base chamada Evento e ter todos os eventos herdam deste The Código é fornecido abaixo in. The próxima classe que vamos criar vai lidar com a estratégia de negociação Nesta demonstração, vamos criar uma estratégia um pouco absurdo 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 teste porque é simples de código e entender Em entradas de diário futuro, vamos substituir isso com algo significativamente mais emocionante que esperamos transformar um lucro. O arquivo pode Ser encontrado abaixo Vamos trabalhar através dele e ver o que está acontecendo Em primeiro lugar, importar a biblioteca aleatória eo objeto OrderEvent de Precisamos da lib aleatório para selecionar uma ordem aleatória comprar ou vender Nós precisamos OrderEv Pois esta é a forma como 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 maioria do trabalho ocorre no método calculatesignals, que simplesmente leva um evento, determina se ele é um TickEvent caso contrário ignorar 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 que certamente não é o mundo s maior estratégia comercial, mas será mais do que adequado para o nosso OANDA Corretor de API testing purposes. O próximo componente é o manipulador de execução Esta classe é encarregada de atuar sobre as instâncias OrderEvent e fazer pedidos para o corretor, neste caso OANDA de uma forma burra Isso é, o Não há gerenciamento de risco ou sobreposição de construção de potfolio O manipulador de execução simplesmente executará qualquer ordem que tenha sido dada. Devemos passar todas as informações de autenticação para a classe Execution, incluindo a prática de domínio, real ou sandbox, token de acesso e conta ID Criamos então uma conexão segura com 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 Ele então constrói dois dicionários - os cabeçalhos e os parâmetros Estes dicionários serão então corretamente codificados parcialmente Urllib outra biblioteca Python para ser enviado como uma solicitação POST para OANDAs API. We passar o Content-Type e Authorization cabeçalho parâmetros, que incluem as nossas informações de autenticação Além disso, codificar os parâmetros, que incluem o instrumento EUR USD, unidades, tipo de ordem e Lado comprar vender Finalmente, fazemos o pedido e salvar a resposta. O componente mais complexo do sistema de negociação é o StreamingForexPrices obj Ect, que lida com as atualizações de preços de mercado de 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 streaming com os cabeçalhos e parâmetros adequados Os parâmetros incluem a Account ID ea lista de instrumentos necessários que Deve ser ouvido para atualizações, neste caso, é apenas EUR USD Observe a seguinte linha. Isso diz a conexão a ser transmitido e, portanto, mantidos abertos em uma maneira longa running. The segundo método, streamtoqueue realmente tenta se conectar ao fluxo If A resposta não é bem sucedida, ou seja, o código de resposta não é 200, então simplesmente retornar e sair Se for bem-sucedido tentamos carregar o pacote JSON retornado em um dicionário Python Finalmente, convertemos o dicionário Python com o instrumento, ask ask e timestamp Em um TickEvent que é enviado para a fila de eventos. Agora temos todos os principais componentes no lugar. O passo final é finalizar tudo o que escrevemos até agora em Para um programa principal O objetivo deste arquivo, conhecido como é criar dois segmentos separados, um dos quais executa o manipulador de preços e outro que executa o manipulador de negociação. Por que precisamos de dois segmentos separados Simplesmente, estamos executando duas peças separadas De código, os quais estão continuamente em execução Se formos criar um programa não-threaded, então o soquete de streaming usado para as atualizações de preços jamais seria liberado de volta para o caminho do código principal e, portanto, nunca iria realmente realizar qualquer negociação , Se nós corremos o laço de comércio veja abaixo, nós nunca retornaríamos realmente o trajeto do fluxo ao soquete fluindo do preço. Conseqüentemente nós necessitamos as linhas múltiplas, uma para cada componente, de modo que possam ser executadas independentemente Ambos comunicarão um ao outro através de A fila de eventos. Vamos examinar isto um pouco mais. Criamos dois segmentos separados com as seguintes linhas. Passamos o nome da função ou do método para o argumento de palavra-chave de destino e passamos uma iterável, como uma lista ou uma tupla Para o argumento de palavras-chave args, que passa esses argumentos para a função de método real. Finalmente, iniciamos ambos os segmentos com as seguintes linhas. Assim, podemos executar dois segmentos de looping efetivamente infinitos, independentemente, que ambos se comunicam através da fila de eventos Note que a biblioteca de threading Python não produz um verdadeiro multi-core multithreaded ambiente devido à implementação CPython de Python e Global Interpreter Lock GIL Se você quiser ler mais sobre multithreading em Python, por favor dê uma olhada neste artigo. S examinar o resto do código em detalhes Primeiro nós importamos todas as bibliotecas necessárias, incluindo fila de filas e tempo Nós, então, importar todos os arquivos de código acima Eu pessoalmente prefiro capitalizar quaisquer configurações, que é um hábito que eu peguei de trabalhar com Django. After que definimos a função de comércio, que foi explicado em Python-pseudocode acima Um infinito enquanto loop é realizado enquanto True que continu Ously 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, é uma estratégia ou O manipulador 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 nós instanciar os eventos Fila e definir as unidades de instrumentos Então, criamos a classe StreamingForexPrices streaming de preços e, em seguida, posteriormente, o manipulador Execution execução Ambos recebem os detalhes de autenticação necessários que são dadas por OANDA ao criar uma conta. Nós então criar 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 neste estágio requer uma matança dura do processo de Python através de Ctrl-Z ou o equivalente Eu ve não adicionado um fio adicional para segurar procurar o que seria necessário parar o código com segurança Uma maneira potencial parar o código em um Ubuntu máquina Linux é a type. And, em seguida, passar a saída deste um número de processo para o seguinte. Quando PROCESSID deve ser substituído com a saída de pgrep Note que esta não é particularmente boa practice. In artigos posteriores vamos estar criando um mais sofisticado Stop que faz uso da supervisão de processo do Ubuntu s para ter o sistema de negociação em execução 24 7. A saída após 30 segundos ou assim, dependendo da hora do dia em relação às principais horas de negociação para EUR USD, para o código acima , É dada abaixo. As primeiras cinco linhas mostram os dados de carimbo JSON retornados de OANDA com preços de solicitação de oferta. Posteriormente, você pode ver a saída de ordem de execução, bem como a resposta de JSON retornada de OANDA confirmando a abertura de um comércio de compra f Ou 10.000 unidades de EUR USD eo preço que foi alcançado em. Este irá continuar a correr indefinidamente até que você mate o programa com um comando Ctrl-Z ou similar. Em artigos posteriores vamos realizar algumas melhorias muito necessárias, incluindo. Estratégias reais - Estratégias forex adequadas que geram sinais rentáveis. Infraestrutura de produção - Implementação de servidor remoto e 24 7 sistema de comércio monitorado, com stop start capacity. Portfolio e gestão de risco - Carteira e sobreposições de risco para todas as ordens sugeridas da estratégia. Multiple estratégias - Construindo Um portfólio de estratégias que se integram na sobreposição de gerenciamento de risco. Como com o backtestter de ações, também precisamos criar um módulo de backtesting forex que nos permita realizar pesquisas rápidas e facilitar a implantação de estratégias. Lembre-se de mudar ACCOUNTID e ACCESSTOKEN. Just Começando com Quantitative Trading. OANDA cookie, cookie, OANDA cookie cookie, cookie. ltiframe largura 1 altura 1 frameborder 0 estilo mostrar nenhum mcestyle mostrar nenhum gt lt iframe gt.,, IOS Android. METATRADER 4 , 4 iOS Android., 1 1 2017 OANDA v20, 4.1996 2017 OANDA Corporation OANDA, fxTrade fx OANDA Corporation.- OANDA Europe Ltd,, 4 50 1.OANDA Europe Limited, 7110087, Tower 42, Floor 9a, 25 Old Broad St, Londres EC2N 1HQ 542574.OANDA Japão Co Ltd Kanto Local Financial Bureau Kin-sho, 2137, 1571.
No comments:
Post a Comment